NA嵌入Flutter页面,如何才能更容易拿到大厂Offer

private void addFlutterView() {

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

// 通过FlutterFragment.createDefault()创建出FlutterFragment

// 需要注意这里的FlutterFragment位于io.flutter.embedding.android包中

//FlutterFragment flutterFragment = FlutterFragment.createDefault();

// 通过FlutterFragment.withNewEngine()获取到NewEngineFragmentBuilder对象

FlutterFragment.NewEngineFragmentBuilder fragmentBuilder = FlutterFragment.withNewEngine();

// 使用建造者模式构造出FlutterFragment对象,可以通过initialRoute()方法指定初始路由名称。

// 传递参数只需要在路由名称后面进行拼接。

FlutterFragment.NewEngineFragmen

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

tBuilder initialRoute = fragmentBuilder.initialRoute(“yc”);

FlutterFragment flutterFragment = initialRoute.build();

getSupportFragmentManager()

.beginTransaction()

.add(R.id.rl_flutter, flutterFragment)

.commit();

// 存在的问题

// 使用的withNewEngine()方法从名称上也能看出每次都是创建一个新的FlutterEngine对象来显示Flutter UI,

// 但是从官方文档中我们可以了解到每个FlutterEngine对象在显示出Flutter UI之前

// 是需要一个warm-up(不知道能不能翻译为预热)期的,这会导致屏幕呈现短暂的空白,

// 解决方式就是预先创建并启动FlutterEngine,完成warm-up过程,然后将这个FlutterEngine缓存起来,

// 之后使用这个FlutterEngine来显示出Flutter UI。

// 解决方案看:FlutterFragmentCachedActivity

// 如何获取到FlutterEngine对象呢?FlutterFragment中定义了一个getFlutterEngine()方法,

// 从方法名来看大概就是获取FlutterEngine对象。

// 尝试过创建MethodChannel时传入flutterFragment.getFlutterEngine().getDartExecutor(),

// 运行后会直接抛出空指针异常,异常产生的位置在FlutterFragment的getFlutterEngine()方法中

// 错误原因是这里的delegate为null,全局搜索一下,发现在FlutterFragment的onAttach()方法中会对delegate赋值,也就是说明此时没有执行onAttach()方法。

// 猜测这就是由于上面提到过的FlutterEngine的warm-up机制,这是一个耗时过程,

// 因此FlutterFragment并不会立刻执行onAttach()方法,导致我们在Activity的onCreate()方法中直接使用FlutterFragment的getFlutterEngine()方法会抛出异常。

// todo 调用下面这句话会空指针崩溃

// FlutterEngine flutterEngine = flutterFragment.getFlutterEngine();

}

  • Flutter添加页面

  • 这个同上

3.3 使用新版本FlutterActivity

  • 原生引入Flutter页面方式

  • 使用FlutterActivity,这里的FlutterActivity也是位于io.flutter.embedding.android包下的。

<activity

android:name=“io.flutter.embedding.android.FlutterActivity”

android:configChanges=“orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode”

android:hardwareAccelerated=“true”

android:theme="@style/AppTheme"

android:windowSoftInputMode=“adjustResize” />

/**

  • 和介绍的创建FlutterFragment的三种方式是对应的

  • FlutterActivity显示的Flutter路由是在创建Intent对象时指定的,

  • 优点就是使用起来更简单,缺点就是不够灵活,

  • 无法像FlutterView/FlutterFragment那样只是作为原生页面中的一部分展示,

  • 因此这种方式更适合整个页面都是由Flutter编写的场景。

*/

private void test(){

// 方式一、FlutterActivity显示的路由名称为"/",不可设置

/*startActivity(

FlutterActivity.createDefaultIntent(this)

);*/

// 方式二、FlutterActivity显示的路由名称可设置,每次都创建一个新的FlutterEngine对象

startActivity(

FlutterActivity

.withNewEngine()

.initialRoute(“yc”)

.build(this)

);

// 方式三、FlutterActivity显示的路由名称可设置,使用缓存好的Fl

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值