Как иметь несколько потоковых провайдеров одного и того же типа данных во флаттере?

Я хочу иметь двух поставщиков потоков типа QuerySnapshot из двух разных коллекций Firebase. Когда я попытался создать двух потоковых поставщиков с одинаковым значением, один из потоковых поставщиков просто переопределил другого. Можно ли как-то различать двух поставщиков потоков с одним и тем же типом данных? Вот мой текущий код для двух провайдеров:

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider.value(value: FirestoreHelper.getClassCollectionReference(context).snapshots()),
        StreamProvider.value(value: FirestoreHelper.getTaskCollectionReference(context).snapshots()),
      ],
      

person Nathan Gong    schedule 24.07.2020    source источник


Ответы (1)


Да, выход есть всегда. Что вы можете сделать, так это создать настраиваемый класс или класс модели для любого вашего запроса, а затем сопоставить снимок, полученный из этого запроса, с настраиваемым классом.

class MySnap {
  final QuerySnapshot snapshot;
  MySnap(this.snapshot);
}

Измените любого вашего провайдера на это

StreamProvider.value(value:FirestoreHelper.getClassCollectionReference(context).snapshots().map<MySnap>((snap) => MySnap(snap)),

Для доступа к данным используйте:

var mysnap = Provider.of<MySnap>(context);
var data =  mysnap.snapshot;///This is your querysnapshot
person Jagraj Singh    schedule 24.07.2020