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

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

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

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

Flutter

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

Cloud Firestore

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

Q&A

解決済

1回答

1275閲覧

firestoreから値を取得できない(riverpod)

su_da221

総合スコア59

Firebase

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

Flutter

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

Cloud Firestore

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

0グッド

0クリップ

投稿2022/09/29 01:47

前提

Twitterのデモアプリを練習で作成しています。
フォロー機能を実装中に値が取得できないことで詰まりました。

riverpodのStreamProviderに引数を持たせて特定のユーザーのフォロワー数などを取得したいです。

firestoreの階層
followers/uid(訪れたユーザー)/Followers/uid(フォローしてくれてるユーザー)

実現したいこと

・フォロワー数の獲得

発生している問題・エラーメッセージ

値が取れない。
たまに下記のエラーが出てくるがリロードすると治る
このエラーが何を示しているのか不明(検索したけどヒットせず)

_TypeError (type 'AutoDisposeStreamProviderFamily<QuerySnapshot<Object?>, String>' is not a subtype of type 'AutoDisposeStreamProvider<QuerySnapshot<Map<String, dynamic>>>' of 'function result')

日本語訳は下記

型 'AutoDisposeStreamProvider<QuerySnapshot<Map<String, dynamic>>>' は、'関数結果' の型 'AutoDisposeStreamProviderFamily<QuerySnapshot<Map<String, dynamic>>, String>' のサブタイプではありません

該当のソースコード

dart

1final followerStateProvider = 2 StreamProvider.autoDispose.family((ref, String uid) { 3 return FirebaseFirestore.instance.collection('followers').doc(uid).collection('Followers').snapshots(); 4}); 5});

他の書き方も試している
これは階層を一つ上にしているけどこれも取得できない

dart

1final testProvider = 2 StreamProvider.autoDispose.family<QuerySnapshot, String>((ref, uid) { 3 return FirebaseFirestore.instance.collection('followers').snapshots(); 4});

view

dart

1class FollowText extends ConsumerWidget { 2 final String uid; 3 // ignore: non_constant_identifier_names 4 final bool is_followes; // フォロワー表示かフォロー数表示 5 // ignore: non_constant_identifier_names 6 const FollowText({super.key, required this.uid, required this.is_followes}); 7 8 9 Widget build(BuildContext context, WidgetRef ref) { 10 final streamFollowQuery = ref.watch(followingStateProvider(uid)); 11 final streamFollowerQuery = ref.watch(followerStateProvider(uid)); 12 13 // final streamTest = ref.watch(testProvider(uid)); 14 final streamTest = ref.watch(testProvider); 15 16 print('フォロー数字:$uid'); 17 print('フォロー:$streamTest'); 18 19 return streamTest.when(data: (QuerySnapshot snapshot) { 20 if (snapshot.size > 0) { 21 final int followingNun = snapshot.size; 22 return Text(snapshot.docs[0].id); 23 } 24 return Text('取得できていない'); 25 // return followTextWidget( 26 // followerNun: followingNun, 27 // is_followes: is_followes, 28 // ); 29 }, error: ((error, stackTrace) { 30 return followTextWidget( 31 followerNun: 00, 32 is_followes: is_followes, 33 ); 34 }), loading: (() { 35 return followTextWidget( 36 followerNun: 0000, 37 is_followes: is_followes, 38 ); 39 })); 40} 41...

試したこと

諸々を調べて試しているが改善できず根本で間違えているのかと投稿しました。

補足情報(FW/ツールのバージョンなど)

flutter 3.0

cloud_firestore: ^3.4.7
flutter_riverpod: ^1.0.4

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

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

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

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

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

guest

回答1

0

自己解決

自己解決です。
理由はわからないのですが、

dart

1 2// 現在のフォローしている人情報を監視 3final followingStateProvider = 4 StreamProvider.autoDispose.family<QuerySnapshot, String>((ref, uid) { 5 return ref.read(followingRef).doc(uid).collection('Following').snapshots(); 6}); 7 8// 現在のフォロワー情報を監視 9final followerStateProvider = 10 StreamProvider.autoDispose.family<QuerySnapshot, String>((ref, uid) { 11 return ref.read(followerRef).doc(uid).collection('Followers').snapshots(); 12});

でできました。。

投稿2022/09/29 03:54

su_da221

総合スコア59

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問