【问题标题】:Variable in class not updating when changing value更改值时类中的变量不更新
【发布时间】:2020-05-05 08:57:53
【问题描述】:

我有一个名为number 的变量和一个在其构造函数中将变量设置为number 的类。然后我更改了number 的值,但类中的number 没有更新。这是我的代码:

void fn1() {
  int number = 5;
  SomeClass someClass = SomeClass(number);
  // Do some other things which take a long time
  number = 2;
  someClass.printer(); // prints 5. expect 2
}

class SomeClass {
  int nestedNum;

  SomeClass(this.nestedNum) {
    printer();
  }

  void printer() {
    print(nestedNum);
  }
}

如何让nestedNum 随时​​更新number

因此,hacky/easy 解决方案将是任何时候我在fn1 中更改number,我需要在someClass 中更改nestedNum:就像这样:someClass.nestedNum = 2。这样做的问题是,如果我有多个类,我将不得不通过每个类来更改变量。

我想到的另一个解决方案是永远不要将number 传递给someClass,而是传递this 并使用this 访问number。问题又来了,如果我有多个类,每个类都需要从 fn1 访问不同的变量。

【问题讨论】:

    标签: class flutter dart constructor


    【解决方案1】:

    number 改变时nestedNum 改变的唯一方法是让nestedNumnumber 中读取。 Dart 不允许传递变量的引用或指针。您可以做的是将一个函数传递给SomeClass,它会在每次需要时提供该值。

    void fn1() {
      int number = 5;
      SomeClass someClass = SomeClass(() => number);
      // Do some other things which take a long time
      number = 2;
      someClass.printer(); // prints 2!
    }
    
    class SomeClass {
      final int Function() _nestedNum;
      int get nestedNum => _nestedNum();
    
      SomeClass(int Function() nestedNum) : _nestedNum = nestedNum {
        printer();
      }
    
      void printer() {
        print(nestedNum);
      }
    }
    

    【讨论】:

    • 谢谢!! : _nestedNum = nestedNum 在构造函数声明之后的这部分是什么?
    • 这只是将nestedNum 参数存储在_nestedNum 字段中。你可以改用SomeClass(this._nestedNum);,但我只是更喜欢没有带有私有名称的参数,甚至没有位置参数。
    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2020-05-04
    • 2015-01-17
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多