import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../data/sources/localiser/realtime_data_client.dart'; import '../../data/sources/localiser/session_client.dart'; import '../../providers.dart'; class StartupScreen extends ConsumerStatefulWidget { const StartupScreen({super.key}); @override ConsumerState createState() => _StartupScreenState(); } class _StartupScreenState extends ConsumerState { @override void initState() { super.initState(); _bootstrap(); } Future _bootstrap() async { final store = ref.read(credentialStoreProvider); final config = await store.loadServer(); if (!mounted) return; if (config == null) { context.go('/connect'); return; } final creds = await store.load(); if (!mounted) return; if (creds == null) { context.go('/connect'); return; } try { final tokenResponse = await SessionClient(config: config).login(creds.username, creds.password); if (!mounted) return; final token = tokenResponse.token; ref.read(serverConfigProvider.notifier).state = config; ref.read(authTokenProvider.notifier).state = token; final realtime = RealtimeDataClient(config: config, token: token); await realtime.connect(); if (!mounted) return; ref.read(realtimeDataClientProvider.notifier).state = realtime; context.go('/floorplan'); } catch (_) { if (mounted) context.go('/connect'); } } @override Widget build(BuildContext context) { return const Scaffold( body: Center(child: CircularProgressIndicator()), ); } }