Flutter混合开发-Null check operator used on a null value_flutter null check operator used on a null value-程序员宅基地

技术标签: flutter  

标题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()

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lalallallalla/article/details/119681496

智能推荐

JS中如何使用cookie_js使用cookie登录-程序员宅基地

文章浏览阅读7k次,点赞8次,收藏32次。最近在项目接触了很多在js中调用保存的cookie,是别人在项目的utils.js中保存了不少cookie。大多数保存的是当前登录的用户,和当前的系统,各种常用的id。1、cookie是什么:①、cookie 是存储于访问者计算机中的变量。每当一台计算机通过浏览器来访问某个页面时,那么就可以通过 JavaScript 来创建和读取 cookie。  ②、实际上 cookie 是存于用户硬盘..._js使用cookie登录

关于小程序隐私保护指引设置的公告_小程序隐私协议开发指南-程序员宅基地

文章浏览阅读2.8k次。为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后,方可调用微信提供的隐私接口。开发者首先需确定小程序是否涉及处理用户个人信息,如涉及,则需配置用户隐私授权弹窗,且仅有在平台《小程序用户隐私保护指引》中声明了所处理的用户个人信息,才可以调用平台提供的对应接口或组件。仅有在指引中声明所处理的用户个人信息,才可以调用平台提供的对应接口或组件。_小程序隐私协议开发指南

CefSharp内嵌chrome浏览器 支持mp4 h264编码_cefsharp x86 94.4.5 h.264支持-程序员宅基地

文章浏览阅读9.2k次。https://download.csdn.net/download/qq_20757489/10868821CefSharp 63版本(X86)编译好的文件支持mp3 mp41.创建winform程序,使用.NET 4.5.2或以上。2.在解决方案上右键-&gt;"属性"-&gt;"生成"-&gt;"目标平台",选择x86,Cef暂不支持"Any CPU"。3.将下载下来的文件解..._cefsharp x86 94.4.5 h.264支持

FCOSR: A Simple Anchor-free Rotated Detector for Aerial Object Detection阅读笔记-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏18次。(一) Title论文地址:https://arxiv.org/abs/2111.10780项目地址:https://github.com/lzh420202/FCOSR(二) Summary研究背景:现有的基于anchor-based方法的旋转框检测算法需要手动设置预设框,引入了额外的超参数和计算。基于anchor-free的方法通常具有复杂的体系结构,不容易部署。本文方法:本文提出了一个一阶段的带有角度旋转的检测框架FCOSR,一看就是基于FCOS架构,并且将二维高斯分布也引入进来_fcosr

Eclipse配置gradle插件教程-程序员宅基地

文章浏览阅读3.2k次。eclipse支持gradle

H3C服务器带外默认账号和密码,H3C产品的默认密码是多少?-程序员宅基地

文章浏览阅读1.8w次,点赞2次,收藏7次。H3C产品的默认密码H3C设备采用出厂配置启动时,通过Console口登录时认证方式为scheme,用户名和密码均为admin;设备采用空配置启动时,通过Console口登录时认证方式为none,可直接登录。登录成功之后用户角色为network-adminAP设备,在AP上开启允许TELNET登录时,telnet的密码是h3capadmin...

随便推点

【python】多维list(非对齐数据)填充,可视化,colorbar操作_多维list展平-程序员宅基地

文章浏览阅读723次。读取非对齐数据到list,数据填充。可视化,colrbar_多维list展平

Python机器学习零基础理解随机森林算法_随机森林零基础-程序员宅基地

文章浏览阅读3.6w次。大家好,我是Mr数据杨。今天,我想让大家跟我一起回到历史的烟云之中,探索“随机森林”的奥秘,其实,这与三国演义中的一段经历颇有相似之处。记得那时曹操曾经在建邺遇到了大问题,他需要找出敌人刘备的真正意图。这就如同在大数据中找寻答案,需要用随机森林这一工具理解并预测未来。这如同曹操手下的谋士郭嘉,用他的聪明才智,协助曹操一步步揭示真相。_随机森林零基础

基于单片机带计分功能的8路抢答器设计-程序员宅基地

文章浏览阅读627次,点赞18次,收藏17次。*单片机设计介绍,基于单片机带计分功能的8路抢答器设计。

Bootstrap-Grip_bootstrap grip-程序员宅基地

文章浏览阅读139次。[Menu]AboutGripCodePageSummaryTableCodePageSummarySourceAbout最近开始学习 Bootstrap 将自己的学习进程记录 本文记录关于 Grip 和 Table 这两块GripCode:

一分钟学会清理垃圾运行命令-程序员宅基地

文章浏览阅读8.8k次,点赞4次,收藏31次。很多人在问清理垃圾运行命令是什么,接下来小编给大家带来清理垃圾的办法,保证让大家一分钟学会清理垃圾运行命令,从此电脑维护变得轻轻松松。  第一招:清理垃圾  在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:*.tmp、*._mp)日志文件(*.log)、临时帮助文件(*.gid)、磁盘检查文件(*.chk)、临时备份文件(如:*.old、*.bak)以及其他临...

【优化求解】遗传算法求解仓库货位优化问题【含Matlab源码 022期】-程序员宅基地

文章浏览阅读371次,点赞11次,收藏10次。遗传算法求解仓库货位优化问题完整的代码,方可运行;可提供运行操作视频!适合小白!