Я делаю приложение с Flutter, и у меня возникают проблемы с получением данных из Firestore с StreamBuilder. Строго говоря, сами данные извлекаются, но условие фильтра, указанное в предложении where, не работает при первом отображении экрана.
Ход процесса следующий:
- Вход в систему
- Переход на экран HOME
- Данные задаются пунктом where из Firestore с логикой c экрана HOME
- Сборка и отображение экрана HOME на основе на полученную информацию
Я использую StreamBuilder с 3 по 4.
Однако, условие where по какой-то причине не работает, когда после входа в систему отображается экран HOME. первый раз после запуска приложения. После перехода к некоторому экрану, при возврате к экрану HOME снова отображаются данные, отфильтрованные по предложению where.
Я изучал по-разному, но не смог выяснить, где находится ошибка, и если есть момент, о котором я могу подумать, я был бы признателен, если бы вы могли указать на это.
child: StreamBuilder(
stream:
Firestore.instance
.collection('books')
.where('groupId', isEqualTo: groupId)
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2),
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
checkTitle.add(snapshot.data.documents[index]['title']);
return Container(
margin: EdgeInsets.all(8.0),
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
border: Border.all(
color: Colors.black38,
width: 2.0,
),
borderRadius:
BorderRadius.all(Radius.circular(10.0)),
),
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BookDetail(
book:
snapshot.data.documents[index],
cloudmsg: _firebaseMessaging,
displayName: displayName,
)));
},
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Image(
image: AdvancedNetworkImage(
snapshot.data.documents[index]['thumbnail'],
height: 120,
useDiskCache: true,
cacheRule: CacheRule(
maxAge: const Duration(days: 7)),
),
fit: BoxFit.scaleDown,
),
SpaceBox.height(4),
Text(snapshot.data.documents[index]['title'],
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 10.0,
fontStyle: FontStyle.normal,
)),
],
)),
);
},
);
}),