From f2dabe6b9158a2c85c7c72c66da21ba27e91fc99 Mon Sep 17 00:00:00 2001 From: "Guangfei.Zhao" Date: Wed, 2 Sep 2026 23:23:43 +0800 Subject: [PATCH] feat: Add build info and localization for entry app - Introduced buildinfo.json5 to enable impeller feature. - Added Chinese localization strings in string.json for module description and entry ability. - Created Ability.test.ets for unit testing of ability functionalities. - Implemented List.test.ets to run the ability tests. - Developed TestAbility.ets to manage test execution and lifecycle events. - Created Index.ets as a testability page with UI components. - Added OpenHarmonyTestRunner.ts for managing test execution in OpenHarmony. - Defined module.json5 for entry_test module configuration. - Established color.json and string.json for base resources. - Included icon.png for the test module. - Created test_pages.json to define testability page sources. - Configured hvigor and oh-package.json5 for project setup. - Updated pubspec.yaml and related files to downgrade Dart SDK to 3.11.0 and adjust dependencies. - Added PowerShell script to enable OpenHarmony Flutter toolchain. - Updated multiple package pubspec.yaml files to align with Dart SDK version 3.11.0 and adjust dependencies accordingly. --- app/.metadata | 11 ++-- app/ohos/.gitignore | 20 +++++++ app/ohos/AppScope/app.json5 | 10 ++++ .../resources/base/element/string.json | 8 +++ .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes app/ohos/build-profile.json5 | 39 ++++++++++++ app/ohos/entry/.gitignore | 7 +++ app/ohos/entry/build-profile.json5 | 15 +++++ app/ohos/entry/hvigorfile.ts | 7 +++ app/ohos/entry/oh-package.json5 | 11 ++++ .../main/ets/entryability/EntryAbility.ets | 10 ++++ app/ohos/entry/src/main/ets/pages/Index.ets | 24 ++++++++ app/ohos/entry/src/main/module.json5 | 40 +++++++++++++ .../main/resources/base/element/color.json | 8 +++ .../main/resources/base/element/string.json | 16 +++++ .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/main_pages.json | 5 ++ .../main/resources/en_US/element/string.json | 16 +++++ .../main/resources/rawfile/buildinfo.json5 | 8 +++ .../main/resources/zh_CN/element/string.json | 16 +++++ .../src/ohosTest/ets/test/Ability.test.ets | 35 +++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 5 ++ .../ohosTest/ets/testability/TestAbility.ets | 48 +++++++++++++++ .../ohosTest/ets/testability/pages/Index.ets | 36 +++++++++++ .../ets/testrunner/OpenHarmonyTestRunner.ts | 50 ++++++++++++++++ app/ohos/entry/src/ohosTest/module.json5 | 37 ++++++++++++ .../resources/base/element/color.json | 8 +++ .../resources/base/element/string.json | 16 +++++ .../ohosTest/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/test_pages.json | 5 ++ app/ohos/hvigor/hvigor-config.json5 | 6 ++ app/ohos/hvigorconfig.ts | 4 ++ app/ohos/hvigorfile.ts | 8 +++ app/ohos/oh-package.json5 | 13 ++++ app/pubspec.yaml | 4 +- docs/01-project-structure.md | 4 +- docs/07-native-integration.md | 2 +- enable-ohos.ps1 | 46 ++++++++++++++ packages/core_analytics/pubspec.yaml | 4 +- packages/core_auth/pubspec.yaml | 10 ++-- packages/core_foundation/pubspec.yaml | 4 +- packages/core_logging/pubspec.yaml | 4 +- packages/core_network/pubspec.yaml | 4 +- packages/core_router/pubspec.yaml | 4 +- packages/core_storage/pubspec.yaml | 4 +- packages/core_ui/pubspec.yaml | 4 +- packages/core_webview/pubspec.yaml | 4 +- packages/feature_auth/pubspec.yaml | 9 +-- packages/feature_home/pubspec.yaml | 9 +-- packages/native_scan/example/pubspec.yaml | 2 +- packages/native_scan/pubspec.yaml | 6 +- pubspec.lock | 56 +++++++++--------- pubspec.yaml | 2 +- 53 files changed, 655 insertions(+), 69 deletions(-) create mode 100644 app/ohos/.gitignore create mode 100644 app/ohos/AppScope/app.json5 create mode 100644 app/ohos/AppScope/resources/base/element/string.json create mode 100644 app/ohos/AppScope/resources/base/media/app_icon.png create mode 100644 app/ohos/build-profile.json5 create mode 100644 app/ohos/entry/.gitignore create mode 100644 app/ohos/entry/build-profile.json5 create mode 100644 app/ohos/entry/hvigorfile.ts create mode 100644 app/ohos/entry/oh-package.json5 create mode 100644 app/ohos/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 app/ohos/entry/src/main/ets/pages/Index.ets create mode 100644 app/ohos/entry/src/main/module.json5 create mode 100644 app/ohos/entry/src/main/resources/base/element/color.json create mode 100644 app/ohos/entry/src/main/resources/base/element/string.json create mode 100644 app/ohos/entry/src/main/resources/base/media/icon.png create mode 100644 app/ohos/entry/src/main/resources/base/profile/main_pages.json create mode 100644 app/ohos/entry/src/main/resources/en_US/element/string.json create mode 100644 app/ohos/entry/src/main/resources/rawfile/buildinfo.json5 create mode 100644 app/ohos/entry/src/main/resources/zh_CN/element/string.json create mode 100644 app/ohos/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 app/ohos/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 app/ohos/entry/src/ohosTest/ets/testability/TestAbility.ets create mode 100644 app/ohos/entry/src/ohosTest/ets/testability/pages/Index.ets create mode 100644 app/ohos/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts create mode 100644 app/ohos/entry/src/ohosTest/module.json5 create mode 100644 app/ohos/entry/src/ohosTest/resources/base/element/color.json create mode 100644 app/ohos/entry/src/ohosTest/resources/base/element/string.json create mode 100644 app/ohos/entry/src/ohosTest/resources/base/media/icon.png create mode 100644 app/ohos/entry/src/ohosTest/resources/base/profile/test_pages.json create mode 100644 app/ohos/hvigor/hvigor-config.json5 create mode 100644 app/ohos/hvigorconfig.ts create mode 100644 app/ohos/hvigorfile.ts create mode 100644 app/ohos/oh-package.json5 create mode 100644 enable-ohos.ps1 diff --git a/app/.metadata b/app/.metadata index db0a0fe..9ac8de8 100644 --- a/app/.metadata +++ b/app/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled and should not be manually edited. version: - revision: "6b182d2c7585eba26d4edce0f97630effd256c33" - channel: "stable" + revision: "eb712e92d4c63e8051990ceea01fdcf88a7afd5d" + channel: "[user-branch]" project_type: app @@ -13,14 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: 6b182d2c7585eba26d4edce0f97630effd256c33 - base_revision: 6b182d2c7585eba26d4edce0f97630effd256c33 + create_revision: eb712e92d4c63e8051990ceea01fdcf88a7afd5d + base_revision: eb712e92d4c63e8051990ceea01fdcf88a7afd5d - platform: android create_revision: 6b182d2c7585eba26d4edce0f97630effd256c33 base_revision: 6b182d2c7585eba26d4edce0f97630effd256c33 - platform: ios create_revision: 6b182d2c7585eba26d4edce0f97630effd256c33 base_revision: 6b182d2c7585eba26d4edce0f97630effd256c33 + - platform: ohos + create_revision: eb712e92d4c63e8051990ceea01fdcf88a7afd5d + base_revision: eb712e92d4c63e8051990ceea01fdcf88a7afd5d # User provided section diff --git a/app/ohos/.gitignore b/app/ohos/.gitignore new file mode 100644 index 0000000..e326491 --- /dev/null +++ b/app/ohos/.gitignore @@ -0,0 +1,20 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +**/BuildProfile.ets +**/oh-package-lock.json5 +/package.json +/package-lock.json + +**/src/main/resources/rawfile/flutter_assets/ +**/libs/**/libapp.so +**/libs/**/libflutter.so +**/libs/**/libvmservice_snapshot.so diff --git a/app/ohos/AppScope/app.json5 b/app/ohos/AppScope/app.json5 new file mode 100644 index 0000000..bd240b6 --- /dev/null +++ b/app/ohos/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.conti.app", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/app/ohos/AppScope/resources/base/element/string.json b/app/ohos/AppScope/resources/base/element/string.json new file mode 100644 index 0000000..198f1e7 --- /dev/null +++ b/app/ohos/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "app" + } + ] +} diff --git a/app/ohos/AppScope/resources/base/media/app_icon.png b/app/ohos/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', + JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); + } + + onForeground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); + } + + onBackground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); + } +} \ No newline at end of file diff --git a/app/ohos/entry/src/ohosTest/ets/testability/pages/Index.ets b/app/ohos/entry/src/ohosTest/ets/testability/pages/Index.ets new file mode 100644 index 0000000..545843d --- /dev/null +++ b/app/ohos/entry/src/ohosTest/ets/testability/pages/Index.ets @@ -0,0 +1,36 @@ + + +import hilog from '@ohos.hilog'; + +@Entry +@Component +struct Index { + aboutToAppear() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility index aboutToAppear'); + } + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/app/ohos/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts b/app/ohos/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts new file mode 100644 index 0000000..47fc89b --- /dev/null +++ b/app/ohos/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,50 @@ + +import hilog from '@ohos.hilog'; +import TestRunner from '@ohos.application.testRunner'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +async function onAbilityCreateCallback() { + hilog.info(0x0000, 'testTag', '%{public}s', 'onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare '); + } + + async onRun() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run'); + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.TestAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName + var debug = abilityDelegatorArguments.parameters['-D'] + if (debug == 'true') + { + cmd += ' -D' + } + hilog.info(0x0000, 'testTag', 'cmd : %{public}s', cmd); + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + hilog.info(0x0000, 'testTag', 'executeShellCommand : err : %{public}s', JSON.stringify(err) ?? ''); + hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.stdResult ?? ''); + hilog.info(0x0000, 'testTag', 'executeShellCommand : data : %{public}s', d.exitCode ?? ''); + }) + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end'); + } +} \ No newline at end of file diff --git a/app/ohos/entry/src/ohosTest/module.json5 b/app/ohos/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000..3b02a75 --- /dev/null +++ b/app/ohos/entry/src/ohosTest/module.json5 @@ -0,0 +1,37 @@ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "description": "$string:module_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "abilities": [ + { + "name": "TestAbility", + "srcEntry": "./ets/testability/TestAbility.ets", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "exported": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/app/ohos/entry/src/ohosTest/resources/base/element/color.json b/app/ohos/entry/src/ohosTest/resources/base/element/color.json new file mode 100644 index 0000000..3c71296 --- /dev/null +++ b/app/ohos/entry/src/ohosTest/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/app/ohos/entry/src/ohosTest/resources/base/element/string.json b/app/ohos/entry/src/ohosTest/resources/base/element/string.json new file mode 100644 index 0000000..65d8fa5 --- /dev/null +++ b/app/ohos/entry/src/ohosTest/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] +} \ No newline at end of file diff --git a/app/ohos/entry/src/ohosTest/resources/base/media/icon.png b/app/ohos/entry/src/ohosTest/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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.44.0' flutter: diff --git a/enable-ohos.ps1 b/enable-ohos.ps1 new file mode 100644 index 0000000..93b6b8f --- /dev/null +++ b/enable-ohos.ps1 @@ -0,0 +1,46 @@ +# Enables the OpenHarmony Flutter toolchain for the current PowerShell session. +# This script does not change the system or user PATH permanently. + +$ErrorActionPreference = 'Stop' + +$flutterBin = 'C:\Users\A200477427\Developments\flutter_flutter\bin' +$devecoHome = 'C:\Program Files\Huawei\DevEco Studio' +$devecoSdk = "$devecoHome\sdk" +$ohpmBin = "$devecoHome\tools\ohpm\bin" +$hvigorBin = "$devecoHome\tools\hvigor\bin" + +$requiredDirectories = @($flutterBin, $devecoSdk, $ohpmBin, $hvigorBin) +$missingDirectories = $requiredDirectories | Where-Object { + -not (Test-Path -LiteralPath $_ -PathType Container) +} + +if ($missingDirectories) { + throw "OpenHarmony tool directories were not found:`n$($missingDirectories -join "`n")" +} + +# Set these only for this terminal. This also makes the script work in a terminal +# that was opened before the corresponding Windows environment variables existed. +$env:DEVECO_HOME = $devecoHome +$env:DEVECO_SDK_HOME = $devecoSdk + +# Put the OpenHarmony-specific commands first for this terminal only. Remove +# duplicate entries so repeated execution of this script leaves PATH clean. +$pathDirectories = @($flutterBin, $ohpmBin, $hvigorBin) +$pathEntries = $env:Path -split ';' | Where-Object { + $_ -and $_ -notin $pathDirectories +} +$env:Path = ($pathDirectories + $pathEntries) -join ';' + +$commands = @('flutter', 'ohpm', 'hvigorw') +$unavailableCommands = foreach ($command in $commands) { + if (-not (Get-Command $command -ErrorAction SilentlyContinue)) { + $command + } +} + +if ($unavailableCommands) { + throw "The following commands could not be resolved from PATH: $($unavailableCommands -join ', ')" +} + +Write-Host 'OpenHarmony Flutter environment is enabled for this PowerShell session.' -ForegroundColor Green +Get-Command $commands | Select-Object Name, Source, CommandType | Format-Table -AutoSize diff --git a/packages/core_analytics/pubspec.yaml b/packages/core_analytics/pubspec.yaml index 04e8268..ce6f72a 100644 --- a/packages/core_analytics/pubspec.yaml +++ b/packages/core_analytics/pubspec.yaml @@ -5,13 +5,13 @@ version: 0.1.0 resolution: workspace environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_foundation: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 dev_dependencies: flutter_lints: ^6.0.0 diff --git a/packages/core_auth/pubspec.yaml b/packages/core_auth/pubspec.yaml index 822d321..00339ed 100644 --- a/packages/core_auth/pubspec.yaml +++ b/packages/core_auth/pubspec.yaml @@ -11,16 +11,18 @@ resolution: workspace # 因此本包里的 token 刷新用的是一个**不带任何拦截器的裸 Dio**。 # --------------------------------------------------------------------------- environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_foundation: ^0.1.0 dio: ^5.11.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 flutter_secure_storage: ^11.0.0 - riverpod_annotation: ^4.0.3 + # 4.0.3+ 的 generator 引入 analyzer ^12,要求 meta ^1.18; + # Harmony Flutter(Dart 3.11)固定 meta 1.17.0,故保持在兼容组合。 + riverpod_annotation: 4.0.2 dev_dependencies: build_runner: ^2.4.13 @@ -28,4 +30,4 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^1.0.5 - riverpod_generator: ^4.0.4 + riverpod_generator: 4.0.3 diff --git a/packages/core_foundation/pubspec.yaml b/packages/core_foundation/pubspec.yaml index 7f1e5ae..ae75a94 100644 --- a/packages/core_foundation/pubspec.yaml +++ b/packages/core_foundation/pubspec.yaml @@ -5,12 +5,12 @@ version: 0.1.0 resolution: workspace environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 dev_dependencies: flutter_lints: ^6.0.0 diff --git a/packages/core_logging/pubspec.yaml b/packages/core_logging/pubspec.yaml index 77d8cbc..c60bd1c 100644 --- a/packages/core_logging/pubspec.yaml +++ b/packages/core_logging/pubspec.yaml @@ -5,13 +5,13 @@ version: 0.1.0 resolution: workspace environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_foundation: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 logger: ^2.7.0 sentry_flutter: ^9.26.0 diff --git a/packages/core_network/pubspec.yaml b/packages/core_network/pubspec.yaml index 53d165e..4594546 100644 --- a/packages/core_network/pubspec.yaml +++ b/packages/core_network/pubspec.yaml @@ -5,7 +5,7 @@ version: 0.1.0 resolution: workspace environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_auth: ^0.1.0 @@ -13,7 +13,7 @@ dependencies: dio: ^5.11.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 path: ^1.9.1 uuid: ^4.5.1 diff --git a/packages/core_router/pubspec.yaml b/packages/core_router/pubspec.yaml index 2b0a37a..043bb30 100644 --- a/packages/core_router/pubspec.yaml +++ b/packages/core_router/pubspec.yaml @@ -8,14 +8,14 @@ resolution: workspace # 注意:本包**不**依赖任何 feature_*。feature 路由由 app/ 通过 appRoutesProvider 注入, # 详见 lib/src/app_router.dart 顶部注释与 SCAFFOLD-NOTES.md §G。 environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_auth: ^0.1.0 core_foundation: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 go_router: ^17.5.0 dev_dependencies: diff --git a/packages/core_storage/pubspec.yaml b/packages/core_storage/pubspec.yaml index 130e851..11a1350 100644 --- a/packages/core_storage/pubspec.yaml +++ b/packages/core_storage/pubspec.yaml @@ -12,13 +12,13 @@ resolution: workspace # 连带收益:去掉 drift_dev 后 melos 可以留在 8.x(drift_dev 2.34.0 依赖 # cli_util ^0.4.0,与 melos 8 的 ^0.5.0 互斥)。详见 SCAFFOLD-NOTES.md §A。 environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_foundation: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 shared_preferences: ^2.5.5 dev_dependencies: diff --git a/packages/core_ui/pubspec.yaml b/packages/core_ui/pubspec.yaml index aaa88ac..d349ee6 100644 --- a/packages/core_ui/pubspec.yaml +++ b/packages/core_ui/pubspec.yaml @@ -5,13 +5,13 @@ version: 0.1.0 resolution: workspace environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_foundation: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 dev_dependencies: flutter_lints: ^6.0.0 diff --git a/packages/core_webview/pubspec.yaml b/packages/core_webview/pubspec.yaml index 0580b78..57e2c7a 100644 --- a/packages/core_webview/pubspec.yaml +++ b/packages/core_webview/pubspec.yaml @@ -8,14 +8,14 @@ resolution: workspace # 「用 target 换真实 URL」的接口调用**不在本包**——那需要 core_network,不是允许的边。 # 换票由调用方(feature)完成后把 URL 传进来,本包只负责校验和承载。 environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_auth: ^0.1.0 core_foundation: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 + flutter_riverpod: 3.2.1 webview_flutter: ^4.14.1 dev_dependencies: diff --git a/packages/feature_auth/pubspec.yaml b/packages/feature_auth/pubspec.yaml index 3e5b252..870e14f 100644 --- a/packages/feature_auth/pubspec.yaml +++ b/packages/feature_auth/pubspec.yaml @@ -8,7 +8,7 @@ resolution: workspace # - 这里不出现任何另一个 feature_*(feature 间禁止互相依赖,见 01) # - 这里不直接出现 go_router(路由类型由 core_router re-export,见 04) environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_auth: ^0.1.0 @@ -18,8 +18,9 @@ dependencies: core_ui: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 - riverpod_annotation: ^4.0.3 + flutter_riverpod: 3.2.1 + # 与 riverpod_generator 4.0.3 配套,兼容 Harmony Flutter 固定的 meta 1.17.0。 + riverpod_annotation: 4.0.2 dev_dependencies: build_runner: ^2.4.13 @@ -27,4 +28,4 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^1.0.5 - riverpod_generator: ^4.0.4 + riverpod_generator: 4.0.3 diff --git a/packages/feature_home/pubspec.yaml b/packages/feature_home/pubspec.yaml index 8a955f2..667e8e0 100644 --- a/packages/feature_home/pubspec.yaml +++ b/packages/feature_home/pubspec.yaml @@ -9,7 +9,7 @@ resolution: workspace # "需要" 登录信息,但它拿的是 core_auth 的会话状态,不是 feature_auth 的页面 # - 这里不直接出现 go_router(路由类型由 core_router re-export,见 04) environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: core_analytics: ^0.1.0 @@ -20,8 +20,9 @@ dependencies: core_ui: ^0.1.0 flutter: sdk: flutter - flutter_riverpod: ^3.3.2 - riverpod_annotation: ^4.0.3 + flutter_riverpod: 3.2.1 + # 与 riverpod_generator 4.0.3 配套,兼容 Harmony Flutter 固定的 meta 1.17.0。 + riverpod_annotation: 4.0.2 dev_dependencies: build_runner: ^2.4.13 @@ -29,4 +30,4 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^1.0.5 - riverpod_generator: ^4.0.4 + riverpod_generator: 4.0.3 diff --git a/packages/native_scan/example/pubspec.yaml b/packages/native_scan/example/pubspec.yaml index 31c2f72..c8469a2 100644 --- a/packages/native_scan/example/pubspec.yaml +++ b/packages/native_scan/example/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: none resolution: workspace environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: flutter: diff --git a/packages/native_scan/pubspec.yaml b/packages/native_scan/pubspec.yaml index 6c655c5..1432cfa 100644 --- a/packages/native_scan/pubspec.yaml +++ b/packages/native_scan/pubspec.yaml @@ -10,7 +10,7 @@ resolution: workspace # 因此本包抛的是包内自定义的 NativeScanException,由调用方转成 NativeException。 # --------------------------------------------------------------------------- environment: - sdk: ^3.12.0 + sdk: ^3.11.0 dependencies: flutter: @@ -20,7 +20,9 @@ dev_dependencies: flutter_lints: ^6.0.0 flutter_test: sdk: flutter - pigeon: ^27.3.0 + # 27.x 需要 analyzer >=10,与 Harmony 兼容的 riverpod_generator 4.0.3 + # (analyzer ^9)不能共存;26.3.1 同时兼容 Dart 3.11 与 analyzer 9。 + pigeon: 26.3.1 flutter: plugin: diff --git a/pubspec.lock b/pubspec.lock index ad8f4a4..60029c2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: a49d6cf99e8d8e7a8e93668d09ced0bbdb954d0b4fccc2f5f9241c6b87fad95c + sha256: "5b7468c326d2f8a4f630056404ca0d291ade42918f4a3c6233618e724f39da8e" url: "https://pub.dev" source: hosted - version: "99.0.0" + version: "92.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "663efa951fb8a45e06f491223a604c93820598f20e6a99c25617a1576065e8b7" + sha256: "70e4b1ef8003c64793a9e268a551a82869a8a96f39deb73dea28084b0e8bf75e" url: "https://pub.dev" source: hosted - version: "12.1.0" + version: "9.0.0" analyzer_buffer: dependency: transitive description: name: analyzer_buffer - sha256: "445b77e2054fa3e8c8a8ef1b5e9e6b23bb8028fffd34b5e60eaef315b7750674" + sha256: ff4bd291778c7417fe53fe24ee0d0a1f1ffe281a2d4ea887e7094f16e36eace7 url: "https://pub.dev" source: hosted - version: "0.3.3" + version: "0.3.0" ansi_styles: dependency: transitive description: @@ -229,10 +229,10 @@ packages: dependency: transitive description: name: dart_style - sha256: a4c1ccfee44c7e75ed80484071a5c142a385345e658fd8bd7c4b5c97e7198f98 + sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b url: "https://pub.dev" source: hosted - version: "3.1.8" + version: "3.1.3" dio: dependency: transitive description: @@ -316,10 +316,10 @@ packages: dependency: transitive description: name: flutter_riverpod - sha256: "9255e1e3ad6e38906a1b4f8287678f95f378744c5b46b1985588543f3f19046e" + sha256: e2026c72738a925a60db30258ff1f29974e40716749f3c9850aabf34ffc1a14c url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.2.1" flutter_secure_storage: dependency: transitive description: @@ -728,10 +728,10 @@ packages: dependency: transitive description: name: pigeon - sha256: f90254ef7b22db026fd8d5fd44718fd60697d50968a144a8bc251e5e95d79e10 + sha256: "7afad261c00755491a69de151009fb41fda003e69205e16ba0c354c352c2de62" url: "https://pub.dev" source: hosted - version: "27.3.0" + version: "26.3.1" platform: dependency: transitive description: @@ -816,34 +816,34 @@ packages: dependency: transitive description: name: riverpod - sha256: "17100416c51db7810c71a7bb2c34d1f881faa0074fd452afb0c4db6f8f126c76" + sha256: "8c22216be8ad3ef2b44af3a329693558c98eca7b8bd4ef495c92db0bba279f83" url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.2.1" riverpod_analyzer_utils: dependency: transitive description: name: riverpod_analyzer_utils - sha256: "3e275138862ccc22ed61444a1f9a840f753094c367f28f4123f50289cd204d68" + sha256: e55bc08c084a424e1bbdc303fe8ea75daafe4269b68fd0e0f6f1678413715b66 url: "https://pub.dev" source: hosted - version: "1.0.0-dev.10" + version: "1.0.0-dev.9" riverpod_annotation: dependency: transitive description: name: riverpod_annotation - sha256: "674dbb26e2db3d9253166faf4758c796af14146b8fbcf5e7102bc8a04cd359b8" + sha256: "16471a1260b94e939394d78f1c63a9350936ac4a68c9fbdab40be47268c0b04f" url: "https://pub.dev" source: hosted - version: "4.0.3" + version: "4.0.2" riverpod_generator: dependency: transitive description: name: riverpod_generator - sha256: "54d790c3fee1ae281c448801bfdbfaa9fd961a9d3998494e0fcd9ee32184d7eb" + sha256: "6f9220534d7a353b53c875ea191a84d28cb4e52ac420a66a1bd7318329d977b0" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.3" sentry: dependency: transitive description: @@ -880,10 +880,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "0634e64bd719f89c012f392938e173521f535d3ecaf66558fa94a056d22b5cc7" + sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 url: "https://pub.dev" source: hosted - version: "2.4.27" + version: "2.4.23" shared_preferences_foundation: dependency: transitive description: @@ -1173,10 +1173,10 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: b98656fa4461f8cc05c48a778b4d4883e60ec63e1778348f363f9bb9a477745d + sha256: ad5182eff9a550925330cb9f0cb038eddfdd5712aba8b77aa0f0400e50f6e688 url: "https://pub.dev" source: hosted - version: "4.14.0" + version: "4.12.0" webview_flutter_platform_interface: dependency: transitive description: @@ -1189,10 +1189,10 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: c879dd64b87c452aa84381b244d5469da57ba7e8cca6884c7b1e0d406372c12d + sha256: "82648217f537573e1ca9ae9952d3eacedca6ab5aee69dc84445fc763766dcea2" url: "https://pub.dev" source: hosted - version: "3.26.0" + version: "3.25.1" win32: dependency: transitive description: @@ -1234,5 +1234,5 @@ packages: source: hosted version: "2.2.4" sdks: - dart: ">=3.12.0 <4.0.0" - flutter: ">=3.44.0" + dart: ">=3.11.0 <4.0.0" + flutter: ">=3.38.4" diff --git a/pubspec.yaml b/pubspec.yaml index 82c8394..88e46f2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ name: conti_retail_app publish_to: none environment: - sdk: ^3.12.0 + sdk: ^3.11.0 # --------------------------------------------------------------------------- # 工作区成员。新增包时必须同步加到这里,否则 melos bootstrap 看不到它。