IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter混合开发-Null check operator used on a null value -> 正文阅读

[移动开发]Flutter混合开发-Null check operator used on a null value

标题Flutter与Android混编

在Android与Flutter混编中导入flutter的GetX框架时,配置getPages参数出错,在编译时不报错,但是运行之后,debug模式下出现红底白色的错误,错误显示为 Null check operator used on a null value,看一眼懵了,本地开发版本使用的是flutter2,配置的Getx库也确实在很早的版本中就支持了Null safety ,且配置的getPages为数组并且可为空,按照常理怎么也不可能出现这个错误!

尝试的方案

1.老三件套删除Build、清除缓存、删除flutter中的pub缓存文件,无用!
2.GetMaterialApp中传入getPages参数为空数组,结果还是报错
3.不使用GetMaterialApp,使用原生的MaterialApp,正常,说明不是缓存的原因啊
4.降低GetX版本,在支持空数组和不支持的版本间疯狂切换,效果还是一样

百度上的结果也是没多少的,可能混编的情况还是不太多,没有太多的参考!

于是我尝试在一个纯flutter项目中去加载GetX并配置getPages,发现竟然可以运行,一模一样的的flutter环境,运行的结果竟然不同,于是我确定了不是flutter环境的锅,想到混编的话是通过FlutterEngine引擎去加载,问题会不会出在这里呢!

创建FlutterEngine代码

   /**创建FlutterEngine*/
  flutterEngine = createFlutterEngine()

  GeneratedPluginRegistrant.registerWith(flutterEngine!!)



 val flutterFragment = FlutterFragment.withCachedEngine(engineId)
      .renderMode(RenderMode.surface)
      .build<FlutterFragment>()
 /**将FlutterFragment添加到FrameLayout中*/
 supportFragmentManager
      .beginTransaction()
      .add(R.id.fl_container, flutterFragment)
      .commit()


 /**
     * 创建可缓存的FlutterEngine
     * FlutterEngine可加速启动Flutter引擎,快速启动页面
     * @return [FlutterEngine]
     */
    private fun createFlutterEngine(): FlutterEngine {
        /** 实例化FlutterEngine对象*/
        val flutterEngine = FlutterEngine(this)
        /** 设置初始路由 */
        flutterEngine.navigationChannel.setInitialRoute(
            "route_page"
        )
        /** 开始执行dart代码来pre-warm FlutterEngine */
        flutterEngine.dartExecutor.executeDartEntrypoint(
            DartExecutor.DartEntrypoint.createDefault()
        )
        /** 缓存FlutterEngine */
        FlutterEngineCache.getInstance().put(engineId, flutterEngine)
        return flutterEngine
    }

在创建FlutterEngine中,我使用了FlutterEngineCache进行缓存,通过engineId为键值缓存起来后,下次进入会在withCachedEngine中进行读取,但是奇怪的是,每次运行APP都会杀死,难道APP杀死后,FlutterEngineCache中的FlutterEngine还在内存中?难道它是由系统进行创建并维护的?有知道的小伙伴可以留言告诉我,后期也会去研究一下FlutterEngine!

解决问题

去除FlutterEngineCache,每次进入时创建一个默认的新的FlutterEngine,不再从缓存中读取

 supportFragmentManager
            .beginTransaction()
            .add(R.id.fl_container, FlutterFragment.createDefault())
            .commit()

问题解决,但是为啥清理后台之后,缓存还是存在呢?知道的小伙伴留言告诉我!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:30:31  更:2021-08-17 15:32:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:01:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码