Flutter 静态属性不更新问题 2022-12-05 周一

2022-12-05  本文已影响0人  勇往直前888

问题举例

static List genderList = [
        {
          'name': 'Male'.tr,
          'id': 0,
          'select': false,
          'disable': false,
        },
        {
          'name': 'Female'.tr,
          'id': 1,
          'select': false,
          'disable': false,
        },
      ];

上面这段代码,逻辑上是没有问题的。name字段,取值加了个.tr后缀,是Gets多语言加上去的。id字段用来操作,值固定。name字段用来显示,语言切换的的时候,内容需要改变。
但是,实际上,这段代码的name字段会固定不变。并不能跟随语言变化而变化。

原因推测

数组是引用类型,静态变量genderList在第一次创建的时候,会执行类似'Male'.tr之类的函数,把结果,比如填进去。这样的话,整个数组就是一个常量了。这样能提高效率。
下次访问genderList时候,不会再执行函数了,直接返回函数执行的结果()。
这样导致的问题,就是静态变量一旦赋值,将不会更新。
当然,给genderList重新赋值会重新计算的。但是,内部子字段的变化是不会生效的。
这种行为,是Dart语言本身的缺陷。

怎么解决?

可以考虑用get属性代替

static List get genderList => [
        {
          'name': 'Male'.tr,
          'id': 0,
          'select': false,
          'disable': false,
        },
        {
          'name': 'Female'.tr,
          'id': 1,
          'select': false,
          'disable': false,
        },
      ];

这样的话,跟静态变量使用的方式一致,但是get属性本质上函数,每次都会重新执行,重新计算,从而也就能够及时更新了。当然,相对地,效率会稍微差一点。

如何选择?

上一篇下一篇

猜你喜欢

热点阅读