build: upgrade to Flutter 3.47.4 (AGP 9.1 / Gradle 9.3, iOS 15 + UIScene), refresh deps and CI
Build Android APK / Build Release APKs (push) Failing after 1m7s

Flutter 3.24.5 -> 3.47.4 with the matching toolchain changes:

- pubspec: Dart ^3.11, Firebase core 4 / auth 6 / firestore 6 / storage 13,
  drop unused image_cropper, logging, change_app_package_name,
  pdf_widget_wrapper; pin path_provider_android <2.3 (needs NDK/CMake, not
  feasible on the ARM64 Gitea runner)
- Dart: CardTheme -> CardThemeData, replace deprecated withOpacity,
  Matrix4.scale, DropdownButtonFormField.value
- iOS: deployment target 15.0, UIScene lifecycle (AppDelegate/Info.plist),
  untrack stale Podfile.lock, add LaunchImage asset set
- Android: Gradle 9.3.1, AGP 9.1.0, Kotlin 2.4.0, google-services 4.5.0,
  layout.buildDirectory instead of removed Project.buildDir, remove manifest
  package attribute and duplicate MainActivity, kotlin.incremental=false
- CI: pin FLUTTER_VERSION in both workflows; iOS on macos-26 with SwiftPM
  disabled (CocoaPods only); Gitea job keeps cirruslabs 3.44.0 as base image
  (images discontinued) and switches the bundled Flutter SDK by git tag

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 22:45:30 +02:00
co-authored by Claude Opus 5
parent 85556dabb4
commit df34d66d38
31 changed files with 516 additions and 1270 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ class MyApp extends StatelessWidget {
backgroundColor: Colors.white,
foregroundColor: Colors.black87,
),
cardTheme: CardTheme(
cardTheme: CardThemeData(
elevation: 1,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
+2 -2
View File
@@ -215,7 +215,7 @@ class _AddIssueScreenState extends State<AddIssueScreen> {
),
const SizedBox(height: 16),
DropdownButtonFormField<String>(
value: _selectedStreet,
initialValue: _selectedStreet,
decoration: const InputDecoration(
labelText: 'Straße / Örtlichkeit *',
border: OutlineInputBorder(),
@@ -232,7 +232,7 @@ class _AddIssueScreenState extends State<AddIssueScreen> {
),
const SizedBox(height: 16),
DropdownButtonFormField<String>(
value: _selectedCategory,
initialValue: _selectedCategory,
decoration: const InputDecoration(
labelText: 'Grundlage / Kategorie *',
border: OutlineInputBorder(),
+2 -2
View File
@@ -284,7 +284,7 @@ class _AdminMessagesScreenState extends State<AdminMessagesScreen> {
return Expanded(
child: OutlinedButton(
style: OutlinedButton.styleFrom(
backgroundColor: isCurrent ? color.withOpacity(0.15) : null,
backgroundColor: isCurrent ? color.withValues(alpha: 0.15) : null,
side: BorderSide(
color: isCurrent ? color : Colors.grey.shade300,
width: isCurrent ? 2 : 1,
@@ -332,7 +332,7 @@ class _AdminMessagesScreenState extends State<AdminMessagesScreen> {
decoration: BoxDecoration(
color: bg,
borderRadius: BorderRadius.circular(12),
border: Border.all(color: fg.withOpacity(0.3)),
border: Border.all(color: fg.withValues(alpha: 0.3)),
),
child: Text(
status,
+1 -1
View File
@@ -291,7 +291,7 @@ class _AuthDialogState extends State<AuthDialog>
child: Image.asset(
'assets/images/logo.png',
height: 28,
errorBuilder: (_, __, ___) => const Icon(
errorBuilder: (_, _, _) => const Icon(
Icons.campaign,
color: Colors.blue,
),
+4 -4
View File
@@ -34,14 +34,14 @@ class _PdfViewerScreenState extends State<PdfViewerScreen> {
void _zoomIn() {
setState(() {
_zoomLevel = (_zoomLevel * 1.3).clamp(0.8, 5.0);
_transformationController.value = Matrix4.identity()..scale(_zoomLevel);
_transformationController.value = Matrix4.diagonal3Values(_zoomLevel, _zoomLevel, _zoomLevel);
});
}
void _zoomOut() {
setState(() {
_zoomLevel = (_zoomLevel / 1.3).clamp(0.8, 5.0);
_transformationController.value = Matrix4.identity()..scale(_zoomLevel);
_transformationController.value = Matrix4.diagonal3Values(_zoomLevel, _zoomLevel, _zoomLevel);
});
}
@@ -196,7 +196,7 @@ class _PdfViewerScreenState extends State<PdfViewerScreen> {
borderRadius: BorderRadius.circular(4),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.15),
color: Colors.black.withValues(alpha: 0.15),
blurRadius: 10,
offset: const Offset(0, 3),
),
@@ -235,7 +235,7 @@ class _PdfViewerScreenState extends State<PdfViewerScreen> {
elevation: 4,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24)),
color: Colors.white.withOpacity(0.92),
color: Colors.white.withValues(alpha: 0.92),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 2),
child: Column(
+2 -2
View File
@@ -118,8 +118,8 @@ class FirestoreService {
'firstName': firstName,
if (lastName != null && lastName.isNotEmpty)
'lastName': lastName,
if (emailVerified != null) 'emailVerified': emailVerified,
if (isAdmin != null) 'isAdmin': isAdmin,
'emailVerified': ?emailVerified,
'isAdmin': ?isAdmin,
};
if (!doc.exists) {