【问题标题】:Static variables initialised using static variables are not updating使用静态变量初始化的静态变量不更新
【发布时间】:2021-10-28 03:10:10
【问题描述】:

如果我有一个静态变量(比如说 foo),它的值继承自另一个静态变量,然后我更改了另一个静态变量的值,然后尝试访问 foo,它仍然给出初始化时使用的旧值。

我有一个文件 endpoints.dart 包含以下代码

class EndPoints {

  static String baseUrl = "someurl.com/";

  static String place = baseUrl + "api/v1/place";

}

如果我在任何其他文件中更改 baseUrl 并像这样打印它

onPressed () {
 
 print(EndPoints.place);
 //prints someurl.com/api/v1/place

 EndPoint.baseUrl = "changedurl.com/";

 print("${EndPoints.baseUrl}");
 //prints changedurl.com/

 print("${EndPoints.place}");
  //still prints someurl.com/api/v1/place
}

我担心为什么static String place = baseUrl + "api/v1/place" 不采用更新后的baseUrl 值。

【问题讨论】:

    标签: flutter dart static-variables


    【解决方案1】:

    您更改了baseUrl 的值,但您并没有触及place。你可以尝试写一个setter:

    void setBaseUrl(String value) {
       this.baseUrl = value;
       this.place = baseUrl + "api/v1/place";
    }
    

    【讨论】:

      【解决方案2】:

      更改baseUrl 时不会重新计算静态成员place。您可以像这样定义自定义 getter 函数:

      class EndPoints {
        static String baseUrl = "someurl.com/";
        static String get place => baseUrl + "api/v1/place";
      }
      

      通过此更改,您的代码将输出带有更新值的place。另外,您的代码中有一个错字,EndPoint.baseUrl 应该是EndPoints.baseUrl

      【讨论】:

      • 解决了这个问题。谢谢 :) 我也将 baseUrl 更改为 getter 以确保安全。
      猜你喜欢
      • 2017-05-13
      • 2011-08-22
      • 2010-12-22
      • 2018-08-13
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多