diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 57c7199f7..4d99c2db2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ _See also: [Flutter's code of conduct]_ ## Is this the right place for your sample? In most cases, if you've written a great sample app, it should be maintained -in your own repoistory. You can maintain your sample app in your own repo +in your own repository. You can maintain your sample app in your own repo (or with another source control provider) and still be as important a part of the Flutter-verse as anything you see here. @@ -99,7 +99,7 @@ Validate your idea against the following criteria: 1. **The sample solves a single problem or set of tightly coupled problems.**
If not, you're either writing a Demo app or an extended sample. These might - still be appropriate for the samples repos, but need to be justified. + still be appropriate for the sample repos, but need to be justified. 2. **The target audience for the sample isn’t beginners.** 3. **The sample code isn’t so complex that it needs video or text explanation.**
@@ -115,10 +115,10 @@ Validate your idea against the following criteria: 6. **The topic doesn’t have crossover with any existing samples.**
If it does, ensure that it wouldn't be better to update the existing sample. -## What are your ongoing maintenance resposibilities? +## What are your ongoing maintenance responsibilities? All sample code has an unbound maintenance cost. If you cannot commit to maintaining a sample -(for the forseeable future, barring changes in life circumstances), then you should talk to the +(for the foreseeable future, barring changes in life circumstances), then you should talk to the [primary maintainers] of this project, particularly @ericwindmill, before submitting a PR. Any new sample **must** have a CODEOWNER, and that owner is most likely you (the author). diff --git a/add_to_app/fullscreen/README.md b/add_to_app/fullscreen/README.md index 8abc792c8..0f378d5ba 100644 --- a/add_to_app/fullscreen/README.md +++ b/add_to_app/fullscreen/README.md @@ -5,7 +5,7 @@ Embeds a full screen instance of Flutter into an existing iOS or Android app. ## Description These apps showcase a relatively straightforward integration of -`flutter_module`: +`flutter_module_fullscreen`: * The Flutter module is built along with the app when the app is built. * The Flutter engine is warmed up at app launch. @@ -27,7 +27,7 @@ you're building for both iOS and Android, with both toolchains installed): #!/bin/bash set -e - cd flutter_module/ + cd flutter_module_fullscreen/ flutter pub get # For Android builds: diff --git a/add_to_app/fullscreen/android_fullscreen/settings.gradle b/add_to_app/fullscreen/android_fullscreen/settings.gradle index 19816f4e8..97e95d4c1 100644 --- a/add_to_app/fullscreen/android_fullscreen/settings.gradle +++ b/add_to_app/fullscreen/android_fullscreen/settings.gradle @@ -3,5 +3,5 @@ rootProject.name='AndroidFullScreen' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, - 'flutter_module/.android/include_flutter.groovy' + 'flutter_module_fullscreen/.android/include_flutter.groovy' )) \ No newline at end of file diff --git a/add_to_app/fullscreen/flutter_module_fullscreen/README.md b/add_to_app/fullscreen/flutter_module_fullscreen/README.md index 092c7d11a..b1513f2d5 100644 --- a/add_to_app/fullscreen/flutter_module_fullscreen/README.md +++ b/add_to_app/fullscreen/flutter_module_fullscreen/README.md @@ -1,4 +1,4 @@ -# flutter_module +# flutter_module_fullscreen An example Flutter module used in the Flutter add-to-app samples. For more information on how to use it, see the [README.md](../README.md) parent diff --git a/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj b/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj index c6c8cf44a..a5eaf5f35 100644 --- a/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj +++ b/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -175,11 +175,11 @@ buildConfigurationList = 26DF66FC233136470076ACA6 /* Build configuration list for PBXNativeTarget "IOSFullScreen" */; buildPhases = ( 9AB0355F19DEFA7A4ECCC777 /* [CP] Check Pods Manifest.lock */, - 79D4306CA9A49DFDB68D2B71 /* [CP-User] Run Flutter Build flutter_module Script */, + 79D4306CA9A49DFDB68D2B71 /* [CP-User] Run Flutter Build flutter_module_fullscreen Script */, 26DF66D0233136460076ACA6 /* Sources */, 26DF66D1233136460076ACA6 /* Frameworks */, 26DF66D2233136460076ACA6 /* Resources */, - D1C2795C35803D65EBC8B371 /* [CP] Embed Pods Frameworks */, + B9B95ECDA31F21359E3D008B /* [CP-User] Embed Flutter Build flutter_module_fullscreen Script */, ); buildRules = ( ); @@ -321,15 +321,15 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 79D4306CA9A49DFDB68D2B71 /* [CP-User] Run Flutter Build flutter_module Script */ = { + 79D4306CA9A49DFDB68D2B71 /* [CP-User] Run Flutter Build flutter_module_fullscreen Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - name = "[CP-User] Run Flutter Build flutter_module Script"; + name = "[CP-User] Run Flutter Build flutter_module_fullscreen Script"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\nset -u\nsource \"${SRCROOT}/../flutter_module/.ios/Flutter/flutter_export_environment.sh\"\nexport VERBOSE_SCRIPT_LOGGING=1 && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/xcode_backend.sh build"; + shellScript = "set -e\nset -u\nsource \"${SRCROOT}/../flutter_module_fullscreen/.ios/Flutter/flutter_export_environment.sh\"\nexport VERBOSE_SCRIPT_LOGGING=1 && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/xcode_backend.sh build"; }; 9AB0355F19DEFA7A4ECCC777 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -353,6 +353,16 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + B9B95ECDA31F21359E3D008B /* [CP-User] Embed Flutter Build flutter_module_fullscreen Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "[CP-User] Embed Flutter Build flutter_module_fullscreen Script"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -e\nset -u\nsource \"${SRCROOT}/../flutter_module_fullscreen/.ios/Flutter/flutter_export_environment.sh\"\nexport VERBOSE_SCRIPT_LOGGING=1 && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/xcode_backend.sh embed_and_thin"; + }; C73209EF6AC199B8584ED9E2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -375,23 +385,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D1C2795C35803D65EBC8B371 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -578,6 +571,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = "IOSFullScreen/Info-$(CONFIGURATION).plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -596,6 +590,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = "IOSFullScreen/Info-$(CONFIGURATION).plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/add_to_app/fullscreen/ios_fullscreen/Podfile b/add_to_app/fullscreen/ios_fullscreen/Podfile index 4140cea7d..1daf6b963 100644 --- a/add_to_app/fullscreen/ios_fullscreen/Podfile +++ b/add_to_app/fullscreen/ios_fullscreen/Podfile @@ -1,7 +1,7 @@ # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' -flutter_application_path = '../flutter_module' +flutter_application_path = '../flutter_module_fullscreen' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') target 'IOSFullScreen' do diff --git a/android_splash_screen/android/app/build.gradle b/android_splash_screen/android/app/build.gradle index 8c01625b4..958b5b065 100644 --- a/android_splash_screen/android/app/build.gradle +++ b/android_splash_screen/android/app/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -21,12 +28,9 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { - compileSdkVersion 31 + namespace "com.example.splash_screen_sample" + compileSdkVersion 34 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -35,12 +39,21 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.splash_screen_sample" - minSdkVersion 21 - targetSdkVersion 30 + minSdkVersion flutter.minSdkVersion + targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8 + } + buildTypes { release { // TODO: Add your own signing config for the release build. @@ -55,7 +68,6 @@ flutter { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "androidx.core:core-splashscreen:1.0.0-alpha02" implementation "androidx.core:core:1.5.0-alpha05" implementation "androidx.core:core-ktx:1.6.0" diff --git a/android_splash_screen/android/app/src/main/kotlin/com/example/splash_screen_sample/MainActivity.kt b/android_splash_screen/android/app/src/main/kotlin/com/example/splash_screen_sample/MainActivity.kt index d3efc96d7..e7d858e69 100644 --- a/android_splash_screen/android/app/src/main/kotlin/com/example/splash_screen_sample/MainActivity.kt +++ b/android_splash_screen/android/app/src/main/kotlin/com/example/splash_screen_sample/MainActivity.kt @@ -203,9 +203,9 @@ class MainActivity : FlutterActivity() { } private companion object { - const val SPLASHSCREEN_ALPHA_ANIMATION_DURATION = 500 as Long - const val SPLASHSCREEN_TY_ANIMATION_DURATION = 500 as Long - const val SPLASHSCREEN_FINAL_ANIMATION_ALPHA_ANIMATION_DURATION = 250 as Long - const val WAIT_FOR_AVD_TO_FINISH = false + const val SPLASHSCREEN_ALPHA_ANIMATION_DURATION = 500L + const val SPLASHSCREEN_TY_ANIMATION_DURATION = 500L + const val SPLASHSCREEN_FINAL_ANIMATION_ALPHA_ANIMATION_DURATION = 250L + const val WAIT_FOR_AVD_TO_FINISH = false } } diff --git a/android_splash_screen/android/build.gradle b/android_splash_screen/android/build.gradle index c45f25cc9..d2ffbffa4 100644 --- a/android_splash_screen/android/build.gradle +++ b/android_splash_screen/android/build.gradle @@ -1,16 +1,3 @@ -buildscript { - ext.kotlin_version = '1.5.31' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - allprojects { repositories { google() @@ -18,12 +5,14 @@ allprojects { } } -rootProject.buildDir = '../build' +rootProject.buildDir = "../build" subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" - project.evaluationDependsOn(':app') +} +subprojects { + project.evaluationDependsOn(":app") } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/android_splash_screen/android/gradle/wrapper/gradle-wrapper.properties b/android_splash_screen/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afd..7aeeb11c6 100644 --- a/android_splash_screen/android/gradle/wrapper/gradle-wrapper.properties +++ b/android_splash_screen/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/android_splash_screen/android/settings.gradle b/android_splash_screen/android/settings.gradle index 44e62bcf0..4f520718d 100644 --- a/android_splash_screen/android/settings.gradle +++ b/android_splash_screen/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" + id "com.android.application" version "8.6.0" apply false + id "org.jetbrains.kotlin.android" version "2.1.0" apply false +} + +include ":app" diff --git a/compass_app/app/lib/ui/auth/login/widgets/login_screen.dart b/compass_app/app/lib/ui/auth/login/widgets/login_screen.dart index e33196c1f..066fd00f1 100644 --- a/compass_app/app/lib/ui/auth/login/widgets/login_screen.dart +++ b/compass_app/app/lib/ui/auth/login/widgets/login_screen.dart @@ -43,6 +43,8 @@ class _LoginScreenState extends State { @override void dispose() { + _email.dispose(); + _password.dispose(); widget.viewModel.login.removeListener(_onResult); super.dispose(); } diff --git a/dynamic_theme/android/gradle/wrapper/gradle-wrapper.properties b/dynamic_theme/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef..efdcc4ace 100644 --- a/dynamic_theme/android/gradle/wrapper/gradle-wrapper.properties +++ b/dynamic_theme/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip diff --git a/dynamic_theme/android/settings.gradle b/dynamic_theme/android/settings.gradle index 1d6d19b7f..1bb3284d7 100644 --- a/dynamic_theme/android/settings.gradle +++ b/dynamic_theme/android/settings.gradle @@ -19,8 +19,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - id "org.jetbrains.kotlin.android" version "1.7.10" apply false + id "com.android.application" version "8.9.1" apply false + id "org.jetbrains.kotlin.android" version "2.1.0" apply false } include ":app"