Flutterでアプリを作っていて、StreamBuilderでFirestoreから情報を取得するところで問題が発生しています。
厳密には、情報自体は取ってこれているのですが、where句で指定したフィルター条件が初回の画面表示の際には効いていません。
処理の流れとしては以下のようになっています。
- ログイン
- HOME画面に遷移
- HOME画面のロジックで、Firestoreからwhereを指定して情報取得
- 取得した情報を基にHOME画面を組み立てて表示
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, )), ], )), ); }, ); }),
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/14 02:31