import 'package:flutter/material.dart'; import 'models/auth_session.dart'; import 'screens/auth_screen.dart'; import 'screens/dashboard_screen.dart'; import 'services/address_repository.dart'; import 'services/auth_repository.dart'; class MyApp extends StatelessWidget { const MyApp({ super.key, AuthRepository? authRepository, AddressRepository? addressRepository, this.enableLiveFeatures = true, }) : _authRepository = authRepository ?? const HttpAuthRepository(), _addressRepository = addressRepository ?? const HttpAddressRepository(); final AuthRepository _authRepository; final AddressRepository _addressRepository; final bool enableLiveFeatures; @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Acceso', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF0F766E)), useMaterial3: true, ), home: AuthBootstrap( authRepository: _authRepository, addressRepository: _addressRepository, enableLiveFeatures: enableLiveFeatures, ), ); } } class AuthBootstrap extends StatefulWidget { const AuthBootstrap({ super.key, required this.authRepository, required this.addressRepository, this.enableLiveFeatures = true, }); final AuthRepository authRepository; final AddressRepository addressRepository; final bool enableLiveFeatures; @override State createState() => _AuthBootstrapState(); } class _AuthBootstrapState extends State { late final Future _sessionFuture; @override void initState() { super.initState(); _sessionFuture = widget.authRepository.restoreSession(); } @override Widget build(BuildContext context) { return FutureBuilder( future: _sessionFuture, builder: (context, snapshot) { if (snapshot.connectionState != ConnectionState.done) { return const _LoadingView(); } final session = snapshot.data; if (session != null) { return DashboardScreen( authRepository: widget.authRepository, addressRepository: widget.addressRepository, session: session, savedAddress: null, enableLiveFeatures: widget.enableLiveFeatures, ); } return AuthScreen( authRepository: widget.authRepository, addressRepository: widget.addressRepository, enableLiveFeatures: widget.enableLiveFeatures, ); }, ); } } class _LoadingView extends StatelessWidget { const _LoadingView(); @override Widget build(BuildContext context) { return const Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } }