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 ...
随机推荐
- C#写一套最全的MySQL帮助类(包括增删改查)
介绍说明:这个帮助类包含了六个主要的方法:ExecuteNonQuery.ExecuteScalar.ExecuteQuery.ExecuteQuery(泛型).Insert.Update和Delet ...
- 真实场景sql优化持续更新(老司机必备)
概述 下述场景,均来自实际产品线上经验,出于保密考量,所有需求场景都是仿造的,模拟遇到过的真实场景. 场景一: 统计数据(Order by 不具备唯一性导致的分页数据混乱) 需求 在实际业务场景中,我 ...
- [Pytorch框架]3.2 MNIST数据集手写数字识别
文章目录 3.2 MNIST数据集手写数字识别 3.2.1 数据集介绍 3.2.2 手写数字识别 3.2 MNIST数据集手写数字识别 import torch import torch.nn as ...
- 使用 shell 脚本自动申请进京证 (六环外) —— debug 过程
问题现象 用 shell 脚本写了一个自动办理六环外进京证的工具 <使用 shell 脚本自动申请进京证 (六环外)>,然而运行这个脚本总是返回以下错误信息: { "msg&qu ...
- 【Python基础】数据类型与类型转换
五种基本数据类型 在 Python 中,基本数据类型是指不可变对象的数据类型.以下是 Python 中的基本数据类型: 整数类型(int):表示整数,例如 1.2.3 等等. 浮点数类型(float) ...
- 分布式搜索引擎Elasticsearch基础入门学习
一.Elasticsearch介绍 Elasticsearch介绍 Elasticsearh 是 elastic.co 公司开发的分布式搜索引擎. Elasticsearch(简称ES)是一个开源的分 ...
- SQLLabs靶场 less11-20
SQLLabs靶场 less11-20 Less-11-16 请求方式 注入类型 拼接方式 POST 联合.报错.布尔盲注.延时盲注 username='x'11 请求方式 注入类型 拼接方式 POS ...
- RestTemplate发送get请求并携带请求头
//设置请求头 HttpHeaders headers = new HttpHeaders(); headers.add("X-Access-Token", huaWenToken ...
- JavaWeb之day03js
目录: 1.js的String对象(****) 2.js的Array对象 (****) 3.js的Date对象 (****) * 获取当前的月 0-11,想要得到准确的月 +1 * 获取星期时候,星期 ...
- 2021-07-14:接雨水。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
2021-07-14:接雨水.给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 福大大 答案2021-07-14: 左右指针向中间移动.左指针是左边柱 ...