class - 如何在没有 initstate 的情况下使用异步值初始化 dart 类的私有(private)属性?

标签 class oop flutter dart

每次实例化此类时,我都希望调用 firebase 和 _datapoint 给定检索到的值。否则,我必须在类中的每个函数中分配数据点(参见 functionOneExample),这很容易出错。注意:我不能使用 initstate,因为这个函数不是小部件(我不需要也不想要构建方法)。如果可以,我会在 initstate 中调用 _getThis。谢谢你的帮助!!

class AsyncInitExample {
  AsyncInitExample(this.enterThis);
  String enterThis;

  String _datapoint;

  _getThis() async {
    var firebaseRetrieved = await //Firebase get this;
    this._datapoint = firebaseRetrieved;
  }

  Future<dynamic> functionOneExample {
    this._datapoint ?? await _getThis();
  }
  // etc. etc. etc.
}

最佳答案

我可以推荐一个私有(private)构造函数和一个静态方法来获取所有异步值,然后使用私有(private)构造函数返回一个对象:

class AsyncInitExample {
  AsyncInitExample._(this.enterThis, this._datapoint);
  String enterThis;

  String _datapoint;

  static Future<AsyncInitExample> getInstance(String enterThis) async {
    var firebaseRetrieved = await //Firebase get this;
    return AsyncInitExample._(enterThis, firebaseRetrieved);
  }

  String functionOneExample() => _datapoint;
  
  // etc. etc. etc.
}
通过这种方式,您只需要等待 Future来自 getInstance()在此之后,您无需等待即可访问类中的所有变量。

关于class - 如何在没有 initstate 的情况下使用异步值初始化 dart 类的私有(private)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645832/

相关文章:

c++ - 在基类中使用抽象期望它是派生类?

c++ - 为什么析构函数被调用两次而构造函数只被调用一次?

Java 使用通用基础模型创建模型

dart - 我如何在 TextSpan 中使用 'vertical-align: super'

php - (PHP) 为什么这是以下 echo 的输出?

java - Java 中用特定类代替泛型

php - 如何在方法之间共享行为

java - instanceof 是一种好的做法吗?

database - FutureBuilder和ListView.builder

flutter - 选择TextField或TextFormField时Flutter应用程序卡住