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

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

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

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

Flutter

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

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Q&A

解決済

1回答

4085閲覧

【flutter】 firebase documentIDにUIDを含めてデータを取得したい

kimidoro

総合スコア11

Firebase

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

Flutter

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

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

0グッド

0クリップ

投稿2021/06/19 08:27

編集2021/06/19 14:09

問題点

サインアップ時にfirebaseでuidをdocumentIDとして保存し、ログインしたユーザーのuidを用いてデータを取得したい。

currentUserなどを使ってuidを取得し、検索に用いたいのですが、うまくいきませんでした。

ご教授お願いいたします。


dart

1 2class TimerModel extends ChangeNotifier{ 3 4 List<Time> timeList = []; 5 String Uid = ''; 6 7 Future getUid(){ 8 final snapshot = FirebaseAuth.instance.currentUser; 9 this.Uid = snapshot.uid; 10 } 11 12 Future gettimerList() async { 13 14 final snapshot = 15 await FirebaseFirestore 16 .instance 17 .collection('users') 18 .doc(Uid) 19 .collection('timer') 20 .get(); 21 final docs = snapshot.docs; 22 final timeList = docs.map((doc) => Time(doc)).toList(); 23 this.timeList = timeList; 24 25 notifyListeners(); 26 27 } 28 29 Future getTeaListRealtime() async { 30 31 final snapshots = 32 await FirebaseFirestore 33 .instance 34 .collection('users') 35 .doc(Uid) 36 .collection('timer') 37 .snapshots(); 38 snapshots.listen((snapshot){ 39 final docs = snapshot.docs; 40 final timeList = docs.map((doc) => Time(doc)).toList(); 41 this.timeList = timeList; 42 notifyListeners(); 43 }); 44 } 45}

dart

1class TimerList extends StatelessWidget { 2 3 Widget build(BuildContext context) { 4 5 return Consumer<TimerModel>(builder: (context, model, child) { 6 model.getUid(); 7 return Scaffold( 8 appBar: AppBar( 9 title: Text('タイマーリスト'), 10 centerTitle: true, 11 actions: [ 12 InkWell( 13 onTap: ()async{ 14 print(model.Uid); ※ここでuidを出力できました。 15 }, 16 child: Icon(Icons.favorite_border, 17 ), 18 ) 19 ], 20 ), 21 body:Consumer<TimerModel>(builder: (context, model, child) { 22 final timerList = model.timeList; 23 return ListView( 24 children: timerList 25 .map( 26 (timelist) => Card( 27 child: Center( 28 child:Text(timelist.title, 29 ), 30 ), 31 ), 32 ).toList(), 33 ); 34 }), 35 ); 36 } 37 ); 38 } 39}

dart

1class Time { 2 3 Time(DocumentSnapshot doc){ 4 this.time = doc['time']; 5 this.title = doc['title']; 6 } 7 String time; 8 String title; 9}

イメージ説明]
イメージ説明
usersのdocumentIDはuidです。

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

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

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

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

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

flutter_labo

2021/06/19 13:13

データの取得ができないとのことですが、そもそもfirestoreへのデータ追加はできていますか? また、getUid()内のFirebaseAuth.instance.currentUser.uidで、ログイン中のuserのuidを取得することはできていますか?一度printして確かめてみてください。(一応補足ですが、FirebaseAuth.instance. currentUserはFutureではないはずなので、awaitしなくてもいいと思います)
guest

回答1

0

ベストアンサー

ドキュメントidって自動生成されるので指定はできなかったと思います。下記の様にしてはどうですか?

データを挿入時

dart

1FirebaseFirestore.instance.collection('users').doc().set({"uid" : uid}); 2

データを取得時

dart

1FirebaseFirestore.instance.collection('users').where("uid", isEqualTo: uid).get();

投稿2021/06/19 12:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/06/19 13:17

えっまじっすか
退会済みユーザー

退会済みユーザー

2021/06/19 13:23

ではデータの追加部分のコードの記載がないので、そこでなんかミスってそうですね。
flutter_labo

2021/06/19 13:33

僕もそう思いました。 あと、ログイン中のユーザーのuidを取得するコードが動いているかどうかも結構怪しいですし、現段階で原因を特定するのは難しそうですね。
flutter_labo

2021/06/19 14:05

なるほど。getUid()をfirestoreからのデータ取得前に発火させていない可能性もあるっちゃありますが、基本的にはuidの取得は出来てそうですね!
kimidoro

2021/06/19 14:13

返信ありがとうございます。 getuidを発火させていませんでした。すみません 確認してみます。
kimidoro

2021/06/19 14:31

上記のようなプログラムで取得したいのですが、getUidをアプリを起動したときに発火させることはできるのでしょうか?
flutter_labo

2021/06/19 14:50 編集

変数宣言の部分で、String uid = FirebaseAuth.instance.currentUser.uid;とすればいいと思いますよ
退会済みユーザー

退会済みユーザー

2021/06/20 01:53

結局getUid呼んでないのが原因でした?
kimidoro

2021/06/20 11:49

そうですね。 お二人ともありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問