import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'config/theme.dart'; import 'services/api_service.dart'; import 'services/background_service.dart'; import 'screens/login_screen.dart'; import 'screens/apps_screen.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); const storage = FlutterSecureStorage(); final savedUrl = await storage.read(key: 'server_url'); final savedToken = await storage.read(key: 'auth_token'); final api = ApiService(baseUrl: savedUrl ?? 'https://localhost'); if (savedToken != null) { api.setToken(savedToken); } final bgService = BackgroundService(); await bgService.initialize(); await bgService.schedulePeriodicCheck(); runApp(UpdateForgeApp(api: api, hasToken: savedToken != null)); } class UpdateForgeApp extends HookWidget { final ApiService api; final bool hasToken; const UpdateForgeApp({super.key, required this.api, required this.hasToken}); @override Widget build(BuildContext context) { final loggedIn = useState(hasToken && api.isAuthenticated); Future saveCredentials() async { const storage = FlutterSecureStorage(); await storage.write(key: 'server_url', value: api.baseUrl); await storage.write(key: 'auth_token', value: api.token); } Future clearCredentials() async { const storage = FlutterSecureStorage(); await storage.delete(key: 'auth_token'); api.setToken(''); loggedIn.value = false; } return MaterialApp( title: 'UpdateForge', theme: buildAppTheme(), debugShowCheckedModeBanner: false, home: loggedIn.value ? AppsScreen( api: api, onLogout: clearCredentials, ) : LoginScreen( api: api, onLogin: () async { await saveCredentials(); loggedIn.value = true; }, ), ); } }