fix: separate server setup page, fix already-logged-in precondition error
This commit is contained in:
+17
-3
@@ -2,6 +2,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:pyramid/features/auth/login_notifier.dart';
|
||||
import 'package:pyramid/features/auth/login_page.dart';
|
||||
import 'package:pyramid/features/auth/server_page.dart';
|
||||
import 'package:pyramid/features/chat/chat_page.dart';
|
||||
import 'package:pyramid/features/rooms/rooms_page.dart';
|
||||
import 'package:pyramid/features/settings/settings_page.dart';
|
||||
@@ -9,16 +10,29 @@ import 'package:pyramid/layout/shell_page.dart';
|
||||
|
||||
final routerProvider = Provider<GoRouter>((ref) {
|
||||
final isLoggedIn = ref.watch(isLoggedInProvider);
|
||||
final homeserverAsync = ref.watch(homeserverProvider);
|
||||
final hasServer = homeserverAsync.valueOrNull != null;
|
||||
|
||||
return GoRouter(
|
||||
initialLocation: '/rooms',
|
||||
redirect: (context, state) {
|
||||
final loggingIn = state.matchedLocation == '/login';
|
||||
if (!isLoggedIn && !loggingIn) return '/login';
|
||||
if (isLoggedIn && loggingIn) return '/rooms';
|
||||
final loc = state.matchedLocation;
|
||||
final onAuth = loc == '/login' || loc == '/server';
|
||||
|
||||
if (!isLoggedIn) {
|
||||
if (!hasServer && loc != '/server') return '/server';
|
||||
if (hasServer && loc != '/login' && !onAuth) return '/login';
|
||||
return null;
|
||||
}
|
||||
|
||||
if (isLoggedIn && onAuth) return '/rooms';
|
||||
return null;
|
||||
},
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: '/server',
|
||||
builder: (context, state) => const ServerPage(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/login',
|
||||
builder: (context, state) => const LoginPage(),
|
||||
|
||||
Reference in New Issue
Block a user