Refactor: Introduce LocaleController and ScaleController, unify text and language settings, and simplify AppSettingsView structure.

This commit is contained in:
2025-09-26 22:55:18 +02:00
parent d5f85c2f41
commit 3e04b9cbe3
5 changed files with 156 additions and 153 deletions

View File

@@ -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(),
),
),
);
}