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的解决的更多相关文章

  1. jquery easyui datagrid 空白条处理 自适应宽高 格式化函数formmater 初始化时会报错 cannot read property 'width'||'length' of null|undefined

    1---表格定义好之后右侧可能会有一个空白条 这个空白条是留给滚动条的,当表格中的一页的数据在页面中不能全显示时会自动出现滚动条,网上有很多事要改源码才可以修改这个,但是当项目中多处用到时,有的需要滚 ...

  2. 支付宝 报错 rsa_private read error : private key is NULL解决方法

    原因:  真机调试IOS支付宝功能GDB出现 rsa_private read error : private key is NULL提示 调试iOS 支付宝SDK的时候,执行demo.把 Partn ...

  3. mpvue开发微信小程序,分享按钮报错:`Cannot read property 'apply' of null`

    用mpvue开发微信小程序,分享按钮报错:Cannot read property 'apply' of null onShareAppMessage 是于微信小程序Pages的生命周期钩子,顾这个方 ...

  4. c++中sort函数调用报错Expression : invalid operator <的内部原理 及解决办法

    转自:https://www.cnblogs.com/huoyao/p/4248925.html 当我们调用sort函数进行排序时,中的比较函数如果写成如下 bool cmp(const int &a ...

  5. c++中sort函数调用报错Expression : invalid operator <的内部原理

    当我们调用sort函数进行排序时,中的比较函数如果写成如下 bool cmp(const int &a, const int &b) { if(a!=b) return a<b; ...

  6. win7 X64 使用VS2008 ->编译报错LINK : fatal error LNK1000: Internal error during Incr的解决

    编译报错LINK : fatal error LNK1000: Internal error during Incr的解决 Win7 旗舰版 Microsoft Visual Studio 2008 ...

  7. selenium+phantomjs报错:Unable to find a free port的分析和解决

    selenium+phantomjs报错:Unable to find a free port的分析和解决 Table of Contents 1. 现象 2. 分析 3. 解决办法 1 现象 在做项 ...

  8. SpringBoot整合Swagger2案例,以及报错:java.lang.NumberFormatException: For input string: ""原因和解决办法

    原文链接:https://blog.csdn.net/weixin_43724369/article/details/89341949 SpringBoot整合Swagger2案例 先说SpringB ...

  9. 输入指令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 ...

  10. Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决

    Vscode报错: error:0308010C:digital envelope routines::unsupported错误记录解决 因为安装了新版本的node才报的错误:node版本: v18 ...

随机推荐

  1. 【Spring5】JdbcTemplate

    JdbcTemplate实现对数据库增删改查 步骤 导入Jar包 mysql-connector-java-8.0.28.jar:mysql数据库连接的相关依赖 spring-tx-5.2.6.REL ...

  2. 记一次 MySQL 主从同步异常的排查记录,百转千回

    你好,我是悟空. 这是悟空的第 183 篇原创文章 官网:www.passjava.cn 本文主要内容如下: 一.现象 最近项目的测试环境遇到一个主备同步的问题: 备库的同步线程停止了,无法同步主库的 ...

  3. 批量更新Postgresql的序列

    序列(sequence)是 PostgreSQL 中的一种对象,用于生成自动递增的唯一标识符.通常,序列会与表的自增主键一起使用,以确保每个新插入的行都有一个唯一的标识符.在某些情况下,可能需要更新序 ...

  4. 几行代码教你快速创建scrapy项目,非常实用建议收藏!

    import shutil,os修改settings.py def config(scrapy_path,project_name): judge=input("是否自动修改配置?是:yes ...

  5. golang中一种不常见的switch语句写法

    最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下. 注意这里讨论的不是typed switch,也就是case语句后面是类型的那种. 直接看代码: func (s *systemd) ...

  6. 如何实现一个sync.Once

    sync.Once 是 golang里用来实现单例的同步原语.Once 常常用来初始化单例资源, 或者并发访问只需初始化一次的共享资源,或者在测试的时候初始化一次测试资源. 单例,就是某个资源或者对象 ...

  7. Pytorch数据操作

    1.Pytorch中tensor的生成与访问 可以使用arange()创建一个张量:如,torch.arange(12)创建0开始的前12个整数: 除非特殊指定,否则新的张量将存放在内存中,并采用CP ...

  8. laravel框架三级联动,详细代码

    这里运用到省份表中,下面是效果图 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 需要一个省份表,里面的字段要有个pid,name这些字段 下面是控制器代码,(Cit ...

  9. 高精度------C++

    高精度运算------C++ (加减乘除) 例:ZOJ2001 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1001 The ...

  10. 2020-11-17:java中,吞吐量优先和响应时间优先的回收器是哪些?

    福哥答案2020-11-17:对于吞吐量优先的场景,就只有一种选择,就是使用 PS 组合(Parallel Scavenge+Parallel Old ).对于响应时间优先的场景,在 JDK1.8 的 ...