Files
finlog/finlog_app/app/lib/main.dart

81 lines
2.6 KiB
Dart

import 'package:app/core/app/router.dart';
import 'package:app/core/app/startup/domain/initialize_app.dart';
import 'package:app/core/i18n/translations.g.dart';
import 'package:app/core/ui/controller/locale_controller.dart';
import 'package:app/core/ui/controller/scale_controller.dart';
import 'package:app/core/ui/controller/theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:fluttery/fluttery.dart';
import 'package:fluttery/logger.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
Future<void> main() async {
// Ensures that the Flutter engine and widget binding
// are initialized before using async services or plugins
WidgetsFlutterBinding.ensureInitialized();
// any services
App.registerDefaultServices();
final logger = App.service<Logger>();
logger.debug("[MAIN] Registered all default services");
// Run initialization before building router
final init = InitializeAppUseCase();
final startRoute = await init();
final themeController = ThemeController();
await themeController.init();
final scaleController = ScaleController();
final localeController = LocaleController();
await localeController.init();
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => themeController),
ChangeNotifierProvider(create: (context) => scaleController),
ChangeNotifierProvider(create: (context) => localeController),
],
child: TranslationProvider(
child: FinlogApp(router: buildAppRouter(startRoute)),
),
),
);
}
class FinlogApp extends StatelessWidget {
final GoRouter router;
const FinlogApp({super.key, required this.router});
@override
Widget build(BuildContext context) {
final theme = context.watch<ThemeController>();
final textScale = context.watch<ScaleController>();
return AnimatedBuilder(
animation: theme,
builder: (context, _) => MaterialApp.router(
title: 'Finlog',
locale: TranslationProvider.of(context).flutterLocale,
supportedLocales: AppLocaleUtils.supportedLocales,
localizationsDelegates: GlobalMaterialLocalizations.delegates,
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: theme.themeMode,
routerConfig: router,
builder: (context, child) => MediaQuery(
data: MediaQuery.of(
context,
).copyWith(textScaler: TextScaler.linear(textScale.factor)),
child: child ?? Container(),
),
),
);
}
}