#flutter #dart
#флаттер #дротик
Вопрос:
У меня есть два потока, и я объединил их следующим образом:
Stream<List<QuerySnapshot>> getData() {
Stream stream1 = Firestore.instance.collection('datestoremember').document('default').collection('Dates_to_Remember').snapshots();
Stream stream2 = Firestore.instance.collection('datestoremember').document('Ngrx54m84JbsL0tGvrBeKCBlEnm2').collection('Dates_to_Remember').snapshots();
return StreamZip([stream1, stream2]);
}
Затем я попытался объединить два потока в построителе потоков, но результатом является только один набор значений. Если я изменю имя потока 1 на поток 2 и наоборот, тогда отобразится другой набор значений, что наводит меня на мысль, что при слиянии двух потоков здесь возникает проблема:
child: StreamBuilder(
stream: getData(),
builder: (BuildContext context, AsyncSnapshot<List<QuerySnapshot>> snapshot1) {
List<QuerySnapshot> querySnapshotData = snapshot1.data.toList();
querySnapshotData[0].documents.addAll(querySnapshotData[1].documents);
Затем я продолжаю использовать этот querySnapshotData следующим образом:
if (querySnapshotData[0].documents.isEmpty)
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Center(
child: CircularProgressIndicator(),
)
],
);
if (querySnapshotData[0].documents.length == 0)
return const Center(
child: Text(
"Not Available",
style: TextStyle(fontSize: 30.0, color: Colors.grey),
),
);
return new PageView.builder(
itemCount: querySnapshotData[0].documents.length,
controller: PageController(viewportFraction: 0.5),
onPageChanged: (int index) => setState(() => _index = index),
itemBuilder: (_, i) {
return Transform.scale(
scale: i == _index ? 1 : 0.5,
child: Card(
elevation: 6,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10)),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(querySnapshotData[0].documents[i]['Date'].toDate().day.toString()),
Text(DateFormat.MMMM()
.format(
formatter.parse(querySnapshotData[0].documents[i]['Date'].toDate().toString()))
.toString()),
Padding(
padding: const EdgeInsets.only(
left: 8.0, right: 8.0),
child: FittedBox(
fit: BoxFit.contain,
child: Text(
querySnapshotData[0].documents[i]['Title'],
overflow: TextOverflow.ellipsis,
),
),
)
],
),
),
);
},
);},
Комментарии:
1. Создайте переменный stream1 = await Firestore.instance.collection в первом.
2. Я добавил await и преобразовал getData в Future, но теперь я получаю ошибку в stream: getData(), в которой говорится, что тип аргумента ‘Future<Stream<List<QuerySnapshot>>>’ не может быть присвоен типу параметра ‘Stream<List<QuerySnapshot>>’.