flutter混合开发采坑之路
记录flutter混合开发流程
开始前的准备,我的开发环境,系统:window10,开发工具:androidstudio 2022。flutter版本如下:
1,如果你已经有项目了,可以在原项目中创建flutter module。
2,项目创建完成如下:
也可以通过flutter命令创建项目:
flutter create 项目名字 flutter create --org com.example 项目名字 flutter create -t module --org com.example 组件名字
在setting.gradle中配置如下代码:注意这里的flutter_module是你创建的module组件的名字
setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir, flutter_module/.android/include_flutter.groovy ))
在app中引入flutter模块:
implementation project(path: :flutter)
发现在引入这三个库的时候
path_provider: ^2.0.14 path: ^1.8.2 cached_network_image: ^3.2.3
出现下面的错误
Could not create task :path_provider_android:generateDebugUnitTestConfig. this and base files have different roots: D:androidworkspaceidjAppLoveReadDebugidujing_flutter.androidplugins_build_outputpath_provider_android and C:UsersDELLAppDataLocalPubCachehostedpub.devpath_provider_android-2.0.24android.
原因及解决:
flutter系统包缓存文件夹位置冲突。我使用的电脑是Windows,因此默认系统包缓存路径是:C:UsersDELLAppDataLocalPubCachehostedpub.devpath_provider_android-2.0.24android.
而项目必须和flutter系统包缓存路径在同一个盘里面,否则会报上面的错误。所以把项目移动C盘下任意目录就可以了。
3,启动优化
在项目中引用flutter模块打开页面的时候,第一次加载会很慢,处理办法是提前预加载。
在Application中加入以下代码:这里engine_id就是预加载的模块id
mFlutterEngine = new FlutterEngine(this); mFlutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault()); FlutterEngineCache.getInstance().put("engine_id", mFlutterEngine);
不要忘记在onTerminate中进行销毁
@Override public void onTerminate() { mFlutterEngine.destroy(); super.onTerminate(); }
在android中打开flutter模块代码如下:
getContext().startActivity(FlutterActivity.withCachedEngine("engine_id").build(getContext()));