From faf58d3c4665088fae9ed6241d80ee57264a5efc Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Fri, 21 Feb 2025 11:45:54 +0100 Subject: [PATCH] theme support on older devices --- app/lib/core/providers/defaults.dart | 11 ++++++ app/lib/core/providers/defaults.g.dart | 46 ++++++++++++++++++++++++++ app/lib/main.dart | 26 +++++++++++++-- 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 app/lib/core/providers/defaults.dart create mode 100644 app/lib/core/providers/defaults.g.dart diff --git a/app/lib/core/providers/defaults.dart b/app/lib/core/providers/defaults.dart new file mode 100644 index 00000000..e2a6dd17 --- /dev/null +++ b/app/lib/core/providers/defaults.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:riverpod/riverpod.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; + +part 'defaults.g.dart'; + +@Riverpod(keepAlive: true) +Color lightSeedColorFallback(Ref ref) => const Color(0xFF167C80); + +@Riverpod(keepAlive: true) +Color darkSeedColorFallback(Ref ref) => const Color(0xFF167C80); diff --git a/app/lib/core/providers/defaults.g.dart b/app/lib/core/providers/defaults.g.dart new file mode 100644 index 00000000..2c2d36dc --- /dev/null +++ b/app/lib/core/providers/defaults.g.dart @@ -0,0 +1,46 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'defaults.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$lightSeedColorFallbackHash() => + r'af151d3293d372f5df451aa8c3a75136377b6ce1'; + +/// See also [lightSeedColorFallback]. +@ProviderFor(lightSeedColorFallback) +final lightSeedColorFallbackProvider = Provider.internal( + lightSeedColorFallback, + name: r'lightSeedColorFallbackProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$lightSeedColorFallbackHash, + dependencies: null, + allTransitiveDependencies: null, +); + +@Deprecated('Will be removed in 3.0. Use Ref instead') +// ignore: unused_element +typedef LightSeedColorFallbackRef = ProviderRef; +String _$darkSeedColorFallbackHash() => + r'9418cf71e3d80c8a2142e0d3a8820989b29bff86'; + +/// See also [darkSeedColorFallback]. +@ProviderFor(darkSeedColorFallback) +final darkSeedColorFallbackProvider = Provider.internal( + darkSeedColorFallback, + name: r'darkSeedColorFallbackProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$darkSeedColorFallbackHash, + dependencies: null, + allTransitiveDependencies: null, +); + +@Deprecated('Will be removed in 3.0. Use Ref instead') +// ignore: unused_element +typedef DarkSeedColorFallbackRef = ProviderRef; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package diff --git a/app/lib/main.dart b/app/lib/main.dart index 241492da..437f55b4 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:home_widget/home_widget.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:lensai/core/error_observer.dart'; +import 'package:lensai/core/providers/defaults.dart'; import 'package:lensai/domain/services/app_initialization.dart'; import 'package:lensai/features/user/domain/repositories/general_settings.dart'; import 'package:lensai/presentation/hooks/on_initialization.dart'; @@ -36,14 +37,35 @@ void main() async { return DynamicColorBuilder( builder: (lightDynamic, darkDynamic) { + ColorScheme lightColorScheme; + ColorScheme darkColorScheme; + + if (lightDynamic != null && darkDynamic != null) { + // On Android S+ devices, use the provided dynamic color scheme. + // (Recommended) Harmonize the dynamic color scheme' built-in semantic colors. + lightColorScheme = lightDynamic.harmonized(); + + // Repeat for the dark color scheme. + darkColorScheme = darkDynamic.harmonized(); + } else { + // Otherwise, use fallback schemes. + lightColorScheme = ColorScheme.fromSeed( + seedColor: ref.read(lightSeedColorFallbackProvider), + ); + darkColorScheme = ColorScheme.fromSeed( + seedColor: ref.read(darkSeedColorFallbackProvider), + brightness: Brightness.dark, + ); + } + return MainApp( theme: ThemeData( useMaterial3: true, - colorScheme: lightDynamic?.harmonized(), + colorScheme: lightColorScheme, ), darkTheme: ThemeData( useMaterial3: true, - colorScheme: darkDynamic?.harmonized(), + colorScheme: darkColorScheme, ), themeMode: themeMode, );