aboutsummaryrefslogtreecommitdiff
path: root/lib/main.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/main.dart')
-rw-r--r--lib/main.dart81
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();
+ }
}
}