混合构建

推荐以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)  方法



复制代码

转载于:https://juejin.im/post/5cb7e472e51d456e2907f22b

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐