Update Theme Setup (#2300)

* refactor(theme-setup-update): Move didChangePlatformBrightness lifecycle method to Root widget instead of AppState. We already have an active WidgetsBindingObserver in Root widget.

* fix(theme): Add workaround for flutter iOS didChangePlatformBrightness issue causing unneeded rebuilds.
This commit is contained in:
David Adegoke 2025-05-29 14:46:43 +01:00 committed by GitHub
parent b79fb6af1f
commit b77c22b0df
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 15 additions and 26 deletions

View file

@ -25,7 +25,6 @@ import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/root/root.dart';
import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/store/authentication_store.dart';
import 'package:cake_wallet/themes/core/material_base_theme.dart';
import 'package:cake_wallet/themes/utils/theme_provider.dart';
import 'package:cake_wallet/utils/device_info.dart';
import 'package:cake_wallet/utils/exception_handler.dart';
@ -290,30 +289,7 @@ class App extends StatefulWidget {
AppState createState() => AppState();
}
class AppState extends State<App> with SingleTickerProviderStateMixin, WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangePlatformBrightness() {
final appStore = getIt.get<AppStore>();
if (appStore.themeStore.themeMode == ThemeMode.system) {
final systemTheme = appStore.themeStore.getThemeFromSystem();
if (appStore.themeStore.currentTheme != systemTheme) {
appStore.themeStore.setTheme(systemTheme);
}
}
}
class AppState extends State<App> with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
return Observer(

View file

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/core/totp_request_details.dart';
@ -159,6 +160,18 @@ class RootState extends State<Root> with WidgetsBindingObserver {
}
}
@override
void didChangePlatformBrightness() {
if (widget.appStore.themeStore.themeMode == ThemeMode.system) {
Future.delayed(Duration(milliseconds: Platform.isIOS ? 500 : 0), () {
final systemTheme = widget.appStore.themeStore.getThemeFromSystem();
if (widget.appStore.themeStore.currentTheme != systemTheme) {
widget.appStore.themeStore.setTheme(systemTheme);
}
});
}
}
@override
Widget build(BuildContext context) {
// this only happens when the app has been in the background for some time

View file

@ -168,7 +168,7 @@ abstract class ThemeStoreBase with Store {
}
MaterialThemeBase getThemeFromSystem() {
final systemBrightness = WidgetsBinding.instance.window.platformBrightness;
final systemBrightness = WidgetsBinding.instance.platformDispatcher.platformBrightness;
return systemBrightness == Brightness.dark ? ThemeList.darkTheme : ThemeList.lightTheme;
}
}