混合構建
推薦以aar方式進行構建,這樣可以做到無侵入原專案
android 專案結構
assets目錄下 flutter_assets
首先要根據以下方式進行整合 flutter_model
這樣方式可能會報 vm 的錯誤要通過以下命令進行打包
gradlew clean
cd flutter_model
flutter packages get
flutter clean
cd .android
gradlew clean
gradlew assemble
複製程式碼
通過以上方式就可以進行混合打包了。 如果專案中用到gitlab 自動打包(ci)你可以把.android 目錄下 flutter 下bulid 中的aar 放到主工程中。
(先通過gradle引用方式進行混合) 專案構建完畢我們這邊通過 flutter_boost 進行混合搭建專案 具體詳情請參考阿里的事例。
我們會在主專案發現會生成 這三個 model
flutter_boost
xservice_kit(boost 是通過service 方式進行連線的)
flutter
如果通過flutter_boost方式 邏輯程式碼已經寫好就可以把上面的三個庫打成aar放到主專案中進行構建
具體情況如下:
設定flutter 連線boost頁面橋樑
public class FlutterActivity extends BoostFlutterActivity {
private FlutterRouterUtil flutterRouter;
public static void open(Context context, FlutterRouterUtil flutterRouter) {
Intent intent = new Intent(context, FlutterActivity.class);
intent.putExtra("flutterRouter",(Serializable) flutterRouter);
context.startActivity(intent);
}
//設定路由變數
@Override
public String getContainerName() {
if(null!=flutterRouter){
return flutterRouter.getRouterName();
}
else return "sample://tticar_error";
}
//設定白屏載入頁面
@Override
protected View createSplashScreenView() {
View inflate = View.inflate(this, R.layout.flutter_loading_view, null);
TStatusView tStatusView = inflate.findViewById(R.id.tstatus_view);
tStatusView.showLoading();
inflate.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return inflate;
}
//設定路由引數
@Override
public Map getContainerParams() {
if(null!=flutterRouter){
return flutterRouter.getMap();
}else{
return new HashMap();
}
}
//獲取跳轉攜帶過來的值最好通過這個方法 重新實現onCreate方法失效
@Override
public void onRegisterPlugins(PluginRegistry pluginRegistry) {
flutterRouter = (FlutterRouterUtil) getIntent().getSerializableExtra("flutterRouter");
GeneratedPluginRegistrant.registerWith(pluginRegistry);
}
}
複製程式碼
以上就是實戰中用到的框架以及處理邏輯
跳轉遇到的問題
//flutter固定傳參格式
Map<String, dynamic> map=new Map();
map["query"]=(自己所攜帶的map)
map["requestCode"]=(int型別的資料);
FlutterBoost.singleton.openPage("sample://setting",map, animated: true);
如有更改請參考FlutterBoostPlugin 這個類中
openPage(Context context, String url, final Map params, int requestCode) 方法
複製程式碼