前提・実現したいこと
現在、Flutter+Firebaseを利用してアプリ開発について学習を行っています。
ログイン機能の一貫として以下の機能を実装したいと考えています。
- 初回ログイン時のみ、ログインページに遷移しログインを行う
- ログアウトしない限り、アプリを終了した後にアプリを開いてもログインページに遷移しない
自分なりにいくつか調べ、それらを試したのですがそもそもログインページに遷移しませんでした。
試したコードは以下mainコードです。
具体的な方法としてどのように行うことで以上の機能を実装することができるのでしょうか?
また、現在FirebaseのEmailとPasswordを利用した機能を実装しているのですが、GoogleログインやFacebookログインの場合でも以上の機能を実装する際には共通の方法なのでしょうか?
Flutter初学者なのでわからないことだらけですがご教授いただけると幸いです。
現在実装しているもの
- FirebaseAuthを利用したログイン機能
- FirebaseCloudStoreを利用したデータベース
試したこと
- FirebaseAuthのCurrentUserを利用したログイン状態の確認
補足情報(FW/ツールのバージョンなど)
使用したもの
- FirebaseAuth
- FirebaseCloudStore
main
1class MyApp extends StatelessWidget { 2 // This widget is the root of your application. 3 4 final UserState user = UserState(); 5 6 @override 7 Widget build(BuildContext context) { 8 return ChangeNotifierProvider<UserState>.value( 9 value: user, 10 child: MaterialApp( 11 //デバックラベル非表示 12 debugShowCheckedModeBanner: false, 13 title: 'Flutter Demo', 14 theme: ThemeData( 15 primarySwatch: Colors.blue, 16 visualDensity: VisualDensity.adaptivePlatformDensity, 17 ), 18 home: LoginPage(), 19 initialRoute: "/", 20 routes:<String, WidgetBuilder>{ 21// "/": (BuildContext context) => LoginPage(), 22 AddRecord.routeName: (BuildContext context) => AddRecord(), 23 "/login":(BuildContext context) => LoginPage(), 24 "/home":(BuildContext context) => PageManager() 25 }, 26 ) 27 ); 28 } 29} 30 31class LoginCheck extends StatefulWidget{ 32 LoginCheck({Key key}) : super(key: key); 33 34 @override 35 _LoginCheckState createState() => _LoginCheckState(); 36 37} 38 39class _LoginCheckState extends State<LoginCheck>{ 40 41 @override 42 void initState(){ 43 super.initState(); 44 checkUser(); 45 46 // TODO: implement initState 47 48 49 } 50 void checkUser() async{ 51 final UserState userState = Provider.of<UserState>(context); 52 final currentUser = await FirebaseAuth.instance.currentUser(); 53 print(currentUser); 54 if(currentUser == null){ 55 Navigator.pushReplacementNamed(context,"/login"); 56 }else{ 57 userState.setUser(currentUser); 58 Navigator.pushReplacementNamed(context, "/home"); 59 } 60 } 61 @override 62 Widget build(BuildContext context) { 63 // TODO: implement build 64 return Scaffold( 65 body: Center( 66 child: Container( 67 child: Text("Loading..."), 68 ), 69 ), 70 ); 71 } 72}
あなたの回答
tips
プレビュー