инициализировать переменную с помощью сетевого вызова в конструкторе в Dart - PullRequest
0 голосов
/ 03 февраля 2020

Я не совсем уверен, как сконструировать мой конструктор для класса dart, который будет инициализировать переменную моего экземпляра. Мне нужно инициализировать мою переменную _desserts с помощью сетевого вызова firestore при создании объекта

class DessertDataSource extends DataTableSource {


  final List<Dessert> _desserts;

  DessertDataSource(this._desserts);



  Future<List<Dessert>> getData() async{
    await Firestore.instance.collection("desserts").getDocuments()
        .then((QuerySnapshot snapshot) {
      return snapshot.documents.forEach((doc) =>{
        _desserts.add(Dessert.fromSnapshot(doc))
      });
    });
  }
}

1 Ответ

4 голосов
/ 03 февраля 2020

Конструкторы в Dart не могут быть асинхронными.

Если вы хотите создать объект асинхронно, сделайте вместо него функцию stati c:

class DessertDataSource extends DataTableSource {
  final List<Dessert> _desserts;
  DessertDataSource._(this._desserts);

  static Future<DessertDataSource> create() async {
    var snapshot = 
        await Firestore.instance.collection("desserts").getDocuments();
    return DessertDataSource._(
        [for (var doc in snapshot.documents) Dessert.fromSnapshot(doc)]);
  }
}

Затем вы можете вызвать его как await DessertDataSource.create().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...