mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-04-20 23:22:07 +00:00
added follow system theme
This commit is contained in:
parent
fc8c00f24a
commit
17c18bd79a
8 changed files with 370 additions and 215 deletions
|
|
@ -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
|
|
@ -6,7 +6,7 @@ part of 'download_provider.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$downloadChapterHash() => r'08a7196ae7da5d980629ef80d04ab9b251006eaf';
|
||||
String _$downloadChapterHash() => r'bf43fddf83fce382ff794c688288153477f9a3aa';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -452,7 +452,7 @@ class _RestoreKotatsuBackupProviderElement
|
|||
}
|
||||
|
||||
String _$restoreTachiBkBackupHash() =>
|
||||
r'8f45e43afa63618ee9b7c4bdd5cae50a2dc30b1a';
|
||||
r'76021dbcf0d576b50379f19f17e6a3ee8434942c';
|
||||
|
||||
/// See also [restoreTachiBkBackup].
|
||||
@ProviderFor(restoreTachiBkBackup)
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue