From 296d94c7ab3f30a1bbb19660826d82db413aece0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 19:08:06 -0400 Subject: [PATCH 1/7] Updated app libs --- pubspec.yaml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index f70c102..3bdd863 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,22 +18,21 @@ dependencies: # https://pub.dev/packages/flag flag: 7.0.0 # https://pub.dev/packages/marquee - marquee: 2.2.3 + marquee: 2.3.0 # https://pub.dev/packages/url_launcher - url_launcher: 6.2.2 + url_launcher: 6.3.1 # https://pub.dev/packages/package_info_plus - package_info_plus: 5.0.1 + package_info_plus: 8.3.0 # https://pub.dev/packages/shared_preferences - shared_preferences: 2.2.2 + shared_preferences: 2.5.3 # https://pub.dev/packages/cupertino_icons - cupertino_icons: 1.0.6 + cupertino_icons: 1.0.8 dev_dependencies: flutter_test: sdk: flutter # https://pub.dev/packages/flutter_lints - flutter_lints: 3.0.1 - + flutter_lints: 6.0.0 flutter: uses-material-design: true assets: From c85e06aa260555eeba1c31325b1350f8a80cee76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 19:08:42 -0400 Subject: [PATCH 2/7] Migrating from imperative gradle plugins to declarative gradle plugins --- android/app/build.gradle | 16 +- android/build.gradle | 13 -- .../gradle/wrapper/gradle-wrapper.properties | 4 +- android/settings.gradle | 30 ++- pubspec.lock | 194 ++++++++++-------- 5 files changed, 144 insertions(+), 113 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index b9fcd3f..b346412 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,10 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { @@ -27,10 +29,6 @@ if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { compileSdkVersion flutter.compileSdkVersion @@ -75,5 +73,5 @@ flutter { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + } diff --git a/android/build.gradle b/android/build.gradle index 6e8ef4f..bc157bd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,16 +1,3 @@ -buildscript { - ext.kotlin_version = '1.7.22' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - allprojects { repositories { google() diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index cfe88f6..ae7f283 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 +#Wed Jul 09 18:54:26 AMT 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index 44e62bc..92d319a 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,11 +1,25 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" // apply true + id "com.android.application" version "7.4.2" apply false + id "org.jetbrains.kotlin.android" version "1.7.22" apply false +} + +include ":app" \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index de56917..1126449 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,50 +13,50 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.13.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" characters: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" enum_to_string: dependency: transitive description: @@ -69,26 +69,26 @@ packages: dependency: transitive description: name: fading_edge_scrollview - sha256: c25c2231652ce774cc31824d0112f11f653881f43d7f5302c05af11942052031 + sha256: "1f84fe3ea8e251d00d5735e27502a6a250e4aa3d3b330d3fdcb475af741464ef" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.1.1" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" ffi: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.4" file: dependency: transitive description: @@ -114,10 +114,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "6.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -161,74 +161,98 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + url: "https://pub.dev" + source: hosted + version: "0.20.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + url: "https://pub.dev" + source: hosted + version: "10.0.9" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "3.0.9" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "6.0.0" marquee: dependency: "direct main" description: name: marquee - sha256: "4b5243d2804373bdc25fc93d42c3b402d6ec1f4ee8d0bb72276edd04ae7addb8" + sha256: a87e7e80c5d21434f90ad92add9f820cf68be374b226404fe881d2bba7be0862 url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.0" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.16.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.2.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.1" path_parsing: dependency: transitive description: @@ -289,111 +313,111 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.5.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.4.10" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.5.4" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.4.3" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" stack_trace: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.4" typed_data: dependency: transitive description: @@ -406,26 +430,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86 + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.3.1" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" + sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.3.16" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.3.3" url_launcher_linux: dependency: transitive description: @@ -446,18 +470,18 @@ packages: dependency: transitive description: name: url_launcher_platform_interface - sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9" + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.4.1" url_launcher_windows: dependency: transitive description: @@ -498,22 +522,30 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 + url: "https://pub.dev" + source: hosted + version: "15.0.0" web: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.1" win32: dependency: transitive description: name: win32 - sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 + sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03" url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "5.14.0" xdg_directories: dependency: transitive description: @@ -531,5 +563,5 @@ packages: source: hosted version: "6.5.0" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.27.0" From 4046a85904723b26dc0b8d0876006903977dd21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 19:39:55 -0400 Subject: [PATCH 3/7] Upgrade Android AGP to 8.9.0 and Kotlin to 2.2.0 --- android/app/build.gradle | 1 + android/app/src/debug/AndroidManifest.xml | 3 +-- android/app/src/main/AndroidManifest.xml | 3 +-- android/app/src/profile/AndroidManifest.xml | 3 +-- android/gradle.properties | 3 +++ android/gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 4 ++-- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index b346412..78c8a06 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -66,6 +66,7 @@ android { signingConfig signingConfigs.release } } + namespace 'com.realitymod.prspy' } flutter { diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 345cc92..f880684 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 568de60..005b4a4 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + + diff --git a/android/gradle.properties b/android/gradle.properties index 94adc3a..c8b94d7 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,6 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true +android.nonTransitiveRClass=false +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index ae7f283..5e6335d 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jul 09 18:54:26 AMT 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/settings.gradle b/android/settings.gradle index 92d319a..986a8c9 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" // apply true - id "com.android.application" version "7.4.2" apply false - id "org.jetbrains.kotlin.android" version "1.7.22" apply false + id "com.android.application" version '8.9.0' apply false + id "org.jetbrains.kotlin.android" version "2.2.0" apply false } include ":app" \ No newline at end of file From 5fa6ed27886b8094af10b02c0584b8c54a43f206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 20:33:37 -0400 Subject: [PATCH 4/7] Updated faction flags --- assets/images/faction_flags/chechen90.png | Bin 0 -> 5584 bytes assets/images/faction_flags/chinsurgent90.png | Bin 0 -> 6665 bytes assets/images/faction_flags/ru90.png | Bin 0 -> 5579 bytes assets/images/faction_flags/ww2ger41.png | Bin 0 -> 21374 bytes assets/images/faction_flags/ww2rus.png | Bin 0 -> 5616 bytes assets/images/faction_flags/ww2rusearly.png | Bin 0 -> 5616 bytes lib/models/faction.dart | 82 ++++++++---------- 7 files changed, 35 insertions(+), 47 deletions(-) create mode 100644 assets/images/faction_flags/chechen90.png create mode 100644 assets/images/faction_flags/chinsurgent90.png create mode 100644 assets/images/faction_flags/ru90.png create mode 100644 assets/images/faction_flags/ww2ger41.png create mode 100644 assets/images/faction_flags/ww2rus.png create mode 100644 assets/images/faction_flags/ww2rusearly.png diff --git a/assets/images/faction_flags/chechen90.png b/assets/images/faction_flags/chechen90.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc7603bc5339016bd9fcbe467504aa81ffcc74e GIT binary patch literal 5584 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 M)%DcsRcyll3uTaaPyhe` literal 0 HcmV?d00001 diff --git a/assets/images/faction_flags/chinsurgent90.png b/assets/images/faction_flags/chinsurgent90.png new file mode 100644 index 0000000000000000000000000000000000000000..49dd72aebfa669b55567d179b3c66089b42294b5 GIT binary patch literal 6665 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 X`_Bu$JucpX3xJ`XsqPDHyTJbeFIEYd literal 0 HcmV?d00001 diff --git a/assets/images/faction_flags/ww2rus.png b/assets/images/faction_flags/ww2rus.png new file mode 100644 index 0000000000000000000000000000000000000000..4abbf06810ab3229ce10ad6736718814ed465c45 GIT binary patch literal 5616 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 literal 0 HcmV?d00001 diff --git a/assets/images/faction_flags/ww2rusearly.png b/assets/images/faction_flags/ww2rusearly.png new file mode 100644 index 0000000000000000000000000000000000000000..4abbf06810ab3229ce10ad6736718814ed465c45 GIT binary patch literal 5616 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 literal 0 HcmV?d00001 diff --git a/lib/models/faction.dart b/lib/models/faction.dart index c1a7918..0276511 100644 --- a/lib/models/faction.dart +++ b/lib/models/faction.dart @@ -28,53 +28,41 @@ class Faction { /// factory Faction.fromCode({required String code}) { code = code.toLowerCase(); - late Faction team; - if (code == 'vnnva') { - team = Faction(code: code, name: 'North Vietnamese Army'); - } else if (code == 'vnusa' || code == 'usa' || code == 'ww2usa') { - team = Faction(code: code, name: 'United States Army'); - } else if (code == 'ch') { - team = Faction(code: code, name: 'Chinese Forces'); - } else if (code == 'us' || code == 'vnusmc') { - team = Faction(code: code, name: 'USMC'); - } else if (code == 'ru') { - team = Faction(code: code, name: 'Russian Armed Forces'); - } else if (code == 'meinsurgent') { - team = Faction(code: code, name: 'Insurgents'); - } else if (code == 'gb' || code == 'gb82') { - team = Faction(code: code, name: 'British Armed Forces'); - } else if (code == 'mec') { - team = Faction(code: code, name: 'Middle Eastern Coalition'); - } else if (code == 'hamas') { - team = Faction(code: code, name: 'Hamas'); - } else if (code == 'idf') { - team = Faction(code: code, name: 'Israeli Defence Force'); - } else if (code == 'nl') { - team = Faction(code: code, name: 'Dutch Armed Forces'); - } else if (code == 'pl') { - team = Faction(code: code, name: 'Polish Armed Forces'); - } else if (code == 'ger') { - team = Faction(code: code, name: 'German Forces'); - } else if (code == 'chinsurgent') { - team = Faction(code: code, name: 'Militia'); - } else if (code == 'cf') { - team = Faction(code: code, name: 'Canadian Forces'); - } else if (code == 'taliban') { - team = Faction(code: code, name: 'Taliban'); - } else if (code == 'ww2ger') { - team = Faction(code: code, name: 'Wehrmacht'); - } else if (code == 'arg82') { - team = Faction(code: code, name: 'Argentine Armed Forces'); - } else if (code == 'fsa') { - team = Faction(code: code, name: 'Syrian Rebels'); - } else if (code == 'fr') { - team = Faction(code: code, name: 'French Forces'); - } else if (code == 'arf') { - return Faction(code: code, name: 'African Resistance Fighters'); - } else { - team = Faction(code: code, name: 'Unknown Faction'); - } - return team; + const Map factionMap = { + 'vnnva': 'North Vietnamese Army', + 'vnusa': 'United States Army', + 'usa': 'United States Army', + 'ww2usa': 'United States Army', + 'ch': 'Chinese Forces', + 'us': 'USMC', + 'vnusmc': 'USMC', + 'ru': 'Russian Armed Forces', + 'ru90': 'Russian Armed Forces', + 'meinsurgent': 'Insurgents', + 'gb': 'British Armed Forces', + 'gb82': 'British Armed Forces', + 'mec': 'Middle Eastern Coalition', + 'hamas': 'Hamas', + 'idf': 'Israeli Defence Force', + 'nl': 'Dutch Armed Forces', + 'pl': 'Polish Armed Forces', + 'ger': 'German Forces', + 'chinsurgent': 'Militia', + 'chinsurgent90': 'Militia', + 'cf': 'Canadian Forces', + 'taliban': 'Taliban', + 'ww2ger': 'Wehrmacht', + 'ww2ger41': 'Wehrmacht', + 'arg82': 'Argentine Armed Forces', + 'fsa': 'Syrian Rebels', + 'fr': 'French Forces', + 'arf': 'African Resistance Fighters', + 'ww2rusearly': 'Red Army', + 'ww2rus': 'Red Army', + 'chechen90': 'Chechnya', + }; + final String name = factionMap[code] ?? 'Unknown Faction'; + return Faction(code: code, name: name); } /// From d535c29c1981cda5fa4c749758cdf745ec31beb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 20:41:37 -0400 Subject: [PATCH 5/7] upgraded target sdk to 36 --- android/app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 78c8a06..b01090d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -30,7 +30,7 @@ if (keystorePropertiesFile.exists()) { } android { - compileSdkVersion flutter.compileSdkVersion + compileSdkVersion 36 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -48,7 +48,7 @@ android { defaultConfig { applicationId "com.realitymod.prspy" minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.compileSdkVersion + targetSdkVersion 36 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } From 7c5b11b29010c4b0b0539c996925c65221bdd0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 20:46:52 -0400 Subject: [PATCH 6/7] Fix linter issues --- lib/widgets/custom_player_list.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/widgets/custom_player_list.dart b/lib/widgets/custom_player_list.dart index bdee79e..db321a9 100644 --- a/lib/widgets/custom_player_list.dart +++ b/lib/widgets/custom_player_list.dart @@ -235,7 +235,7 @@ class _CustomPlayerListState extends State ), ], ), - tileColor: isFriend ? Colors.blue.withOpacity(0.2) : null, + tileColor: isFriend ? Colors.blue.withValues(alpha: 0.2) : null, onTap: () { if (!player.isAi) { showModalBottomSheet( From 8f3e0878c04b3e2b22dcd060d23a910ba9be466e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Claro?= Date: Wed, 9 Jul 2025 20:47:05 -0400 Subject: [PATCH 7/7] Better UI visual --- lib/widgets/custom_player_detail_modal.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/widgets/custom_player_detail_modal.dart b/lib/widgets/custom_player_detail_modal.dart index 8c2b0fd..c57afb5 100644 --- a/lib/widgets/custom_player_detail_modal.dart +++ b/lib/widgets/custom_player_detail_modal.dart @@ -68,9 +68,11 @@ class CustomPlayerDetailModal extends StatelessWidget { label: Text( isFriend ? 'Remove Friend' : 'Add Friend', textAlign: TextAlign.center, + style: const TextStyle(color: Colors.white), ), icon: Icon( isFriend ? Icons.person_remove : Icons.person_add, + color: Colors.white, ), style: ElevatedButton.styleFrom( backgroundColor: