Nathan SOULIER fff5617757 First commit
2025-03-24 10:12:56 +01:00

85 lines
1.9 KiB
Dart

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 */}
}