theme support on older devices

This commit is contained in:
Fabian Freund
2025-02-21 11:45:54 +01:00
parent c2c6e4caee
commit faf58d3c46
3 changed files with 81 additions and 2 deletions
+11
View File
@@ -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);
+46
View File
@@ -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<Color>.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<Color>;
String _$darkSeedColorFallbackHash() =>
r'9418cf71e3d80c8a2142e0d3a8820989b29bff86';
/// See also [darkSeedColorFallback].
@ProviderFor(darkSeedColorFallback)
final darkSeedColorFallbackProvider = Provider<Color>.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<Color>;
// 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
+24 -2
View File
@@ -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,
);