flutterにてSNSアプリを作成しており、firebase(firestore)に登録されているユーザー情報を取得し、
一覧(SliverGrid)に表示をしようと考えています。
【困っていること】
QuerySnapshotのデータを取得する際、
whereでusername(フィールド)を特定の条件に絞り、
orderByでcreatedAt(フィールと)を降順で指定して取得したいのですが上手くいきません。
下記のエラーが出て、リストが表示されずに困っています。
【エラー内容】
The initial orderBy() field '[[FieldPath([createdAt]), true]][0][0]' has to be the same as the where() field parameter 'FieldPath([username])' when an inequality operator is invoked. 'package:cloud_firestore/src/query.dart': Failed assertion: line 680 pos 11: 'field == orders[0][0]'
【試したこと】
下記を参考にfirebase側の複合インデックスを追加しました。
https://moimoiblog.com/programing/firebase-execute-where-orderby/
【実際のコード】
下記が実際のコードになります。
もしご存知の方がいらっしゃれば、解決方法を教えていただきたいです。
flutter
1import 'package:cloud_firestore/cloud_firestore.dart'; 2import 'package:flutter/material.dart'; 3import 'package:match_me/home/drawer.dart'; 4 5class HomePage extends StatelessWidget { 6 GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey(); 7 8 @override 9 Widget build(BuildContext context) { 10 return Scaffold( 11 key: _scaffoldKey, 12 body: StreamBuilder<QuerySnapshot>( 13 stream: FirebaseFirestore.instance 14 .collection('users') 15 .orderBy('createdAt', descending: true) 16 .where('username', isEqualTo: 'taku') //★★★★★★ここ 17 .snapshots(), 18 builder: 19 (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { 20 if (!snapshot.hasData) { 21 return Center(child: CircularProgressIndicator()); 22 } 23 return CustomScrollView( 24 slivers: <Widget>[ 25 SliverAppBar( 26 floating: true, 27 pinned: false, 28 snap: false, 29 leading: IconButton( 30 icon: Icon(Icons.menu), 31 onPressed: () async { 32 _scaffoldKey.currentState.openDrawer(); 33 }), 34 title: Text('blind match', 35 style: TextStyle( 36 color: Colors.tealAccent[400], 37 fontWeight: FontWeight.w900)), 38 elevation: 4.0, 39 forceElevated: true, 40 expandedHeight: 50, 41 automaticallyImplyLeading: false, 42 ), 43 SliverGrid( 44 gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( 45 crossAxisCount: 2, 46 ), 47 delegate: SliverChildBuilderDelegate( 48 (BuildContext context, int index) { 49 return Container( 50 alignment: Alignment.center, 51 color: Colors.teal[100 * (index % 9)], 52 child: Text(snapshot.data.docs[index]['username']), 53 ); 54 }, 55 childCount: snapshot.data.docs.length < 30 56 ? snapshot.data.docs.length 57 : 30, 58 ), 59 ), 60 ], 61 ); 62 }), 63 drawer: createDrawer(context), 64 ); 65 } 66}
あなたの回答
tips
プレビュー