import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:sxchnge_auth/sxchnge_auth.dart'; import 'package:sxchnge_theme/sxchnge_theme.dart'; import 'providers/locale.dart'; import 'routing/router.dart'; import 'generated/i18n/app_localizations.dart'; Future main() async { final binding = WidgetsFlutterBinding.ensureInitialized(); final locale = await LocaleProvider.load(binding.platformDispatcher.locales); runApp(SxchngeApp(localeProvider: locale)); } class SxchngeApp extends StatefulWidget { const SxchngeApp({ super.key, this.localeProvider, this.loginService = const DummyLoginService(), this.signupService = const DummySignupService(), this.verificationService = const DummyVerificationService(), }); final LocaleProvider? localeProvider; final LoginService loginService; final SignupService signupService; final VerificationService verificationService; @override State createState() => _SxchngeAppState(); } class _SxchngeAppState extends State { late final _locale = widget.localeProvider ?? LocaleProvider(); late final _router = createAppRouter(); @override void dispose() { _router.dispose(); _locale.dispose(); super.dispose(); } @override Widget build(BuildContext context) => MultiProvider( providers: [ ChangeNotifierProvider.value(value: _locale), Provider.value(value: widget.verificationService), ChangeNotifierProvider(create: (_) => LoginProvider(widget.loginService)), ChangeNotifierProvider( create: (_) => SignupProvider(widget.signupService), ), ], child: Consumer( builder: (context, locale, _) => MaterialApp.router( onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle, debugShowCheckedModeBanner: false, theme: SxchngeTheme.light(), locale: locale.locale, localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, routerConfig: _router, ), ), ); }