Dart中如何在函数内为全局变量赋值并在其他函数中使用
Dart空安全下全局变量赋值异常解决方案
你提供的代码输出null的核心问题是没有主动执行varcheck()赋值函数,Dart中可空类型的全局变量默认初始值为null,赋值逻辑未触发的情况下读取自然得到null值。
方案1:调用赋值函数后读取(保留可空类型)
double? latitude; double? longitude; void varcheck(){ latitude=33; longitude=44; } void main() { // 先触发赋值逻辑 varcheck(); print(latitude); // 输出33.0 print(longitude); // 输出44.0 }
如果需要在其他函数中读取这两个变量,只需要确保读取前已经调用过varcheck()完成赋值即可。
方案2:使用late关键字避免可空判断
如果确定变量在使用前一定会完成赋值,可以用late修饰变量,既符合空安全规则,又不需要后续每次使用都做非空校验:
late double latitude; late double longitude; void varcheck(){ latitude=33; longitude=44; } void main() { varcheck(); print(latitude); print(longitude); }
注意事项
late修饰的变量如果在首次读取前没有完成赋值,运行时会抛出LateInitializationError异常,需要保证赋值逻辑的执行顺序优先于读取逻辑。- 全局变量本身为全局作用域,只要完成赋值,所有函数中都可以直接读取到更新后的值,不需要额外的参数传递。
内容的提问来源于stack exchange,提问作者Rasool Zada
相关产品推荐
相关产品推荐

