Flutter.createView方法废弃

2022-03-27  本文已影响0人  禄子_c79b

首先是通过FlutterView引入Flutter页面,以前我们是通过io.flutter.facade包中Flutter类的createView()方法创建出一个FlutterView,然后添加到Activity的布局中,但是由于io.flutter.facade包的废弃,该方法已经无法使用。官方的文档有说明目前不提供在View级别引入Flutter的便捷API,因此如果可能的话,我们应该避免使用FlutterView,但是通过FlutterView引入Flutter页面也是可行的,代码如下:

// 通过FlutterView引入Flutter编写的页面

 FlutterView flutterView = new FlutterView(this);
 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
    ViewGroup.LayoutParams.MATCH_PARENT,
    ViewGroup.LayoutParams.MATCH_PARENT);
 FrameLayout flContainer = findViewById(R.id.fl_container);
 flContainer.addView(flutterView, lp);
// 关键代码,将Flutter页面显示到FlutterView中
flutterView.attachToFlutterEngine(flutterEngine);

需要注意,这里的FlutterView位于io.flutter.embedding.android包中,和此前我们所创建的FlutterView(位于io.flutter.view包中)是不一样的。我们通过查看FlutterView的源码可以发现它继承自FrameLayout,因此像一个普通的View那样添加就可以了。接下来的这一步很关键,调用FlutterView的attachToFlutterEngine()方法,这个方法的作用就是将Flutter编写的UI页面显示到FlutterView中,我们注意到这里传入了一个flutterEngine参数,它又是什么呢?flutterEngine的类型为FlutterEngine,字面意思就是Flutter引擎,它负责在Android端执行Dart代码,将Flutter编写的UI显示到FlutterView/FlutterActivity/FlutterFragment中。创建#FlutterEngine的代码如下:

FlutterEngine flutterEngine = new FlutterEngine(this);
 flutterEngine.getDartExecutor().executeDartEntrypoint(
    DartExecutor.DartEntrypoint.createDefault()
);

这样就创建好了一个FlutterEngine对象,默认情况下FlutterEngine加载的路由名称为"/",我们可以通过下面的代码指定初始路由名称:

   flutterEngine.getNavigationChannel().setInitialRoute("route1");

至于传参的情况没有变化,直接在路由名称后面拼接参数就可以了。当然,FlutterView也可以直接在xml布局文件中添加,最后同样需要调用attachToFlutterEngine()方法将Flutter编写的UI页面显示到FlutterView中,这里就不展示了
原文链接:https://blog.csdn.net/ruiruiddd/article/details/115318612

上一篇下一篇

猜你喜欢

热点阅读