Flutter使用GetX、GetStorage时调用isNull getter报空对象错误如何解决
错误产生原因
发生异常:NoSuchMethodError (NoSuchMethodError: The getter 'isNull' was called on null.
Receiver: null
Tried calling: isNull)
该错误的核心逻辑如下:
isNull是GetX为DartObject类型提供的扩展getter,仅当调用目标为非空的对象实例时才能正常访问- 当从GetStorage读取不存在的key时,
read()方法直接返回原生的null值,对原生null调用任何属性、方法都会抛出该异常,扩展方法对原生null不生效。
修复方案
方案1:使用Dart原生判空语法(最推荐,无依赖)
直接用== null判断,不需要依赖任何扩展能力,不会出错:
TextButton( onPressed: () { var _variable = userStorage.read('variable'); print('_variable = $_variable'); if(_variable == null){ // 变量为空时执行对应逻辑 } else{ // 变量非空时执行对应逻辑 } }, child: Obx(() => (Text( 'variable value='+controller.variable.value, ) ) ) )
方案2:结合空安全调用符使用GetX扩展
如果要保留isNull的写法,需要加空安全调用符?,并配合空合并运算符??处理null场景:
if(_variable?.isNull ?? true){ // 变量为空时执行对应逻辑 }
逻辑说明:如果_variable为null,_variable?.isNull返回null,经过?? true处理后最终返回true,符合为空的判断逻辑。
方案3:读取时直接指定默认值(适合有默认值场景)
从GetStorage读取时就指定默认值,避免后续出现null:
// 举例:如果变量是字符串类型,默认值设为空字符串 var _variable = userStorage.read('variable') ?? ''; if(_variable.isEmpty){ // 为空逻辑 }
内容的提问来源于stack exchange,提问作者vivek shirodkar
相关产品推荐
相关产品推荐

