首页 > 其他分享 >GetX 关于报错 Null check operator used on a null value的解决

GetX 关于报错 Null check operator used on a null value的解决

时间:2023-07-11 19:33:35浏览次数:32  
标签:count used return builder list state 报错 logic null

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,才能保持数据的准确性,


 

标签:count,used,return,builder,list,state,报错,logic,null
From: https://www.cnblogs.com/liuwenqiang/p/17545727.html

相关文章

  • 不小心删除服务[null]后,git bash出现错误,如何解决?
    不小心删除服务[null]后,gitbash出现错误,如何解决?错误描述:打开gitbash、msys2都会出现错误「bash:/dev/null:Nosuchdeviceoraddress」问题定位:1.使用搜索引擎搜索「bash:/dev/null:Nosuchdeviceoraddress」,一般答案是[null]服务出现问题,可能是缺少对应的文件「C:......
  • druid报错:com.alibaba.druid.util.JdbcUtils - close connection error
    druid报错:com.alibaba.druid.util.JdbcUtils-closeconnectionerrorERRORcom.alibaba.druid.util.JdbcUtils-closeconnectionerrorjava.sql.SQLRecoverableException:IO错误:Socketreadtimedoutatoracle.jdbc.driver.T4CConnection.logoff(T4CConnect......
  • 前端Get请求传递时间参数报错
    Get请求时,传递的参数都属于字符串类型,若是这个时候后端是用Date类型接收,会出现数据类型不匹配的问题(@DateTimeFormat(pattern="yyyy-MM-dd")注解可自动将前端传来的字符串转换成时间类型,不过前端传来的长度要大于pattern设置的格式~)@DateTimeFormat(pattern="yyyy-MM-dd")......
  • SignalR 外部调用自定义Hub类的方法,Clients为null
    这是因为外部调用的类的对象和你连接的Hub类的对象,这两个对象不!一!样!解决方法在自定义的Hub类中,注入IHubContext对象,然后在方法中调用IHubContext对象来向前端推送数据publicclassDataHub:AbpCommonHub,ITransientDependency{publicIOnlineClientManag......
  • 使用input标签的时候报错,提示Form elements must have labels: Element has no title
    使用input标签的时候报错,提示Formelementsmusthavelabels:ElementhasnotitleattributeElementhasnoplaceholderattribute大概就是下面这样其实规范化一下,加个label就可以了......
  • MySQL NULL 值判断
    MySQLNULL值判断IFNULL函数IFNULL(expr1,expr2)用法:假如expr1不为NULL,则IFNULL()的返回值为expr1;否则其返回值为expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。mysql>SELECTIFNULL(1,0);->1mysql>SELECTIFNULL(NULL,10);......
  • pom.xml增加Mybatisplus的依赖后报错:Factory method 'sqlSessionFactory' threw excep
    出现上面的问题,是版本不匹配导致。<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency&......
  • nvm安装node报错Get "https://nodejs.org/dist/latest/SHASUMS256.txt": dial tcp 104
    windows上通过nvm管理node版本,在本地安装了nvm后,通过nvm安装node,报错了,信息:Couldnotretrievehttps://nodejs.org/dist/latest/SHASUMS256.txt.Gethttps://nodejs.org/dist/latest/SHASUMS256.txt:dialtcp104.20.23.46:443:i/otimeout 有了这样的信息,我......
  • sqlserver数据库执行维护计划报错
    1、https://blog.csdn.net/Wu7z_/article/details/107506710?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-107506710-blog-119634976.235%5Ev38%5Epc_relevant_default_base&depth_1-u......
  • python pandas链接mysql数据库报错
    1. ModuleNotFoundError:Nomodulenamed'mysql'需要安装链接驱动,比如 pipinstallmysqlclient#或pipinstallpymysql#或pipinstallmysql-connector-python2.pandas的 pd.read_sql(ad_first_query,conn)报错: executereturnself.connectable.executio......