GetX 关于报错 Null check operator used on a null value的解决
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'logic.dart'; class GetIndexPage extends StatefulWidget {
int count;
GetIndexPage({required this.count, Key? key}) : super(key: key);
@override
State<GetIndexPage> createState() => _GetIndexPageState();
} class _GetIndexPageState extends State<GetIndexPage> {
late GetIndexLogic logic;
@override
void initState() {
super.initState();
logic = Get.put(GetIndexLogic(widget.count));
} @override
Widget build(BuildContext context) {
return GetBuilder<GetIndexLogic>(builder: (_) {
return Scaffold(
body: Container(
child: Column(
children: [
Text('测试数据:'),
Expanded(child: _body),
],
),
),
);
});
} get _body {
if (logic.state.list.isEmpty) {
return Container(
child: Text('暂无数据'),
alignment: Alignment.center,
);
}
return GetBuilder<GetIndexLogic>(
builder: (_) {
return ListView.builder(
itemBuilder: (c, index) {
return Container(
child: Text(logic.state.list[index]),
alignment: Alignment.center,
height: 70,
);
},
itemCount: logic.state.list.length,
);
});
} @override
void dispose() {
// TODO: implement dispose
Get.delete<GetIndexLogic>();
super.dispose();
}
}
import 'dart:math';
import 'package:get/get.dart';
import 'state.dart';
class GetIndexLogic extends GetxController {
int count = 0;
GetIndexLogic(this.count);
final GetIndexState state = GetIndexState();
@override
void onInit() {
refreshData();
print("lw----onInit:$count");
super.onInit();
}
refreshData() {
state.list.clear();
/// 模拟网络请求
Future.delayed(const Duration(milliseconds: 100), () {
bool res = Random().nextBool();
if (true) {
state.list.add('jack');
state.list.add('rose');
state.list.add(count.toString());
}
print("lw----res:$res--state.list:${state.list}");
update();
});
}
@override
void onClose() {
print("lw----onClose:$count");
super.onClose();
}
}
class GetIndexState {
List<String> list = [];
GetIndexState() {
///Initialize variables
}
}
以上是所有代码,也是使用getx 的常见场景。正常操作是不会有任何问题的。
但是如果网络数据响应时间变长,而且快速的进出页面,就会报错Null check operator used on a null value。
具体报错原因:由于快速的进出页面,当数据返回时,get内部已经delete了logic, 然后再重新创建新的
GetBuilder<GetIndexLogic>(
builder: (_) {
return ListView.builder(
itemBuilder: (c, index) {
return Container(
child: Text(logic.state.list[index]),
alignment: Alignment.center,
height: 70,
);
},
itemCount: logic.state.list.length,
);
});
getx内部,由于controller已经被释放,
执行 GetInstance().put<T>(controller!, tag: widget.tag); 的时候就会报错;
解决方式:
新创建GetBuilder的时候,
return GetBuilder<GetIndexLogic>(
init: logic,
builder: (_) {
return ListView.builder(
itemBuilder: (c, index) {
return Container(
child: Text(logic.state.list[index]),
alignment: Alignment.center,
height: 70,
);
},
itemCount: logic.state.list.length,
);
});
总结:
只要不是在初始化时就创建出的GetBuilder,就需要加上init: logic,但是logic应该是当前页面持有的logic,才能保持数据的准确性,
GetX 关于报错 Null check operator used on a null value的解决的更多相关文章
- jquery easyui datagrid 空白条处理 自适应宽高 格式化函数formmater 初始化时会报错 cannot read property 'width'||'length' of null|undefined
1---表格定义好之后右侧可能会有一个空白条 这个空白条是留给滚动条的,当表格中的一页的数据在页面中不能全显示时会自动出现滚动条,网上有很多事要改源码才可以修改这个,但是当项目中多处用到时,有的需要滚 ...
- 支付宝 报错 rsa_private read error : private key is NULL解决方法
原因: 真机调试IOS支付宝功能GDB出现 rsa_private read error : private key is NULL提示 调试iOS 支付宝SDK的时候,执行demo.把 Partn ...
- mpvue开发微信小程序,分享按钮报错:`Cannot read property 'apply' of null`
用mpvue开发微信小程序,分享按钮报错:Cannot read property 'apply' of null onShareAppMessage 是于微信小程序Pages的生命周期钩子,顾这个方 ...
- c++中sort函数调用报错Expression : invalid operator <的内部原理 及解决办法
转自:https://www.cnblogs.com/huoyao/p/4248925.html 当我们调用sort函数进行排序时,中的比较函数如果写成如下 bool cmp(const int &a ...
- c++中sort函数调用报错Expression : invalid operator <的内部原理
当我们调用sort函数进行排序时,中的比较函数如果写成如下 bool cmp(const int &a, const int &b) { if(a!=b) return a<b; ...
- win7 X64 使用VS2008 ->编译报错LINK : fatal error LNK1000: Internal error during Incr的解决
编译报错LINK : fatal error LNK1000: Internal error during Incr的解决 Win7 旗舰版 Microsoft Visual Studio 2008 ...
- selenium+phantomjs报错:Unable to find a free port的分析和解决
selenium+phantomjs报错:Unable to find a free port的分析和解决 Table of Contents 1. 现象 2. 分析 3. 解决办法 1 现象 在做项 ...
- SpringBoot整合Swagger2案例,以及报错:java.lang.NumberFormatException: For input string: ""原因和解决办法
原文链接:https://blog.csdn.net/weixin_43724369/article/details/89341949 SpringBoot整合Swagger2案例 先说SpringB ...
- 输入指令npx webpack-dev-server报错:Error: Cannot find module ‘webpack-cli/bin/config-yargs‘的解决方法
输入指令npx webpack-dev-server报错:Error: Cannot find module 'webpack-cli/bin/config-yargs'的解决方法 输入指令:npx ...
- Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决
Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决 因为安装了新版本的node才报的错误:node版本: v18 ...
随机推荐
- Redis(二)redis发布与订阅以及三种新数据类型
1 配置文件 Utis单位部分 redis支持字节但不支持其他类型 Includes部分 设置包含的其他文件的目录 netword网络部分 bind:默认情况bind=127.0.0.1只接受本机的访 ...
- Java学习笔记03
1. 流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.所以,我们必须清楚每条语句的执行流程.而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能. 1.1 分 ...
- 如何遍历HashMap集合?
在Java中,HashMap是一种常用的数据结构,它提供了快速的查找.插入和删除操作.当我们需要遍历HashMap中的所有元素时,可以利用三种不同的方法实现. 方法一:使用键值对遍历 HashMap中 ...
- LLM(大语言模型)解码时是怎么生成文本的?
Part1配置及参数 transformers==4.28.1 源码地址:transformers/configuration_utils.py at v4.28.1 · huggingface/tr ...
- Vue的项目打包为移动端(安卓手机应用)app
现在基于vue全家桶技术体系,基本上可以开发各端的各种应用,pc端的应用,开发完成以后,直接运行打包命令 yarn build 即可打包,部署到服务器端上线即可.那么,今天我们来聊一聊,开发好的vue ...
- 【Dotnet 工具箱】JIEJIE.NET - 强大的 .NET 代码混淆工具
你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! JIEJIE.NET - 强大的 .NET 代码混淆工具 JIEJIE.NET JIEJIE.NET ...
- 微服务 - Nginx网关 · 进程机制 · 限流熔断 · 性能优化 · 动态负载 · 高可用
系列目录: 微服务 - 概念 · 应用 · 通讯 · 授权 · 跨域 · 限流 微服务 - 集群化 · 服务注册 · 健康检测 · 服务发现 · 负载均衡 微服务 - Redis缓存 · 数据结构 · ...
- 【易车网实例】x-sign逆向保姆级教程
易车号x-sign逆向 前言 许多网站都有反爬机制,x-sign加密就是许多反爬虫机制的其中一种,本次将以易车号作为目标进行演示. 方法仅供学习参考. 链接:https://hao.yiche.com ...
- cat,more,cp,mv,rm,命令
cat命令 查看文件内容 语法:cat[linux路径] more命令查看文件内容 more命令同样可以查看文件内容, 同cat不同的是: •cat是直接将内容全部显示出来 •more支持翻页,如果文 ...
- 2021-08-08:自由之路。电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串 ring,表
2021-08-08:自由之路.电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并 ...