94 lines
2.9 KiB
Dart
94 lines
2.9 KiB
Dart
import 'package:app/core/app/router.dart';
|
|
import 'package:app/core/app/startup/domain/initialize_app.dart';
|
|
import 'package:app/core/app/features/feature_controller.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();
|
|
|
|
final features = FeatureController();
|
|
await features.init();
|
|
|
|
runApp(
|
|
MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider<ThemeController>(
|
|
create: (context) => themeController,
|
|
),
|
|
ChangeNotifierProvider<ScaleController>(
|
|
create: (context) => scaleController,
|
|
),
|
|
ChangeNotifierProvider<LocaleController>(
|
|
create: (context) => localeController,
|
|
),
|
|
ChangeNotifierProvider<FeatureController>(
|
|
create: (context) => features,
|
|
),
|
|
],
|
|
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(),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|