flutter 混合開發 (android 實際操做)

混合構建

推薦以aar方式進行構建,這樣能夠作到無侵入原項目android

android 項目結構git

assets目錄下 flutter_assetsgithub

首先要根據如下方式進行集成 flutter_modelbash

這樣方式可能會報 vm 的錯誤要經過如下命令進行打包框架

gradlew clean
cd flutter_model
flutter packages get
flutter clean
cd .android 
gradlew clean
gradlew assemble
複製代碼

經過以上方式就能夠進行混合打包了。 若是項目中用到gitlab 自動打包(ci)你能夠把.android 目錄下 flutter 下bulid 中的aar 放到主工程中。ide

(先經過gradle引用方式進行混合) 項目構建完畢咱們這邊經過 flutter_boost 進行混合搭建項目 具體詳情請參考阿里的事例。gitlab

咱們會在主項目發現會生成 這三個 modelgradle

flutter_boostui

xservice_kit(boost 是經過service 方式進行鏈接的)this

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)  方法



複製代碼
相關文章
相關標籤/搜索