Refactor: Introduce LocaleController and ScaleController, unify text and language settings, and simplify AppSettingsView structure.
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import 'package:app/core/app/router.dart';
|
||||
import 'package:app/core/app/startup/domain/initialize_app.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:fluttery/fluttery.dart';
|
||||
@@ -25,37 +27,48 @@ Future<void> main() async {
|
||||
final themeController = ThemeController();
|
||||
await themeController.init();
|
||||
|
||||
final scaleController = ScaleController();
|
||||
final localeController = LocaleController();
|
||||
|
||||
runApp(
|
||||
MultiProvider(
|
||||
providers: [ChangeNotifierProvider(create: (context) => themeController)],
|
||||
child: FinlogApp(
|
||||
router: buildAppRouter(startRoute),
|
||||
themeController: themeController,
|
||||
),
|
||||
providers: [
|
||||
ChangeNotifierProvider(create: (context) => themeController),
|
||||
ChangeNotifierProvider(create: (context) => scaleController),
|
||||
ChangeNotifierProvider(create: (context) => localeController),
|
||||
],
|
||||
child: FinlogApp(router: buildAppRouter(startRoute)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
class FinlogApp extends StatelessWidget {
|
||||
final GoRouter router;
|
||||
final ThemeController themeController;
|
||||
|
||||
const FinlogApp({
|
||||
super.key,
|
||||
required this.router,
|
||||
required this.themeController,
|
||||
});
|
||||
const FinlogApp({super.key, required this.router});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = context.watch<ThemeController>();
|
||||
final textScale = context.watch<ScaleController>();
|
||||
final localeCtrl = context.watch<LocaleController>();
|
||||
|
||||
return AnimatedBuilder(
|
||||
animation: themeController,
|
||||
animation: theme,
|
||||
builder: (context, _) => MaterialApp.router(
|
||||
title: 'Finlog',
|
||||
locale: localeCtrl.locale,
|
||||
supportedLocales: const [Locale('de'), Locale('en')],
|
||||
theme: ThemeData.light(),
|
||||
darkTheme: ThemeData.dark(),
|
||||
themeMode: themeController.themeMode,
|
||||
themeMode: theme.themeMode,
|
||||
routerConfig: router,
|
||||
builder: (context, child) => MediaQuery(
|
||||
data: MediaQuery.of(
|
||||
context,
|
||||
).copyWith(textScaler: TextScaler.linear(textScale.factor)),
|
||||
child: child ?? Container(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user