我正在使用Flutter制作应用程序,但在使用StreamBuilder从Firestore获取数据时遇到问题。 严格来说,数据本身是带出的,但是第一次显示屏幕时,where子句中指定的过滤条件不起作用。
处理流程如下。
我正在使用3到4的StreamBuilder。
但是,在启动应用程序后首次登录后显示HOME屏幕时,where子句由于某些原因不起作用。 切换到某个屏幕后,再次返回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,
)),
],
)),
);
},
);
}),