diff options
Diffstat (limited to 'lib/main.dart')
-rw-r--r-- | lib/main.dart | 81 |
1 files changed, 54 insertions, 27 deletions
diff --git a/lib/main.dart b/lib/main.dart index b067b07..fa51f9e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,8 +1,12 @@ import 'package:dynamic_color/dynamic_color.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:linkchat/screens/dashboard_screen.dart'; import 'package:linkchat/screens/login_screen.dart'; +import 'package:linkchat/screens/onboarding_screen.dart'; +import 'package:linkchat/settings/preferences.dart'; +import 'package:linkchat/widgets/loading_modal_widget.dart'; import 'package:provider/provider.dart'; import 'firebase/auth.dart'; @@ -54,32 +58,55 @@ class LinkChat extends StatelessWidget { final ThemeEnum themeEnum = provider.theme; return StreamBuilder( - stream: _auth.userChanges, - builder: (context, snapshot) => - DynamicColorBuilder(builder: (lightDynamic, darkDynamic) { - provider.syncFromPrefs(); - ThemeData lightTheme = ThemeSettings.lightTheme(lightDynamic); - ThemeData darkTheme = ThemeSettings.darkTheme(darkDynamic); - ThemeData? theme; - switch (themeEnum) { - case ThemeEnum.light: - theme = lightTheme; - case ThemeEnum.dark: - theme = darkTheme; - case ThemeEnum.auto: - theme = null; - } - return MaterialApp( - theme: theme ?? lightTheme, - darkTheme: theme ?? darkTheme, - //theme: theme ?? ThemeSettings.lightTheme(lightDynamic), - //darkTheme: theme ?? ThemeSettings.darkTheme(darkDynamic), - themeMode: ThemeMode.system, - routes: getApplicationRoutes(), - home: (snapshot.hasData && !snapshot.data!.isAnonymous) - ? const DashboardScreen() - : const LoginScreen(), - ); - })); + stream: _auth.userChanges, + builder: (context, authSnapshot) => DynamicColorBuilder( + builder: (lightDynamic, darkDynamic) { + provider.syncFromPrefs(); + ThemeData lightTheme = ThemeSettings.lightTheme(lightDynamic); + ThemeData darkTheme = ThemeSettings.darkTheme(darkDynamic); + ThemeData? theme; + switch (themeEnum) { + case ThemeEnum.light: + theme = lightTheme; + case ThemeEnum.dark: + theme = darkTheme; + case ThemeEnum.auto: + theme = null; + } + return MaterialApp( + theme: theme ?? lightTheme, + darkTheme: theme ?? darkTheme, + themeMode: ThemeMode.system, + routes: getApplicationRoutes(), + home: FutureBuilder( + initialData: const LoadingModal(), + future: getHomeScreen(context, authSnapshot.data), + builder: (context, homeSnapshot) { + if (homeSnapshot.hasData) { + return homeSnapshot.data!; + } else if (homeSnapshot.hasError) { + return const LoginScreen(); + } else { + return const LoadingModal(); + } + }, + ), + ); + }, + ), + ); + } + + Future<Widget> getHomeScreen(BuildContext context, User? user) async { + if (user != null && !user.isAnonymous && user.emailVerified) { + bool showOnboarding = await Preferences.getShowOnboarding(); + if (showOnboarding) { + return const OnboardingScreen(); + } else { + return const DashboardScreen(); + } + } else { + return const LoginScreen(); + } } } |