質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Q&A

0回答

1337閲覧

【flutter】QuerySnapshotの条件指定について(複合インデックスについて)

OSARU_2020

総合スコア15

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

0グッド

0クリップ

投稿2021/10/09 13:46

編集2021/10/10 15:31

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問