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 ...
随机推荐
- devops|中小公司不要做研发效能度量
我特别反感那些不顾公司现状一上来就想要做研发效能度量的人,尤其是想把研发效能度量当成锤子四处去敲打螺丝钉的人. 没几个人的小公司上来就做研发效能度量,就如同普通人一上来直接问媒婆怎么能娶到迪丽热巴.解 ...
- LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格 ...
- 关于linux下Qt5.7.0安装中文输入法无法显示的问题
关于linux下Qt5.7.0安装中文输入法无法显示的问题 本文是以我自己系统ubuntu-x64 + fcitx + Qt5.7.0为例: sudo apt-get install fcitx-fr ...
- Vue项目使用Echarts来实现中国地图,省份显示
当时做的时候参考了CSND博主:接口写好了吗 第一步:下载echarts npm install echarts --save main.js中引入 import * as echarts fr ...
- [OpenCV-Python] 21 OpenCV 中的轮廓
文章目录 OpenCV-Python:IV OpenCV中的图像处理 21 OpenCV 中的轮廓 21.1 初识轮廓 21.1.1 什么是轮廓 21.1.2 怎样绘制轮廓 21.1.3 轮廓的近似方 ...
- 【Vue3】引入组件Failed to resolve component: MyButton If this is a native custom element
引入组件时页面上并没有出现组件的影子,其他元素正常,初步确定是组件引入部分语法出了问题,打开开发者工具看到控制台报出错误代码: Failed to resolve component: MyButto ...
- SignalR服务端及客户端实现
服务器端: 引用nuget: 1.Microsoft.AspNet.SignalR.SelfHost 2.Microsoft.Owin.Cors internal class Program { st ...
- selenium测试用例的编写,隐式等待与显式等待的编写
开头 用配置好的 selenium 进行一个简单的测试用例的编写,可以参考allure的美化这一遍博文 https://www.cnblogs.com/c-keke/p/14837766.html 代 ...
- 2022-08-25:以下go语言代码输出什么?A:1 0;B:1 2;C:不能编译;D:0 0。 package main import “fmt“ func named() (n, _ int
2022-08-25:以下go语言代码输出什么?A:1 0:B:1 2:C:不能编译:D:0 0. package main import "fmt" func named() ( ...
- 2022-02-27:k8s安装yapi,yaml如何写?
2022-02-27:k8s安装yapi,yaml如何写? 答案2022-02-27: yaml如下: apiVersion: apps/v1 kind: Deployment metadata: l ...