feat(flutter): GoRouter shell + version gate + auth-aware redirects

Cold launch flow: no server-url -> /server-url. URL set, no token ->
/login. Token present -> /home with shell. VersionGate runs once when
the URL changes, hits /healthz, blocks if min_client_version > package
version. /home is a placeholder until Task 14.

Replaces Navigator.pushReplacementNamed in server_url_screen +
login_screen with context.go now that go_router owns the routes.
This commit is contained in:
2026-05-02 17:24:08 -04:00
parent 9cbbfcff6c
commit d115c267f4
6 changed files with 144 additions and 13 deletions
@@ -1,6 +1,7 @@
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import '../api/endpoints/health.dart';
import '../theme/theme_extension.dart';
@@ -36,7 +37,7 @@ class _ServerUrlScreenState extends ConsumerState<ServerUrlScreen> {
}
await ref.read(authControllerProvider.notifier).setServerUrl(url);
if (!mounted) return;
Navigator.of(context).pushReplacementNamed('/login');
context.go('/login');
} on DioException catch (_) {
setState(() => _error = "Couldn't reach that server.");
} catch (_) {