more refactors

This commit is contained in:
shenlong-tanwen
2024-10-19 14:34:42 +05:30
parent e8bb9a3934
commit 3b8951fde6
46 changed files with 598 additions and 435 deletions
+42 -7
View File
@@ -1,11 +1,10 @@
import 'package:dynamic_color/dynamic_color.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:immich_mobile/i18n/strings.g.dart';
import 'package:immich_mobile/presentation/modules/theme/models/app_theme.model.dart';
import 'package:immich_mobile/presentation/modules/theme/states/app_theme.state.dart';
import 'package:immich_mobile/presentation/modules/theme/widgets/app_theme_builder.widget.dart';
import 'package:immich_mobile/presentation/router/router.dart';
import 'package:immich_mobile/presentation/states/app_theme.state.dart';
import 'package:immich_mobile/presentation/theme/app_theme.dart';
import 'package:immich_mobile/service_locator.dart';
import 'package:immich_mobile/utils/constants/globals.dart';
@@ -22,9 +21,9 @@ class _ImAppState extends State<ImApp> with WidgetsBindingObserver {
@override
Widget build(BuildContext context) {
return TranslationProvider(
child: BlocBuilder<AppThemeCubit, AppTheme>(
bloc: di(),
builder: (_, appTheme) => AppThemeBuilder(
child: ValueListenableBuilder(
valueListenable: di<AppThemeProvider>(),
builder: (_, appTheme, __) => _AppThemeBuilder(
theme: appTheme,
builder: (ctx, lightTheme, darkTheme) => MaterialApp.router(
debugShowCheckedModeBanner: false,
@@ -41,3 +40,39 @@ class _ImAppState extends State<ImApp> with WidgetsBindingObserver {
);
}
}
class _AppThemeBuilder extends StatelessWidget {
const _AppThemeBuilder({required this.theme, required this.builder});
/// Current app theme to switch the theme data used
final AppTheme theme;
/// Builds the child widget of this widget, providing a light and dark [ThemeData] based on the
/// [theme] passed.
final Widget Function(
BuildContext context,
ThemeData lightTheme,
ThemeData darkTheme,
) builder;
@override
Widget build(BuildContext context) {
// Static colors
if (theme != AppTheme.dynamic) {
final lightTheme = AppTheme.generateThemeData(theme.lightSchema);
final darkTheme = AppTheme.generateThemeData(theme.darkSchema);
return builder(context, lightTheme, darkTheme);
}
// Dynamic color builder
return DynamicColorBuilder(builder: (lightDynamic, darkDynamic) {
final lightTheme =
AppTheme.generateThemeData(lightDynamic ?? theme.lightSchema);
final darkTheme =
AppTheme.generateThemeData(darkDynamic ?? theme.darkSchema);
return builder(context, lightTheme, darkTheme);
});
}
}