From 5430898e02afc95c24a3caf6a91bb82e71b6ab33 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Sat, 3 Jun 2023 23:46:30 -0600 Subject: Fixed auth persistence --- lib/firebase/auth.dart | 2 ++ lib/main.dart | 23 ++++++++++++++++------- lib/screens/dashboard_screen.dart | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/firebase/auth.dart b/lib/firebase/auth.dart index 791e69a..8377d18 100644 --- a/lib/firebase/auth.dart +++ b/lib/firebase/auth.dart @@ -7,6 +7,8 @@ class Auth { User? get currentUser => _auth.currentUser; + Stream get userChanges => _auth.userChanges(); + Future createUserWithEmailAndPassword({ required String email, required String password, diff --git a/lib/main.dart b/lib/main.dart index a174aaa..041ab7f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,12 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; +import 'package:pmsna1/firebase/auth.dart'; import 'package:pmsna1/providers/events_provider.dart'; import 'package:pmsna1/providers/flags_provider.dart'; import 'package:pmsna1/providers/theme_provider.dart'; import 'package:pmsna1/routes.dart'; +import 'package:pmsna1/screens/dashboard_screen.dart'; +import 'package:pmsna1/screens/login_screen.dart'; import 'package:pmsna1/settings/themes.dart'; import 'package:provider/provider.dart'; @@ -50,12 +53,18 @@ class PMSNA1 extends StatelessWidget { final ThemeProvider provider = context.watch(); final ThemeData? theme = provider.theme; provider.syncFromPrefs(); - return MaterialApp( - theme: theme ?? ThemeSettings.lightTheme, - darkTheme: theme ?? ThemeSettings.darkTheme, - themeMode: ThemeMode.system, - routes: getApplicationRoutes(), - initialRoute: '/login', - ); + return StreamBuilder( + stream: Auth().userChanges, + builder: (context, snapshot) { + return MaterialApp( + theme: theme ?? ThemeSettings.lightTheme, + darkTheme: theme ?? ThemeSettings.darkTheme, + themeMode: ThemeMode.system, + routes: getApplicationRoutes(), + home: snapshot.data != null && !snapshot.data!.isAnonymous + ? const DashboardScreen() + : const LoginScreen(), + ); + }); } } diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index b267c20..9b81bc1 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -120,7 +120,7 @@ class _DashboardScreenState extends State { void signOut(BuildContext context) { _auth.signOut().then((success) { if (success) { - Navigator.of(context).popUntil(ModalRoute.withName('/login')); + Navigator.of(context).pushReplacementNamed('/login'); } }); } -- cgit v1.2.3