Flutter初心者です!
FireStoreからログインしているユーザーIDを取得し、
そのユーザーIDを使用してユーザーの情報(UsersInfo)を再度FireStoreから取得しています。
ユーザーのログイン・ログアウトの状態は、
Streamで監視できるようにしています。
下記のようにStreamでログイン状態を監視しています。
dart
1AuthApi.dart 2 3 //create user obj based on FirebaseUser 4 User _userFromFirebaseUser(FirebaseUser user) { 5 return user != null ? User(uid: user.uid) : null; 6 } 7 8 //auth change user stream 9 Stream<User> get user { 10 return _auth.onAuthStateChanged.map(_userFromFirebaseUser); 11 }
また、UsersInfoの情報もStreamで監視しようとしています。
dart
1UsersInfoApi.dart 2 3 //user_info list from snapshot 4 UsersInfo _userInfoListFromSnapshot(DocumentSnapshot document) { 5 return UsersInfo( 6 nickname: document['nickname'] as String ?? '', 7 address: document['address'] as String ?? '', 8 age: document['age'] as int ?? 0, 9 ); 10 } 11 12 //get data 13 Stream<UsersInfo> get usersInfo { 14 return usersInfoCollection 15 .document(uid) // ここでユーザーIDを使用する 16 .snapshots() 17 .map(_userInfoListFromSnapshot); 18 }
そして、main.dartにて、Userのログイン情報とUsersInfoの情報をStreamProviderで渡し、
MaterialAppの配下にあるウィジェットに情報を渡したいと思っているのですが、
その方法がわかってません。。
要するに、下記のようなことができたら嬉しいのですが、このようにはできないことはわかっております(泣)
dart
1main.dart 2 3class MyApp extends StatelessWidget { 4 5 Widget build(BuildContext context) { 6 return MultiProvider( 7 providers: [ 8 StreamProvider<User>( // ユーザーIDはこれでいいと思うのですが。。 9 create: (_) => AuthApi().user, 10 ), 11 StreamProvider<UsersInfo>( //このようなものはないのですが、できたらうれしいです。。 12 create: (_) => UsersInfoApi(uid:上から取得したユーザーID).usersInfo 13 ), 14 ], 15 child: MaterialApp( ...
現在は、ユーザーIDのみ上記方法で各ページに配布し、
各ページでStreamBuilderでUsersInfoをを取得しています。
それ以外にも、下記のような方法があると思うのですが、ユーザーがログアウトする度にMaterialAppが書き換わってもいいのでしょうか??
dart
1main.dart 2class MyApp extends StatelessWidget { 3 4 5 Widget build(BuildContext context) { 6 return MultiProvider( 7 providers: [ 8 StreamProvider<User>( 9 create: (_) => AuthApi().user, 10 ), 11 ], 12 child: Consumer<User>( 13 builder: (context, user, child) { 14 return StreamProvider<UsersInfo>( 15 create: (_) => UsersInfoApi(uid: user.uid).usersInfo, 16 child: MaterialApp( ...
また、アプリ全体ではChangeNotifierProviderで状態管理を行っているのですが、
そちらでユーザー情報も状態管理をした方がいいのでしょうか?
(やり方がわかっておらず、お手数ですが、例があると幸いです…!)
「自分はこのようにfirebaseでユーザー情報を管理してます!」という情報でも構いませんので、
ご回答、何卒よろしくお願い致します!!
あなたの回答
tips
プレビュー