added follow system theme

This commit is contained in:
Schnitzel5 2025-03-24 21:33:01 +01:00
parent fc8c00f24a
commit 17c18bd79a
8 changed files with 370 additions and 215 deletions

View file

@ -51,6 +51,8 @@ class Settings {
bool? themeIsDark;
bool? followSystemTheme;
bool? incognitoMode;
List<ChapterPageurls>? chapterPageUrlsList;
@ -254,6 +256,7 @@ class Settings {
this.relativeTimesTamps = 2,
this.flexSchemeColorIndex = 2,
this.themeIsDark = false,
this.followSystemTheme = false,
this.incognitoMode = false,
this.chapterPageUrlsList,
this.showPagesNumber = true,
@ -472,6 +475,7 @@ class Settings {
.toList();
}
themeIsDark = json['themeIsDark'];
followSystemTheme = json['followSystemTheme'];
userAgent = json['userAgent'];
backupFrequency = json['backupFrequency'];
backupListOptions = json['backupListOptions']?.cast<int>();
@ -637,6 +641,7 @@ class Settings {
'sortLibraryAnime': sortLibraryAnime?.toJson(),
'sortLibraryManga': sortLibraryManga?.toJson(),
'themeIsDark': themeIsDark,
'followSystemTheme': followSystemTheme,
'userAgent': userAgent,
'backupFrequency': backupFrequency,
'backupListOptions': backupListOptions,

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@ part of 'download_provider.dart';
// RiverpodGenerator
// **************************************************************************
String _$downloadChapterHash() => r'08a7196ae7da5d980629ef80d04ab9b251006eaf';
String _$downloadChapterHash() => r'bf43fddf83fce382ff794c688288153477f9a3aa';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -452,7 +452,7 @@ class _RestoreKotatsuBackupProviderElement
}
String _$restoreTachiBkBackupHash() =>
r'8f45e43afa63618ee9b7c4bdd5cae50a2dc30b1a';
r'76021dbcf0d576b50379f19f17e6a3ee8434942c';
/// See also [restoreTachiBkBackup].
@ProviderFor(restoreTachiBkBackup)

View file

@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/app_font_family.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_state_provider.dart';
import 'package:mangayomi/modules/more/settings/appearance/widgets/follow_system_theme_button.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
import 'package:mangayomi/utils/date.dart';
@ -71,6 +72,7 @@ class AppearanceScreen extends ConsumerWidget {
),
),
const DarkModeButton(),
const FollowSystemThemeButton(),
const ThemeSelector(),
if (isDarkTheme)
Padding(

View file

@ -1,3 +1,6 @@
import 'dart:ui';
import 'package:flutter/widgets.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.dart';
@ -39,3 +42,27 @@ class ThemeModeState extends _$ThemeModeState {
);
}
}
@riverpod
class FollowSystemThemeState extends _$FollowSystemThemeState {
@override
bool build() {
return isar.settings.getSync(227)!.followSystemTheme ?? false;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
if (value) {
if (WidgetsBinding.instance.platformDispatcher.platformBrightness ==
Brightness.light) {
ref.read(themeModeStateProvider.notifier).setLightTheme();
} else {
ref.read(themeModeStateProvider.notifier).setDarkTheme();
}
}
isar.writeTxnSync(
() => isar.settings.putSync(settings!..followSystemTheme = value),
);
}
}

View file

@ -22,5 +22,22 @@ final themeModeStateProvider =
);
typedef _$ThemeModeState = AutoDisposeNotifier<bool>;
String _$followSystemThemeStateHash() =>
r'0c65e1471807dddb2f536d336d1f44b29e9e3a5a';
/// See also [FollowSystemThemeState].
@ProviderFor(FollowSystemThemeState)
final followSystemThemeStateProvider =
AutoDisposeNotifierProvider<FollowSystemThemeState, bool>.internal(
FollowSystemThemeState.new,
name: r'followSystemThemeStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$followSystemThemeStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$FollowSystemThemeState = AutoDisposeNotifier<bool>;
// 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

View file

@ -0,0 +1,31 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_state_provider.dart';
class FollowSystemThemeButton extends ConsumerStatefulWidget {
const FollowSystemThemeButton({super.key});
@override
ConsumerState<FollowSystemThemeButton> createState() => _FollowSystemThemeButtonState();
}
class _FollowSystemThemeButtonState extends ConsumerState<FollowSystemThemeButton> {
@override
Widget build(BuildContext context) {
bool isFollow = ref.watch(followSystemThemeStateProvider);
final l10n = l10nLocalizations(context);
return SwitchListTile(
onChanged: (value) {
ref.read(followSystemThemeStateProvider.notifier).set(value);
},
title: Text(l10n!.follow_system_theme),
subtitle: Text(
!isFollow ? l10n.off : l10n.on,
style: TextStyle(fontSize: 11, color: context.secondaryColor),
),
value: isFollow,
);
}
}