import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'core/api_client.dart'; import 'core/api_service.dart'; import 'core/auth_service.dart'; import 'screens/home_screen.dart'; import 'screens/login_screen.dart'; void main() { runApp(const App()); } class App extends StatelessWidget { const App({super.key}); @override Widget build(BuildContext context) { final apiClient = ApiClient(); return MultiProvider( providers: [ Provider.value(value: apiClient), Provider(create: (_) => ApiService(apiClient)), ChangeNotifierProvider( create: (_) => AuthService(apiClient)..restoreSession(), ), ], child: MaterialApp( title: 'Домашняя автоматизация', theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal)), home: const AuthGate(), ), ); } } /// Swaps between login and the app shell based on session state, so nothing /// else in the tree needs to know how auth is restored or persisted. class AuthGate extends StatelessWidget { const AuthGate({super.key}); @override Widget build(BuildContext context) { final auth = context.watch(); if (auth.isLoading) { return const Scaffold(body: Center(child: CircularProgressIndicator())); } return auth.isAuthenticated ? const HomeScreen() : const LoginScreen(); } }