diff --git a/app/lib/cubits/settings.dart b/app/lib/cubits/settings.dart index 5d2f077312d3..01cf1fd6c362 100644 --- a/app/lib/cubits/settings.dart +++ b/app/lib/cubits/settings.dart @@ -1,10 +1,11 @@ import 'dart:convert'; -import 'dart:typed_data'; import 'package:butterfly/api/full_screen.dart' as full_screen_api; import 'package:butterfly/api/file_system/file_system.dart'; +import 'package:butterfly/widgets/window.dart'; import 'package:butterfly_api/butterfly_api.dart'; import 'package:collection/collection.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -12,6 +13,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:window_manager/window_manager.dart'; import '../views/navigator.dart'; @@ -371,7 +373,20 @@ class SettingsCubit extends Cubit { SettingsCubit(SharedPreferences prefs, bool fullScreen) : super(ButterflySettings.fromPrefs(prefs, fullScreen)); - Future changeTheme(ThemeMode theme) async { + void setTheme(MediaQueryData mediaQuery, [ThemeMode? theme]) { + if (kIsWeb || !isWindow) return; + final brightness = switch (theme ?? state.theme) { + ThemeMode.light => Brightness.light, + ThemeMode.dark => Brightness.dark, + ThemeMode.system => mediaQuery.platformBrightness, + }; + windowManager.setBrightness(brightness); + } + + Future changeTheme(ThemeMode theme, [MediaQueryData? modify]) async { + if (modify != null) { + setTheme(modify, theme); + } emit(state.copyWith(theme: theme)); return save(); } @@ -616,7 +631,14 @@ class SettingsCubit extends Cubit { return save(); } - Future changeNativeTitleBar(bool value) { + void setNativeTitleBar([bool? value]) { + windowManager.setTitleBarStyle((value ?? state.nativeTitleBar) + ? TitleBarStyle.normal + : TitleBarStyle.hidden); + } + + Future changeNativeTitleBar(bool value, [bool modify = true]) { + if (modify) setNativeTitleBar(value); emit(state.copyWith(nativeTitleBar: value)); return save(); } diff --git a/app/lib/main.dart b/app/lib/main.dart index af243ececf32..9469015a6cb2 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -291,35 +291,16 @@ class ButterflyApp extends StatelessWidget { create: (_) { final cubit = SettingsCubit(prefs, isFullScreen); cubit.setFullScreen(cubit.state.startInFullScreen); + cubit.setTheme(MediaQuery.of(context)); + cubit.setNativeTitleBar(); return cubit; }, - child: BlocBuilder( - buildWhen: (previous, current) => - previous.nativeTitleBar != current.nativeTitleBar || - previous.theme != current.theme, - builder: (context, settings) { - final mediaQuery = MediaQuery.of(context); - if (!kIsWeb && isWindow) { - windowManager.waitUntilReadyToShow().then((_) async { - await windowManager.setTitleBarStyle(settings.nativeTitleBar - ? TitleBarStyle.normal - : TitleBarStyle.hidden); - final brightness = switch (settings.theme) { - ThemeMode.light => Brightness.light, - ThemeMode.dark => Brightness.dark, - ThemeMode.system => mediaQuery.platformBrightness, - }; - await windowManager.setBrightness(brightness); - await windowManager.show(); - }); - } - return RepositoryProvider( - create: (context) => - SyncService(context, context.read()), - lazy: false, - child: _buildApp(lightDynamic, darkDynamic), - ); - }, + lazy: false, + child: RepositoryProvider( + create: (context) => + SyncService(context, context.read()), + lazy: false, + child: _buildApp(lightDynamic, darkDynamic), ), ), ); diff --git a/app/lib/settings/personalization.dart b/app/lib/settings/personalization.dart index d04e6b0bb2ad..df0a37a29253 100644 --- a/app/lib/settings/personalization.dart +++ b/app/lib/settings/personalization.dart @@ -217,7 +217,7 @@ class PersonalizationSettingsPage extends StatelessWidget { title: AppLocalizations.of(context).theme, childrenBuilder: (context) { void changeTheme(ThemeMode themeMode) { - cubit.changeTheme(themeMode); + cubit.changeTheme(themeMode, MediaQuery.of(context)); Navigator.of(context).pop(); } diff --git a/app/pubspec.lock b/app/pubspec.lock index cd37a60e2b9a..36310f738de8 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -563,10 +563,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: b33a88c67816312597e5e0f5906c5139a0b9bd9bb137346e872c788da7af8ea0 + sha256: "5927202c23bec18ba93f662b5e1f81f2caa2e0cfa472d857d6229f63d59f1730" url: "https://pub.dev" source: hosted - version: "9.0.3" + version: "9.1.0" graphs: dependency: transitive description: diff --git a/app/pubspec.yaml b/app/pubspec.yaml index d747a8dbdd69..488b77a37e05 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -41,7 +41,7 @@ dependencies: share_plus: ^7.0.2 package_info_plus: ^4.0.2 idb_shim: ^2.3.1 - go_router: ^9.0.3 + go_router: ^9.1.0 xml: ^6.3.0 collection: ^1.17.2 bloc_concurrency: ^0.2.2 diff --git a/fastlane/metadata/android/en-US/changelogs/69.txt b/fastlane/metadata/android/en-US/changelogs/69.txt index 3961cb5a6371..9db0faa418b8 100644 --- a/fastlane/metadata/android/en-US/changelogs/69.txt +++ b/fastlane/metadata/android/en-US/changelogs/69.txt @@ -13,4 +13,5 @@ * Fix waypoints not updating in navigator * Fix background won't be loaded * Fix position when scaling elements -* Fix window when native title bar is enabled \ No newline at end of file +* Fix window when native title bar is enabled +* Fix full screen and maximize window ([#449](https://github.com/LinwoodDev/Butterfly/issues/449)) \ No newline at end of file