From 475b1d0bc12ef51df76ab004f92f48abfe86aefd Mon Sep 17 00:00:00 2001 From: AYM1607 Date: Sat, 9 Mar 2019 20:57:43 -0600 Subject: [PATCH] Implemented mechanism of redirecting on user status --- lib/src/App.dart | 2 +- lib/src/resources/authService.dart | 4 +++ lib/src/screens/initial_loading_screen.dart | 27 +++++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/src/App.dart b/lib/src/App.dart index b862d3c..f6d3e74 100644 --- a/lib/src/App.dart +++ b/lib/src/App.dart @@ -19,7 +19,7 @@ class App extends StatelessWidget { Route routes(RouteSettings settings) { final List routeTokens = settings.name.split('/'); - + print(routeTokens); if (settings.name == '/') { return MaterialPageRoute( builder: (BuildContext context) { diff --git a/lib/src/resources/authService.dart b/lib/src/resources/authService.dart index 2e4d4b9..2e93228 100644 --- a/lib/src/resources/authService.dart +++ b/lib/src/resources/authService.dart @@ -7,12 +7,16 @@ import './google_sign_in_provider.dart'; import '../models/summary_model.dart'; import '../models/user_model.dart'; +export './google_sign_in_provider.dart' show FirebaseUser; + class AuthService { final GoogleSignInProvider _googleSignInProvider = signInProvider; final FirestoreProvider _firestoreProvider = firestoreProvider; final _user = BehaviorSubject(); Observable get userStream => _user.stream; + Future get currentUser => + _googleSignInProvider.getCurrentUser(); AuthService() { _googleSignInProvider.onAuthStateChange.pipe(_user); diff --git a/lib/src/screens/initial_loading_screen.dart b/lib/src/screens/initial_loading_screen.dart index a7d49a1..81f3537 100644 --- a/lib/src/screens/initial_loading_screen.dart +++ b/lib/src/screens/initial_loading_screen.dart @@ -1,13 +1,36 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import '../resources/authService.dart'; + class InitialLoadingScreen extends StatelessWidget { + final AuthService _auth = authService; + + void redirectUser(BuildContext context) async { + final user = await _auth.currentUser; + final routeToBePushed = user == null ? 'login/' : 'home/'; + Navigator.of(context).pushReplacementNamed(routeToBePushed); + } + Widget build(BuildContext context) { return Scaffold( body: Container( color: Theme.of(context).canvasColor, - child: Center( - child: CupertinoActivityIndicator(), + child: FutureBuilder( + future: Future.delayed( + Duration(seconds: 2), + () => 'Done', + ), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasData) { + redirectUser(context); + } + return Center( + child: CupertinoActivityIndicator(), + ); + }, ), ), );