已有flutter工程嵌入已有HarmonyOS鸿蒙Next工程
已有flutter工程嵌入已有HarmonyOS鸿蒙Next工程
将flutter项目内页面搬迁到执行flutter create -t module flutter_module
创建的flutter_module项目中时, 导入页面要使用下图1中的外部库。在执行flutter pub get
显示图二。需要用Dart语言版本>=3.4.1。
问一下有没有支持这个版本鸿蒙ohos构建git地址
更多关于已有flutter工程嵌入已有HarmonyOS鸿蒙Next工程的实战教程也可以访问 https://www.itying.com/category-92-b0.html
【解决方案】
检查引入的三方插件是纯Dart库还是依赖原生平台的库。
- 三方插件是纯Dart库
以http_parser库为例子,可以通过降低或者提高插件的版本,使插件的Dart版本和本地项目的Dart版本匹配,插件适配的Dart版本可以在Flutter和Dart的package管理平台上查看。
- 三方插件是依赖原生平台的库
我们需要使用已经适配HarmonyOS的三方插件,已经适配HarmonyOS的三方插件一般不会有Dart版本问题,都是使用了未适配HarmonyOS的三方插件才会报错,这时我们需要把pubspec.yaml文件中引入的三方插件改为已适配HarmonyOS的,以webview_flutter举例:
dependencies:
flutter:
sdk: flutter
webview_flutter:
git:
url: https://gitee.com/openharmony-sig/flutter_packages.git
path: packages/webview_flutter/webview_flutter
已适配HarmonyOS的三方插件可以在此查看OpenHarmony-SIG/flutter_packages
更多关于已有flutter工程嵌入已有HarmonyOS鸿蒙Next工程的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter module依赖了flutter_easy_search_bar,这个三方库或插件 是基于3.22.1版本(dart 3.4.1)而鸿蒙flutter3.22.0的Dart是3.4.0的,所以报错,可以找一下低版本的这个三方库或插件。
3.22.1 | x64 | a14f74f | 2024/5/23 | 3.4.1 |
---|---|---|---|---|
3.22.0 | x64 | 5dcb86f | 2024/5/14 | 3.4.0 |
要将已有的Flutter工程嵌入到已有的HarmonyOS鸿蒙Next工程中,可以按照以下步骤操作:
-
创建Flutter Module:在Flutter工程目录下运行
flutter create --template=module my_flutter_module
,生成Flutter模块。 -
配置HarmonyOS工程:在HarmonyOS工程的
build.gradle
中添加Flutter模块依赖:dependencies { implementation project(':my_flutter_module') }
-
集成Flutter引擎:在HarmonyOS的
MainAbility
中初始化Flutter引擎:FlutterEngine flutterEngine = new FlutterEngine(this); flutterEngine.getNavigationChannel().setInitialRoute("/"); FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);
-
加载Flutter界面:在HarmonyOS的
MainAbilitySlice
中使用FlutterFragment
加载Flutter界面:FlutterFragment flutterFragment = FlutterFragment.withCachedEngine("my_engine_id").build(); getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, flutterFragment).commit();
-
构建运行:确保Flutter模块和HarmonyOS工程都正确配置后,构建并运行项目。
通过这些步骤,你可以将Flutter工程成功嵌入到HarmonyOS鸿蒙Next工程中。