diff --git a/demo_app/.metadata b/demo_app/.metadata index 38bb5b8bf..b5cae2d1b 100644 --- a/demo_app/.metadata +++ b/demo_app/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819" + revision: "077b4a4ce10a07b82caa6897f0c626f9c0a3ac90" channel: "stable" project_type: app @@ -13,20 +13,20 @@ project_type: app migration: platforms: - platform: root - create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 - base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 + create_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 + base_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 - platform: android - create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 - base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 + create_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 + base_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 - platform: ios - create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 - base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 + create_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 + base_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 - platform: macos - create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 - base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 + create_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 + base_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 - platform: web - create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 - base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 + create_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 + base_revision: 077b4a4ce10a07b82caa6897f0c626f9c0a3ac90 # User provided section diff --git a/demo_app/android/.gitignore b/demo_app/android/.gitignore index 55afd919c..be3943c96 100644 --- a/demo_app/android/.gitignore +++ b/demo_app/android/.gitignore @@ -5,6 +5,7 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore diff --git a/demo_app/android/app/build.gradle b/demo_app/android/app/build.gradle.kts similarity index 59% rename from demo_app/android/app/build.gradle rename to demo_app/android/app/build.gradle.kts index a4a41fd06..a7e58d61c 100644 --- a/demo_app/android/app/build.gradle +++ b/demo_app/android/app/build.gradle.kts @@ -1,8 +1,8 @@ plugins { - id "com.android.application" - id "kotlin-android" + 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" + id("dev.flutter.flutter-gradle-plugin") } android { @@ -14,12 +14,12 @@ android { ndkVersion = "27.0.12077973" compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8 + jvmTarget = JavaVersion.VERSION_11.toString() } defaultConfig { @@ -32,31 +32,31 @@ android { versionName = flutter.versionName // https://patrol.leancode.co/getting-started - testInstrumentationRunner "pl.leancode.patrol.PatrolJUnitRunner" - testInstrumentationRunnerArguments clearPackageData: "true" + testInstrumentationRunner = "pl.leancode.patrol.PatrolJUnitRunner" + testInstrumentationRunnerArguments["clearPackageData"] = "true" } signingConfigs { - demo { - storeFile file("../keystore") - storePassword "storepass" - keyAlias "alias" - keyPassword "keypass" + create("demo") { + storeFile = file("../keystore") + storePassword = "storepass" + keyAlias = "alias" + keyPassword = "keypass" } } buildTypes { debug { - signingConfig = signingConfigs.demo + signingConfig = signingConfigs.getByName("demo") } release { - signingConfig = signingConfigs.demo + signingConfig = signingConfigs.getByName("demo") } } testOptions { // https://patrol.leancode.co/getting-started - execution "ANDROIDX_TEST_ORCHESTRATOR" + execution = "ANDROIDX_TEST_ORCHESTRATOR" } } @@ -66,5 +66,5 @@ flutter { dependencies { // https://patrol.leancode.co/getting-started - androidTestUtil "androidx.test:orchestrator:1.5.1" + androidTestUtil("androidx.test:orchestrator:1.5.1") } diff --git a/demo_app/android/build.gradle b/demo_app/android/build.gradle deleted file mode 100644 index d2ffbffa4..000000000 --- a/demo_app/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = "../build" -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(":app") -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/demo_app/android/build.gradle.kts b/demo_app/android/build.gradle.kts new file mode 100644 index 000000000..89176ef44 --- /dev/null +++ b/demo_app/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/demo_app/android/gradle.properties b/demo_app/android/gradle.properties index 259717082..f018a6181 100644 --- a/demo_app/android/gradle.properties +++ b/demo_app/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/demo_app/android/settings.gradle b/demo_app/android/settings.gradle deleted file mode 100644 index ad3470b89..000000000 --- a/demo_app/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -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 - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.9.1" apply false - id "org.jetbrains.kotlin.android" version "2.1.20" apply false -} - -include ":app" diff --git a/demo_app/android/settings.gradle.kts b/demo_app/android/settings.gradle.kts new file mode 100644 index 000000000..ab39a10a2 --- /dev/null +++ b/demo_app/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/demo_app/devtools_options.yaml b/demo_app/devtools_options.yaml new file mode 100644 index 000000000..fa0b357c4 --- /dev/null +++ b/demo_app/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/demo_app/ios/Podfile b/demo_app/ios/Podfile index 1e9f30311..2db47a34b 100644 --- a/demo_app/ios/Podfile +++ b/demo_app/ios/Podfile @@ -28,7 +28,6 @@ flutter_ios_podfile_setup target 'Runner' do use_frameworks! - use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do diff --git a/demo_app/ios/Podfile.lock b/demo_app/ios/Podfile.lock index ef5364bb1..ded1762be 100644 --- a/demo_app/ios/Podfile.lock +++ b/demo_app/ios/Podfile.lock @@ -77,13 +77,13 @@ SPEC CHECKSUMS: just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 - patrol: dd82ffedfee3aba87c1d0ed2daad0b77bfb8ee1f + patrol: 51b76cc7c11a2933ee3e72482d930c75b9d4ec73 sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 url_launcher_ios: 694010445543906933d732453a59da0a173ae33d video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b - wakelock_plus: 04623e3f525556020ebd4034310f20fe7fda8b49 + wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2 -PODFILE CHECKSUM: 4047b237a92efec4e335c96f6d2daf630bacba96 +PODFILE CHECKSUM: 4305caec6b40dde0ae97be1573c53de1882a07e5 COCOAPODS: 1.16.2 diff --git a/demo_app/ios/Runner.xcodeproj/project.pbxproj b/demo_app/ios/Runner.xcodeproj/project.pbxproj index 192004e95..54f84e5be 100644 --- a/demo_app/ios/Runner.xcodeproj/project.pbxproj +++ b/demo_app/ios/Runner.xcodeproj/project.pbxproj @@ -16,7 +16,6 @@ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 9F1A45147FD0DBE6CF860034 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8D997B989E7638102ACA728 /* Pods_Runner.framework */; }; CEE01D58FCABD4F31F096C9C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 178E1D4C2D7566D2808A367F /* Pods_RunnerTests.framework */; }; - D3B2729C3B98CFEE7892E89B /* Pods_Runner_RunnerUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1499334AEBB4778F5448902 /* Pods_Runner_RunnerUITests.framework */; }; DB9207632BE7F15900D6B3E1 /* RunnerUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB9207622BE7F15900D6B3E1 /* RunnerUITests.m */; }; /* End PBXBuildFile section */ @@ -74,7 +73,6 @@ A8D997B989E7638102ACA728 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; AAF976A02150E8B1F5BD5729 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; BF066D85124559E6F9EE6EED /* Pods-Runner-RunnerUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner-RunnerUITests.release.xcconfig"; path = "Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests.release.xcconfig"; sourceTree = ""; }; - C1499334AEBB4778F5448902 /* Pods_Runner_RunnerUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner_RunnerUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D25BBEAC0A481DE6132762CB /* Pods-Runner-RunnerUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner-RunnerUITests.debug.xcconfig"; path = "Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests.debug.xcconfig"; sourceTree = ""; }; D8E6F301E12A65460B32AC47 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; DB9207602BE7F15900D6B3E1 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -103,7 +101,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D3B2729C3B98CFEE7892E89B /* Pods_Runner_RunnerUITests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -115,7 +112,6 @@ children = ( A8D997B989E7638102ACA728 /* Pods_Runner.framework */, 178E1D4C2D7566D2808A367F /* Pods_RunnerTests.framework */, - C1499334AEBB4778F5448902 /* Pods_Runner_RunnerUITests.framework */, ); name = Frameworks; sourceTree = ""; @@ -249,12 +245,10 @@ isa = PBXNativeTarget; buildConfigurationList = DB92076B2BE7F15900D6B3E1 /* Build configuration list for PBXNativeTarget "RunnerUITests" */; buildPhases = ( - BDE9AD6DBA2291B48C045BD6 /* [CP] Check Pods Manifest.lock */, DB4BA53B2BE7F2C50075A260 /* xcode_backend build */, DB92075C2BE7F15900D6B3E1 /* Sources */, DB92075D2BE7F15900D6B3E1 /* Frameworks */, DB92075E2BE7F15900D6B3E1 /* Resources */, - A70D1F9952B2B81C2BB1F50C /* [CP] Embed Pods Frameworks */, DB4BA53C2BE7F2ED0075A260 /* xcode_backend embed_and_thin */, ); buildRules = ( @@ -432,45 +426,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; }; - A70D1F9952B2B81C2BB1F50C /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - BDE9AD6DBA2291B48C045BD6 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-RunnerUITests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - 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; - }; DB4BA53B2BE7F2C50075A260 /* xcode_backend build */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index e3976e8e5..6852b88e3 100644 --- a/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/demo_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" shouldUseLaunchSchemeArgsEnv = "YES"> /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; }; - CE3C1E2DA1BBE87E644A674A /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - EFCDF60FA68941F256F55D38 /* [CP] Check Pods Manifest.lock */ = { + B669817BFBC9075344187513 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E78E7E90549725D324559B16 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 50E11C4CA5F6A16757CFB6B2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 147F880C8600B29DFFB0E857 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = FF3A14EC8C72B5B007D195E4 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6723C24391A323DFBC020B3A /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = D53CE00331D45ABEB647DACD /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/demo_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/demo_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index e0ca4e056..60e60c947 100644 --- a/demo_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/demo_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,8 +1,4 @@ { - "info": { - "version": 1, - "author": "xcode" - }, "images": [ { "size": "16x16", @@ -64,5 +60,9 @@ "filename": "app_icon_1024.png", "scale": "2x" } - ] + ], + "info": { + "version": 1, + "author": "xcode" + } } diff --git a/demo_app/macos/Runner/Configs/AppInfo.xcconfig b/demo_app/macos/Runner/Configs/AppInfo.xcconfig index 945c28a9a..fbac189e0 100644 --- a/demo_app/macos/Runner/Configs/AppInfo.xcconfig +++ b/demo_app/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = demo_app PRODUCT_BUNDLE_IDENTIFIER = dev.fwfh.demoApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 dev.fwfh. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2025 dev.fwfh. All rights reserved. diff --git a/demo_app/pubspec.lock b/demo_app/pubspec.lock index c8fa787de..d61ea9cc5 100644 --- a/demo_app/pubspec.lock +++ b/demo_app/pubspec.lock @@ -5,42 +5,42 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57 + sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f url: "https://pub.dev" source: hosted - version: "80.0.0" + version: "85.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e" + sha256: de617bfdc64f3d8b00835ec2957441ceca0a29cdf7881f7ab231bc14f71159c0 url: "https://pub.dev" source: hosted - version: "7.3.0" + version: "7.5.6" archive: dependency: transitive description: name: archive - sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.7" args: dependency: transitive description: name: args - sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.0" async: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" audio_session: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: carousel_slider - sha256: "7b006ec356205054af5beaef62e2221160ea36b90fb70a35e4deacd49d0349ae" + sha256: bcc61735345c9ab5cb81073896579e735f81e35fd588907a393143ea986be8ff url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.1.1" characters: dependency: transitive description: @@ -101,18 +101,26 @@ packages: dependency: transitive description: name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" chewie: dependency: transitive description: name: chewie - sha256: "645fbca3f22309381edb5af59a4c8aa544a3d3872d7b7b7c986c2b18b3bdd265" + sha256: "19b93a1e60e4ba640a792208a6543f1c7d5b124d011ce0199e2f18802199d984" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.1" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" cli_util: dependency: transitive description: @@ -149,10 +157,10 @@ packages: dependency: transitive description: name: coverage - sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.15.0" crypto: dependency: transitive description: @@ -205,10 +213,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -237,18 +245,18 @@ packages: dependency: "direct main" description: name: flex_color_scheme - sha256: ae638050fceb35b6040a43cf67892f9b956022068e736284919d93322fdd4ba2 + sha256: "3344f8f6536c6ce0473b98e9f084ef80ca89024ad3b454f9c32cf840206f4387" url: "https://pub.dev" source: hosted - version: "8.1.1" + version: "8.2.0" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme - sha256: d3ba3c5c92d2d79d45e94b4c6c71d01fac3c15017da1545880c53864da5dfeb0 + sha256: b06d8b367b84cbf7ca5c5603c858fa5edae88486c4e4da79ac1044d73b6c62ec url: "https://pub.dev" source: hosted - version: "3.5.0" + version: "3.5.1" flutter: dependency: "direct main" description: flutter @@ -266,18 +274,18 @@ packages: dependency: "direct dev" description: name: flutter_launcher_icons - sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" url: "https://pub.dev" source: hosted - version: "0.14.3" + version: "0.14.4" flutter_svg: dependency: transitive description: name: flutter_svg - sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b + sha256: cd57f7969b4679317c17af6fd16ee233c1e60a82ed209d8a475c54fd6fd6f845 url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.2.0" flutter_test: dependency: "direct dev" description: flutter @@ -372,18 +380,18 @@ packages: dependency: "direct main" description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.6" http: dependency: "direct main" description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" http_multi_server: dependency: transitive description: @@ -404,10 +412,10 @@ packages: dependency: transitive description: name: image - sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6" + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" url: "https://pub.dev" source: hosted - version: "4.5.2" + version: "4.5.4" io: dependency: transitive description: @@ -444,26 +452,26 @@ packages: dependency: transitive description: name: just_audio_platform_interface - sha256: "271b93b484c6f494ecd72a107fffbdb26b425f170c665b9777a0a24a726f2f24" + sha256: "4cd94536af0219fa306205a58e78d67e02b0555283c1c094ee41e402a14a5c4a" url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "4.5.0" just_audio_web: dependency: transitive description: name: just_audio_web - sha256: "58915be64509a7683c44bf11cd1a23c15a48de104927bee116e3c63c8eeea0d4" + sha256: "6ba8a2a7e87d57d32f0f7b42856ade3d6a9fbe0f1a11fabae0a4f00bb73f0663" url: "https://pub.dev" source: hosted - version: "0.4.14" + version: "0.4.16" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -484,10 +492,10 @@ packages: dependency: "direct dev" description: name: lint - sha256: "68d71111816dc7c1de358281e506efe574bb5072eae4a19f8a57484bf96825f5" + sha256: "3cd03646de313481336500ba02eb34d07c590535525f154aae7fda7362aa07a9" url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "2.8.0" logging: dependency: "direct main" description: @@ -564,26 +572,26 @@ packages: dependency: transitive description: name: package_config - sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" package_info_plus: dependency: transitive description: name: package_info_plus - sha256: "67eae327b1b0faf761964a1d2e5d323c797f3799db0e85aa232db8d9e922bc35" + sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" url: "https://pub.dev" source: hosted - version: "8.2.1" + version: "8.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "205ec83335c2ab9107bbba3f8997f9356d72ca3c715d2f038fc773d0366b4c76" + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" path: dependency: transitive description: @@ -612,10 +620,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 url: "https://pub.dev" source: hosted - version: "2.2.15" + version: "2.2.17" path_provider_foundation: dependency: transitive description: @@ -652,26 +660,26 @@ packages: dependency: "direct dev" description: name: patrol - sha256: "2bb991db06b5e1eb2ec5c803067c41316d94d01dda93ddf16f5342073d791a20" + sha256: "21e36c6c5b8371bfa561b2632c665758e6e79f93a25590db450cb61c13469b69" url: "https://pub.dev" source: hosted - version: "3.14.0" + version: "3.17.0" patrol_finders: dependency: "direct dev" description: name: patrol_finders - sha256: "4c6d78e00362fd15d7c21cfac110e501d08ada7d77000bad139b0c3c2e27ccaf" + sha256: "95e4a8592c27c2cf39871f0c5f80d251a4347a3a61d117646089631459ce299b" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.8.2" patrol_log: dependency: transitive description: name: patrol_log - sha256: "98b2701400c7a00b11533ab942bdeb44c3c714746e7cdb12e6cb93b6d06361da" + sha256: "49c25a41ad5ed7df6ff550c964798ed86cb112cbe2ca4f4d728d85c413b779a8" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.4.0" petitparser: dependency: transitive description: @@ -716,26 +724,26 @@ packages: dependency: transitive description: name: posix - sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.0.3" provider: dependency: "direct main" description: name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.5" pub_semver: dependency: transitive description: name: pub_semver - sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" rxdart: dependency: transitive description: @@ -881,10 +889,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "0669c70faae6270521ee4f05bffd2919892d42d1276e6c495be80174b6bc0ef6" + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.0" term_glyph: dependency: transitive description: @@ -929,26 +937,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.3.2" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193" + sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" url: "https://pub.dev" source: hosted - version: "6.3.14" + version: "6.3.16" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" url_launcher_linux: dependency: transitive description: @@ -977,10 +985,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "3ba963161bd0fe395917ba881d320b9c4f6dd3c4a233da62ab18a5025c85f1e9" + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" url_launcher_windows: dependency: transitive description: @@ -1001,10 +1009,10 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 url: "https://pub.dev" source: hosted - version: "1.1.18" + version: "1.1.19" vector_graphics_codec: dependency: transitive description: @@ -1017,10 +1025,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" url: "https://pub.dev" source: hosted - version: "1.1.16" + version: "1.1.17" vector_math: dependency: transitive description: @@ -1033,98 +1041,98 @@ packages: dependency: transitive description: name: video_player - sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17" + sha256: "0d55b1f1a31e5ad4c4967bfaa8ade0240b07d20ee4af1dfef5f531056512961a" url: "https://pub.dev" source: hosted - version: "2.9.2" + version: "2.10.0" video_player_android: dependency: transitive description: name: video_player_android - sha256: "7018dbcb395e2bca0b9a898e73989e67c0c4a5db269528e1b036ca38bcca0d0b" + sha256: "4a5135754a62dbc827a64a42ef1f8ed72c962e191c97e2d48744225c2b9ebb73" url: "https://pub.dev" source: hosted - version: "2.7.17" + version: "2.8.7" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: "84b4752745eeccb6e75865c9aab39b3d28eb27ba5726d352d45db8297fbd75bc" + sha256: "9fedd55023249f3a02738c195c906b4e530956191febf0838e37d0dac912f953" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.8.0" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: df534476c341ab2c6a835078066fc681b8265048addd853a1e3c78740316a844 + sha256: cf2a1d29a284db648fd66cbd18aacc157f9862d77d2cc790f6f9678a46c1db5a url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.4.0" video_player_web: dependency: transitive description: name: video_player_web - sha256: "3ef40ea6d72434edbfdba4624b90fd3a80a0740d260667d91e7ecd2d79e13476" + sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.4.0" vm_service: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" wakelock_plus: dependency: transitive description: name: wakelock_plus - sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e" + sha256: a474e314c3e8fb5adef1f9ae2d247e57467ad557fa7483a2b895bc1b421c5678 url: "https://pub.dev" source: hosted - version: "1.2.10" + version: "1.3.2" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a" + sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.3" watcher: dependency: transitive description: name: watcher - sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" web: dependency: transitive description: name: web - sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" web_socket: dependency: transitive description: name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" url: "https://pub.dev" source: hosted - version: "0.1.6" + version: "1.0.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5" + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webkit_inspection_protocol: dependency: transitive description: @@ -1137,42 +1145,42 @@ packages: dependency: transitive description: name: webview_flutter - sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec" + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba url: "https://pub.dev" source: hosted - version: "4.10.0" + version: "4.13.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "512c26ccc5b8a571fd5d13ec994b7509f142ff6faf85835e243dde3538fdc713" + sha256: f6e6afef6e234801da77170f7a1847ded8450778caf2fe13979d140484be3678 url: "https://pub.dev" source: hosted - version: "4.3.2" + version: "4.7.0" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d + sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147 url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.13.1" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "7310de7efa4e6df8b3d2ff14aef3f290bc00b43363f2d0028845e6de46507fc9" + sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3 url: "https://pub.dev" source: hosted - version: "3.18.1" + version: "3.22.0" win32: dependency: transitive description: name: win32 - sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef + sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03" url: "https://pub.dev" source: hosted - version: "5.11.0" + version: "5.14.0" xdg_directories: dependency: transitive description: @@ -1198,5 +1206,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.7.0 <4.0.0" - flutter: ">=3.27.0" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/demo_app/pubspec.yaml b/demo_app/pubspec.yaml index 19ab7a70b..a0cc528c2 100644 --- a/demo_app/pubspec.yaml +++ b/demo_app/pubspec.yaml @@ -49,8 +49,8 @@ dev_dependencies: golden_toolkit: ^0.15.0 lint: any measurer: ^2.1.1 - patrol: ^3.14.0 - patrol_finders: ^2.7.0 + patrol: ^3.17.0 + patrol_finders: ^2.8.2 test: any flutter: diff --git a/demo_app/test/goldens/VIDEO.png b/demo_app/test/goldens/VIDEO.png index 3ef3b292e..1f7d8eec3 100644 Binary files a/demo_app/test/goldens/VIDEO.png and b/demo_app/test/goldens/VIDEO.png differ diff --git a/demo_app/web/index.html b/demo_app/web/index.html index 339f2cfcd..992e1c4d1 100644 --- a/demo_app/web/index.html +++ b/demo_app/web/index.html @@ -21,7 +21,7 @@ - + diff --git a/packages/core/example/main.dart b/packages/core/example/main.dart index 32ce4aaa3..c5b847100 100644 --- a/packages/core/example/main.dart +++ b/packages/core/example/main.dart @@ -1,18 +1,20 @@ import 'package:flutter/material.dart'; import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; -void main() => runApp(MyApp()); +void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { + const MyApp({super.key}); + @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Widget from HTML (core)', home: Scaffold( appBar: AppBar( - title: Text('Flutter Widget from HTML (core)'), + title: const Text('Flutter Widget from HTML (core)'), ), - body: Center( + body: const Center( child: HtmlWidget('Hello World!'), ), ), diff --git a/packages/core/lib/src/core_helpers.dart b/packages/core/lib/src/core_helpers.dart index 79b99ccd9..1803ad8b9 100644 --- a/packages/core/lib/src/core_helpers.dart +++ b/packages/core/lib/src/core_helpers.dart @@ -15,6 +15,7 @@ export 'widgets/css_sizing.dart'; export 'widgets/horizontal_margin.dart'; export 'widgets/html_details.dart'; export 'widgets/html_flex.dart'; +export 'widgets/html_layout_builder.dart'; export 'widgets/html_list_item.dart'; export 'widgets/html_list_marker.dart'; export 'widgets/html_ruby.dart'; diff --git a/packages/core/lib/src/core_widget_factory.dart b/packages/core/lib/src/core_widget_factory.dart index d2239f325..f316c794d 100644 --- a/packages/core/lib/src/core_widget_factory.dart +++ b/packages/core/lib/src/core_widget_factory.dart @@ -233,7 +233,7 @@ class WidgetFactory extends WidgetFactoryResetter with AnchorWidgetFactory { TextBaseline textBaseline = TextBaseline.alphabetic, TextDirection textDirection = TextDirection.ltr, }) { - return LayoutBuilder( + return HtmlLayoutBuilder( builder: (_, bc) { Widget built = HtmlFlex( crossAxisAlignment: crossAxisAlignment, diff --git a/packages/core/lib/src/internal/ops/tag_table.dart b/packages/core/lib/src/internal/ops/tag_table.dart index 5f53c2d69..bdf066e16 100644 --- a/packages/core/lib/src/internal/ops/tag_table.dart +++ b/packages/core/lib/src/internal/ops/tag_table.dart @@ -83,7 +83,7 @@ class TagTable { ? tryParseCssLength(borderSpacingExpression) : null; - final layoutBuilder = LayoutBuilder( + final layoutBuilder = HtmlLayoutBuilder( builder: (context, bc) { final resolved = tableTree.inheritanceResolvers.resolve(context); Widget built = ValignBaselineContainer( diff --git a/packages/core/lib/src/widgets/html_flex.dart b/packages/core/lib/src/widgets/html_flex.dart index 1919c4f04..c64e9f558 100644 --- a/packages/core/lib/src/widgets/html_flex.dart +++ b/packages/core/lib/src/widgets/html_flex.dart @@ -327,26 +327,6 @@ extension on MainAxisAlignment { } } -double? _getChildBaseline( - RenderBox child, - BoxConstraints constraints, - TextBaseline baseline, -) { - // TODO: use ChildLayoutHelper.getBaseline when minimum Flutter version >= 3.24 - assert(!child.debugNeedsLayout); - assert(child.constraints == constraints); - return child.getDistanceToBaseline(baseline, onlyReal: true); -} - -double? _getChildBaselineDry( - RenderBox child, - BoxConstraints constraints, - TextBaseline baseline, -) { - // TODO: use ChildLayoutHelper.getDryBaseline when minimum Flutter version >= 3.24 - return child.getDryBaseline(constraints, baseline); -} - class RenderHtmlFlex extends RenderBox with ContainerRenderObjectMixin, @@ -564,7 +544,7 @@ class RenderHtmlFlex extends RenderBox ? BoxConstraints(maxWidth: extent) : BoxConstraints(maxHeight: extent), layoutChild: layoutChild, - getBaseline: _getChildBaselineDry, + getBaseline: ChildLayoutHelper.getDryBaseline, ).axisSize.crossAxisExtent; } } @@ -748,7 +728,7 @@ class RenderHtmlFlex extends RenderBox final _LayoutSizes sizes = _computeSizes( constraints: constraints, layoutChild: ChildLayoutHelper.dryLayoutChild, - getBaseline: _getChildBaselineDry, + getBaseline: ChildLayoutHelper.getDryBaseline, ); if (_isBaselineAligned) { @@ -836,7 +816,7 @@ class RenderHtmlFlex extends RenderBox return _computeSizes( constraints: constraints, layoutChild: ChildLayoutHelper.dryLayoutChild, - getBaseline: _getChildBaselineDry, + getBaseline: ChildLayoutHelper.getDryBaseline, ).axisSize.toSize(direction); } @@ -1101,7 +1081,7 @@ class RenderHtmlFlex extends RenderBox final _LayoutSizes sizes = _computeSizes( constraints: constraints, layoutChild: ChildLayoutHelper.layoutChild, - getBaseline: _getChildBaseline, + getBaseline: ChildLayoutHelper.getBaseline, ); final double crossAxisExtent = sizes.axisSize.crossAxisExtent; diff --git a/packages/core/lib/src/widgets/html_layout_builder.dart b/packages/core/lib/src/widgets/html_layout_builder.dart new file mode 100644 index 000000000..23f0b05e6 --- /dev/null +++ b/packages/core/lib/src/widgets/html_layout_builder.dart @@ -0,0 +1,85 @@ +import 'package:flutter/rendering.dart'; +import 'package:flutter/widgets.dart'; + +/// Builds a widget tree that can depend on the parent widget's size. +/// +/// The difference from [LayoutBuilder] is that this widget does not +/// perform any assertions during the build phase. +class HtmlLayoutBuilder extends ConstrainedLayoutBuilder { + /// Creates a widget that defers its building until layout. + const HtmlLayoutBuilder({super.key, required super.builder}); + + @override + RenderAbstractLayoutBuilderMixin + createRenderObject( + BuildContext context, + ) => + _RenderLayoutBuilder(); +} + +class _RenderLayoutBuilder extends RenderBox + with + RenderObjectWithChildMixin, + RenderObjectWithLayoutCallbackMixin, + RenderAbstractLayoutBuilderMixin { + @override + double? computeDistanceToActualBaseline(TextBaseline baseline) { + return child?.getDistanceToActualBaseline(baseline) ?? + super.computeDistanceToActualBaseline(baseline); + } + + @override + double? computeDryBaseline( + BoxConstraints constraints, TextBaseline baseline) { + return null; + } + + @override + Size computeDryLayout(BoxConstraints constraints) { + return Size.zero; + } + + @override + double computeMaxIntrinsicHeight(double width) { + return 0.0; + } + + @override + double computeMaxIntrinsicWidth(double height) { + return 0.0; + } + + @override + double computeMinIntrinsicHeight(double width) { + return 0.0; + } + + @override + double computeMinIntrinsicWidth(double height) { + return 0.0; + } + + @override + bool hitTestChildren(BoxHitTestResult result, {required Offset position}) { + return child?.hitTest(result, position: position) ?? false; + } + + @override + void paint(PaintingContext context, Offset offset) { + if (child != null) { + context.paintChild(child!, offset); + } + } + + @override + void performLayout() { + final constraints = this.constraints; + runLayoutCallback(); + if (child != null) { + child!.layout(constraints, parentUsesSize: true); + size = constraints.constrain(child!.size); + } else { + size = constraints.biggest; + } + } +} diff --git a/packages/core/lib/src/widgets/html_list_marker.dart b/packages/core/lib/src/widgets/html_list_marker.dart index b3211a5f1..5c0df70a7 100644 --- a/packages/core/lib/src/widgets/html_list_marker.dart +++ b/packages/core/lib/src/widgets/html_list_marker.dart @@ -1,7 +1,3 @@ -// TODO: remove lint ignore when our minimum Flutter version >= 3.19 -// ignore: unnecessary_import -import 'dart:ui'; - import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; diff --git a/packages/core/pubspec.yaml b/packages/core/pubspec.yaml index 5569e06cd..4114e0e36 100644 --- a/packages/core/pubspec.yaml +++ b/packages/core/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter package to render html as widgets that focuses on correctne homepage: https://github.com/daohoangson/flutter_widget_from_html/tree/master/packages/core environment: - flutter: ">=3.22.0" + flutter: ">=3.32.0" sdk: ">=3.4.0 <4.0.0" dependencies: diff --git a/packages/core/test/_.dart b/packages/core/test/_.dart index 6638200be..89c357068 100644 --- a/packages/core/test/_.dart +++ b/packages/core/test/_.dart @@ -607,15 +607,16 @@ class Explainer { return _widget(widget.builder(context)); } - if (widget is LayoutBuilder) { + if (widget is LayoutBuilder || + widget.runtimeType.toString() == 'HtmlLayoutBuilder') { return _widget( - widget.builder( + (widget as dynamic).builder( context, BoxConstraints.loose( TestWidgetsFlutterBinding .instance.platformDispatcher.implicitView!.physicalSize, ), - ), + ) as Widget, ); } diff --git a/packages/core/test/src/core_legacy_test.dart b/packages/core/test/src/core_legacy_test.dart index 731750543..17af3dc00 100644 --- a/packages/core/test/src/core_legacy_test.dart +++ b/packages/core/test/src/core_legacy_test.dart @@ -86,7 +86,6 @@ void main() { useExplainer: false, ); - // TODO: use hard coded value when our minimum Flutter version > 3.24 final abcdefString = abcdef.toString().replaceAll('ColorSpace.', ''); expect(explained, contains(abcdefString)); }); diff --git a/packages/core/test/tag_li_test.dart b/packages/core/test/tag_li_test.dart index edfe65ff3..8fe8ab3de 100644 --- a/packages/core/test/tag_li_test.dart +++ b/packages/core/test/tag_li_test.dart @@ -1001,9 +1001,8 @@ Future main() async { useExplainer: false, ); - // TODO: use hard coded value when our minimum Flutter version > 3.24 - const red = Color(0xffff0000); - expect(disc, contains(red.toString().replaceAll('ColorSpace.', ''))); + expect(disc, + contains('alpha: 1.0000, red: 1.0000, green: 0.0000, blue: 0.0000')); final circle = await explain( tester, @@ -1011,9 +1010,8 @@ Future main() async { useExplainer: false, ); - // TODO: use hard coded value when our minimum Flutter version > 3.24 - const green = Color(0xff00ff00); - expect(circle, contains(green.toString().replaceAll('ColorSpace.', ''))); + expect(circle, + contains('alpha: 1.0000, red: 0.0000, green: 1.0000, blue: 0.0000')); }); }); } diff --git a/packages/enhanced/pubspec.yaml b/packages/enhanced/pubspec.yaml index 5d79c0d97..98b7fedb7 100644 --- a/packages/enhanced/pubspec.yaml +++ b/packages/enhanced/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter package to render html as widgets that supports hyperlink, homepage: https://github.com/daohoangson/flutter_widget_from_html environment: - flutter: ">=3.22.0" + flutter: ">=3.32.0" sdk: ">=3.4.0 <4.0.0" dependencies: diff --git a/packages/fwfh_chewie/test/mock_video_player_platform.dart b/packages/fwfh_chewie/test/mock_video_player_platform.dart index 851b6be2e..95d396f8b 100644 --- a/packages/fwfh_chewie/test/mock_video_player_platform.dart +++ b/packages/fwfh_chewie/test/mock_video_player_platform.dart @@ -21,6 +21,14 @@ class _FakeVideoPlayerPlatform extends Fake @override Widget buildView(int textureId) { + // TODO: remove this method when we bump chewie minimum version + return const Placeholder(); + } + + @override + // TODO: remove lint ignore when we bump chewie minimum version + // ignore: type_annotate_public_apis + Widget buildViewWithOptions(options) { return const Placeholder(); } @@ -31,6 +39,17 @@ class _FakeVideoPlayerPlatform extends Fake return textureId; } + @override + // TODO: remove lint ignore when we bump chewie minimum version + // ignore: type_annotate_public_apis + Future createWithOptions(options) async { + final textureId = _nextTextureId++; + // TODO: remove lint ignore when we bump chewie minimum version + // ignore: unnecessary_cast + uris[textureId] = options.dataSource.uri as String?; + return textureId; + } + @override Future dispose(int textureId) async {/* intentionally left empty */} diff --git a/packages/fwfh_webview/test/mock_webview_platform.dart b/packages/fwfh_webview/test/mock_webview_platform.dart index fb8e604cd..d4610abcc 100644 --- a/packages/fwfh_webview/test/mock_webview_platform.dart +++ b/packages/fwfh_webview/test/mock_webview_platform.dart @@ -213,6 +213,9 @@ class __FakeAndroidWebViewController extends FakeWebViewController @override Future setTextZoom(int textZoom) => throw UnimplementedError(); + @override + Future setUseWideViewPort(bool use) => throw UnimplementedError(); + @override int get webViewIdentifier => throw UnimplementedError(); }