You've already forked flutter-rp-example
First commit
This commit is contained in:
84
lib/router/router.dart
Normal file
84
lib/router/router.dart
Normal file
@@ -0,0 +1,84 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../services/auth/auth.dart';
|
||||
import '../pages/home.dart';
|
||||
import '../pages/splash.dart';
|
||||
import '../pages/login.dart';
|
||||
|
||||
class ReflexRouterDelegate extends RouterDelegate
|
||||
with ChangeNotifier, PopNavigatorRouterDelegateMixin {
|
||||
@override
|
||||
GlobalKey<NavigatorState> get navigatorKey => _navigatorKey;
|
||||
final GlobalKey<NavigatorState> _navigatorKey;
|
||||
|
||||
bool? _loggedIn;
|
||||
bool? get loggedIn => _loggedIn;
|
||||
set loggedIn(value) {
|
||||
_loggedIn = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
final AuthService authService;
|
||||
|
||||
ReflexRouterDelegate(this.authService)
|
||||
: _navigatorKey = GlobalKey<NavigatorState>() {
|
||||
_init();
|
||||
}
|
||||
|
||||
_init() async {
|
||||
try {
|
||||
await authService.init();
|
||||
loggedIn = await authService.isLoggedIn();
|
||||
} catch (e) {
|
||||
showDialog(
|
||||
context: navigatorKey.currentContext!,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text('Error'),
|
||||
content: Text('Error: $e'),
|
||||
),
|
||||
);
|
||||
loggedIn = false;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Page> stack;
|
||||
if (loggedIn == null) {
|
||||
stack = _splashStack;
|
||||
} else if (loggedIn!) {
|
||||
stack = _loggedInStack;
|
||||
} else {
|
||||
stack = _loggedOutStack;
|
||||
}
|
||||
return WillPopScope(
|
||||
onWillPop: () async => !await navigatorKey.currentState!.maybePop(),
|
||||
child: Navigator(
|
||||
key: navigatorKey,
|
||||
pages: stack,
|
||||
onPopPage: (route, result) {
|
||||
if (!route.didPop(result)) return false;
|
||||
return true;
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
List<Page> get _splashStack => [const SplashPage()];
|
||||
|
||||
List<Page> get _loggedOutStack => [
|
||||
LoginPage(onLogin: () {
|
||||
loggedIn = true;
|
||||
})
|
||||
];
|
||||
|
||||
List<Page> get _loggedInStack {
|
||||
return [
|
||||
HomePage(onLogout: () {
|
||||
loggedIn = false;
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setNewRoutePath(configuration) async {/* Do Nothing */}
|
||||
}
|
||||
Reference in New Issue
Block a user