去年做了一年的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