安卓原生项目中集成flutter moudle

去年做了一年的flutter 项目,今年新公司接到的任务是在原生项目中嵌入flutter moudle,开始上手有点手生,一步一步踩坑中,话不多说,上代码直接干。

跳转的方式有很多,我用的是FlutterEngine 的方式:

原生项目中 New -->> moudle -->> flutter moudle 

创建完成再 import moudle

首先安卓原生正常创建一个Activity

class PadFlutterActivity : AppCompatActivity(),FlutterUiDisplayListener{

    val FLUTTER_ROUTE_NAME = "flutter_route_name"

    var mFlutterEngine: FlutterEngine? = null
    var mFlutterView: FlutterView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_catering)
        val flutterRoute = intent.getStringExtra(FLUTTER_ROUTE_NAME)
        mFlutterEngine = FlutterEngineCache.getInstance().get(App.KEY_FLUTTER_CATERING);
        mFlutterEngine!!.navigationChannel.setInitialRoute(flutterRoute)
        mFlutterView = createFlutterView()
        mFlutterView!!.attachToFlutterEngine(mFlutterEngine!!);

    }

    private fun createFlutterView(): FlutterView? {
        var flutterView = FlutterView(this)
        var layoutParams = FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        )
        fl_flutter.addView(flutterView, layoutParams)

        return flutterView
    }

    override fun onFlutterUiDisplayed() {
        fl_flutter.visibility = View.VISIBLE
    }

    override fun onFlutterUiNoLongerDisplayed() {

    }

    override fun onResume() {
        super.onResume()
        mFlutterEngine!!.lifecycleChannel.appIsResumed()
    }

    override fun onPause() {
        super.onPause()
        mFlutterEngine!!.lifecycleChannel.appIsInactive()
    }

    override fun onStop() {
        super.onStop()
        mFlutterEngine!!.lifecycleChannel.appIsPaused()
    }

}

在Application 中初始化FlutterEngine

 private fun initFlutter() {
        flutterEngine = FlutterEngine(this)
        flutterEngine!!.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
        FlutterEngineCache.getInstance().put(KEY_FLUTTER_PAD,flutterEngine)
    }
val flutterRoute = intent.getStringExtra(FLUTTER_ROUTE_NAME) 这个是给flutter端传递参数用的,防止后期加需求,先把入口设计出来,用于后期区分跳转哪个页面,今天也是刚做到这一步,还没完善

Flutter 端 就简单做个接收处理就好了,

Widget _widgetForRoute(String routeName) {
  switch(routeName) {
    case "catering":
      return CateringWidget();

    default:
      return CateringWidget();
  }
}

runApp 运行这个代码就好了,我还有一些其他需求,在踩坑,但简单的集成到这一步就没问题。记录一下开发过程,网上的其他大佬写的太深,看不太懂,也欢迎大家留言讨论
To Be Continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值