Dart中全局变量未同步更新的原因及非状态管理解决方案
问题解析与解决方案
你的理解有误,实际原理是这样的
全局变量的初始化只会在程序启动时执行一次。value1 = "$value efgh"这行代码在程序启动时,会把当时value的值(也就是"abcd")和"efgh"拼接成固定字符串"abcd efgh",然后将这个结果赋值给value1。之后修改value的值,只是改变了value自身存储的内容,但value1已经是一个独立的、存储着固定字符串的变量,不会自动重新计算。这和final变量的特性完全无关——final是限制变量不能被重新赋值,而这里value1可以被手动重新赋值,只是它不会主动跟着value的变化更新而已。
无需setState/状态管理的更新方法
如果想让value1始终和value保持关联,不用状态管理的话,可以把value1改成getter方法,这样每次访问value1时都会实时计算最新的拼接结果:
String value = "abcd"; String get value1 => "$value efgh"; // 用getter替代直接赋值 void main() { print(value); print(value1); // 输出 abcd efgh value = "Zxy"; print(value); print(value1); // 输出 Zxy efgh }
这样每次调用value1时,都会用当前的value值重新拼接字符串,自然就能实现同步更新。
内容的提问来源于stack exchange,提问作者Flutter
相关产品推荐
相关产品推荐

