mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
riverpod generator for theme providers
This commit is contained in:
parent
d43137b459
commit
2636d96ba5
10 changed files with 141 additions and 120 deletions
|
|
@ -9,8 +9,8 @@ import 'package:mangayomi/models/model_manga.dart';
|
|||
import 'package:mangayomi/router/router.dart';
|
||||
import 'package:mangayomi/source/source_model.dart';
|
||||
import 'package:mangayomi/views/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'views/more/settings/appearance/flex_scheme_color_provider.dart';
|
||||
import 'views/more/settings/appearance/thememode_provider.dart';
|
||||
import 'views/more/settings/appearance/providers/flex_scheme_color_state_provider.dart';
|
||||
import 'views/more/settings/appearance/providers/theme_mode_state_provider.dart';
|
||||
|
||||
void main() async {
|
||||
await Hive.initFlutter();
|
||||
|
|
@ -36,7 +36,7 @@ class MyApp extends ConsumerWidget {
|
|||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
ThemeData themeLight = FlexThemeData.light(
|
||||
colors: ref.watch(flexSchemeColorProvider),
|
||||
colors: ref.watch(flexSchemeColorStateProvider),
|
||||
surfaceMode: FlexSurfaceMode.highScaffoldLevelSurface,
|
||||
blendLevel: 10,
|
||||
appBarOpacity: 0.00,
|
||||
|
|
@ -54,7 +54,7 @@ class MyApp extends ConsumerWidget {
|
|||
fontFamily: GoogleFonts.aBeeZee().fontFamily,
|
||||
);
|
||||
ThemeData themeDark = FlexThemeData.dark(
|
||||
colors: ref.watch(flexSchemeColorProvider),
|
||||
colors: ref.watch(flexSchemeColorStateProvider),
|
||||
surfaceMode: FlexSurfaceMode.highScaffoldLevelSurface,
|
||||
blendLevel: 10,
|
||||
appBarOpacity: 0.00,
|
||||
|
|
@ -73,7 +73,7 @@ class MyApp extends ConsumerWidget {
|
|||
);
|
||||
final router = ref.watch(routerProvider);
|
||||
return MaterialApp.router(
|
||||
theme: ref.watch(themeModeProvider) ? themeLight : themeDark,
|
||||
theme: ref.watch(themeModeStateProvider) ? themeLight : themeDark,
|
||||
debugShowCheckedModeBanner: false,
|
||||
routeInformationParser: router.routeInformationParser,
|
||||
routerDelegate: router.routerDelegate,
|
||||
|
|
|
|||
|
|
@ -1,22 +1,18 @@
|
|||
Map<String, String>? headers(String source) {
|
||||
return source == 'japscan'
|
||||
return source == 'mangakawaii'
|
||||
? {
|
||||
'referer': 'https://www.japscan.lol/',
|
||||
'Referer': 'https://www.mangakawaii.io/',
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/8\$userAgentRandomizer1.0.4\$userAgentRandomizer3.1\$userAgentRandomizer2 Safari/537.36',
|
||||
'Accept-Language': 'fr'
|
||||
}
|
||||
: source == 'mangakawaii'
|
||||
? {
|
||||
'Referer': 'https://www.mangakawaii.io/',
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/8\$userAgentRandomizer1.0.4\$userAgentRandomizer3.1\$userAgentRandomizer2 Safari/537.36',
|
||||
'Accept-Language': 'fr'
|
||||
}
|
||||
: source == 'mangahere'
|
||||
? {"Referer": "https://www.mangahere.cc/", "Cookie": "isAdult=1"}
|
||||
: source == 'comick'
|
||||
? {
|
||||
'Referer': 'https://comick.app/',
|
||||
'User-Agent':
|
||||
'Tachiyomi Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/8\\\$userAgentRandomizer1.0.4\\\$userAgentRandomizer3.1\\\$userAgentRandomizer2 Safari/537.36'
|
||||
}
|
||||
: {};
|
||||
}
|
||||
: source == 'mangahere'
|
||||
? {"Referer": "https://www.mangahere.cc/", "Cookie": "isAdult=1"}
|
||||
: source == 'comick'
|
||||
? {
|
||||
'Referer': 'https://comick.app/',
|
||||
'User-Agent':
|
||||
'Tachiyomi Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/8\\\$userAgentRandomizer1.0.4\\\$userAgentRandomizer3.1\\\$userAgentRandomizer2 Safari/537.36'
|
||||
}
|
||||
: {};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:mangayomi/views/more/settings/appearance/thememode_provider.dart';
|
||||
import 'package:mangayomi/views/more/settings/appearance/providers/theme_mode_state_provider.dart';
|
||||
// import 'package:rive/rive.dart';
|
||||
|
||||
class DarkModeButton extends ConsumerStatefulWidget {
|
||||
|
|
@ -13,50 +13,27 @@ class DarkModeButton extends ConsumerStatefulWidget {
|
|||
}
|
||||
|
||||
class _DarkModeButtonState extends ConsumerState<DarkModeButton> {
|
||||
// SMIBool? _bump;
|
||||
|
||||
// void _onRiveInit(Artboard artboard) {
|
||||
// final controller =
|
||||
// StateMachineController.fromArtboard(artboard, 'State Machine 1');
|
||||
// artboard.addController(controller!);
|
||||
// _bump = controller.findInput<bool>('isDark') as SMIBool;
|
||||
// _bump?.value = !ref.watch(themeModeProvider);
|
||||
// }
|
||||
|
||||
// void _hitBump(bool value) => _bump?.value = value;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isLight = ref.watch(themeModeProvider);
|
||||
// _hitBump(!isLight);
|
||||
bool isLight = ref.watch(themeModeStateProvider);
|
||||
return ListTile(
|
||||
onTap: () {
|
||||
if (!isLight == true) {
|
||||
ref.read(themeModeProvider.notifier).setLightTheme();
|
||||
ref.read(themeModeStateProvider.notifier).setLightTheme();
|
||||
} else {
|
||||
ref.read(themeModeProvider.notifier).setDarkTheme();
|
||||
ref.read(themeModeStateProvider.notifier).setDarkTheme();
|
||||
}
|
||||
},
|
||||
title: const Text("Theme mode"),
|
||||
subtitle: Text(ref.watch(themeModeProvider) ? 'Light' : 'Dark'),
|
||||
subtitle: Text(ref.watch(themeModeStateProvider) ? 'Light' : 'Dark'),
|
||||
trailing: Switch(
|
||||
value: !isLight,
|
||||
onChanged: (dd) {
|
||||
if (!isLight == true) {
|
||||
ref.read(themeModeProvider.notifier).setLightTheme();
|
||||
ref.read(themeModeStateProvider.notifier).setLightTheme();
|
||||
} else {
|
||||
ref.read(themeModeProvider.notifier).setDarkTheme();
|
||||
ref.read(themeModeStateProvider.notifier).setDarkTheme();
|
||||
}
|
||||
})
|
||||
|
||||
// SizedBox(
|
||||
// height: 80,
|
||||
// width: 80,
|
||||
// child: RiveAnimation.asset(
|
||||
// 'assets/switch.riv',
|
||||
// onInit: _onRiveInit,
|
||||
// ),
|
||||
// ),
|
||||
);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
import 'package:flex_color_scheme/flex_color_scheme.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
import 'package:mangayomi/views/more/settings/appearance/thememode_provider.dart';
|
||||
|
||||
final flexSchemeColorProvider =
|
||||
StateNotifierProvider<ThemeColorState, FlexSchemeColor>((ref) {
|
||||
return ThemeColorState(ref);
|
||||
});
|
||||
|
||||
class ThemeColorState extends StateNotifier<FlexSchemeColor> {
|
||||
final Ref _ref;
|
||||
ThemeColorState(this._ref) : super(FlexColor.deepBlue.light) {
|
||||
if (_ref.watch(themeModeProvider)) {
|
||||
if (_ref.watch(hiveBoxSettings).get('FlexColorIndex') != null) {
|
||||
state = ThemeAA
|
||||
.schemes[_ref.watch(hiveBoxSettings).get('FlexColorIndex')].light;
|
||||
}
|
||||
} else {
|
||||
if (_ref.watch(hiveBoxSettings).get('FlexColorIndex') != null) {
|
||||
state = ThemeAA
|
||||
.schemes[_ref.watch(hiveBoxSettings).get('FlexColorIndex')].dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
void setTheme(FlexSchemeColor color, int index) {
|
||||
state = color;
|
||||
_ref.watch(hiveBoxSettings).put('FlexColorIndex', index);
|
||||
}
|
||||
}
|
||||
|
||||
class ThemeAA {
|
||||
static const List<FlexSchemeData> schemes = <FlexSchemeData>[
|
||||
...FlexColor.schemesList,
|
||||
];
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
import 'package:flex_color_scheme/flex_color_scheme.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
import 'package:mangayomi/views/more/settings/appearance/providers/theme_mode_state_provider.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'flex_scheme_color_state_provider.g.dart';
|
||||
|
||||
@riverpod
|
||||
class FlexSchemeColorState extends _$FlexSchemeColorState {
|
||||
@override
|
||||
FlexSchemeColor build() {
|
||||
if (ref.read(themeModeStateProvider)) {
|
||||
if (ref.watch(hiveBoxSettings).get('FlexColorIndex') != null) {
|
||||
state = ThemeAA
|
||||
.schemes[ref.watch(hiveBoxSettings).get('FlexColorIndex')].light;
|
||||
}
|
||||
} else {
|
||||
if (ref.watch(hiveBoxSettings).get('FlexColorIndex') != null) {
|
||||
state = ThemeAA
|
||||
.schemes[ref.watch(hiveBoxSettings).get('FlexColorIndex')].dark;
|
||||
}
|
||||
}
|
||||
return FlexColor.deepBlue.light;
|
||||
}
|
||||
|
||||
void setTheme(FlexSchemeColor color, int index) {
|
||||
state = color;
|
||||
ref.watch(hiveBoxSettings).put('FlexColorIndex', index);
|
||||
}
|
||||
}
|
||||
|
||||
class ThemeAA {
|
||||
static const List<FlexSchemeData> schemes = <FlexSchemeData>[
|
||||
...FlexColor.schemesList,
|
||||
];
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'flex_scheme_color_state_provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$flexSchemeColorStateHash() =>
|
||||
r'3ba5e5eb6d36364e798149829ad5df70f4a04cfd';
|
||||
|
||||
/// See also [FlexSchemeColorState].
|
||||
@ProviderFor(FlexSchemeColorState)
|
||||
final flexSchemeColorStateProvider =
|
||||
AutoDisposeNotifierProvider<FlexSchemeColorState, FlexSchemeColor>.internal(
|
||||
FlexSchemeColorState.new,
|
||||
name: r'flexSchemeColorStateProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$flexSchemeColorStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$FlexSchemeColorState = AutoDisposeNotifier<FlexSchemeColor>;
|
||||
// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'theme_mode_state_provider.g.dart';
|
||||
|
||||
|
||||
@riverpod
|
||||
class ThemeModeState extends _$ThemeModeState {
|
||||
@override
|
||||
bool build() {
|
||||
return ref.watch(hiveBoxSettings).get('isLight', defaultValue: true)!;
|
||||
}
|
||||
|
||||
void setLightTheme() {
|
||||
state = true;
|
||||
ref.watch(hiveBoxSettings).put('isLight', state);
|
||||
}
|
||||
|
||||
void setDarkTheme() {
|
||||
state = false;
|
||||
ref.watch(hiveBoxSettings).put('isLight', state);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'theme_mode_state_provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$themeModeStateHash() => r'ae86c33659103122399492e5409a0e947b0c6292';
|
||||
|
||||
/// See also [ThemeModeState].
|
||||
@ProviderFor(ThemeModeState)
|
||||
final themeModeStateProvider =
|
||||
AutoDisposeNotifierProvider<ThemeModeState, bool>.internal(
|
||||
ThemeModeState.new,
|
||||
name: r'themeModeStateProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$themeModeStateHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$ThemeModeState = AutoDisposeNotifier<bool>;
|
||||
// ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions
|
||||
|
|
@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
import 'package:mangayomi/views/more/settings/appearance/flex_scheme_color_provider.dart';
|
||||
import 'package:mangayomi/views/more/settings/appearance/providers/flex_scheme_color_state_provider.dart';
|
||||
|
||||
class ThemeSelector extends ConsumerStatefulWidget {
|
||||
const ThemeSelector({
|
||||
|
|
@ -64,11 +64,13 @@ class _ThemeSelectorState extends ConsumerState<ThemeSelector> {
|
|||
});
|
||||
isLight
|
||||
? ref
|
||||
.read(flexSchemeColorProvider.notifier)
|
||||
.read(
|
||||
flexSchemeColorStateProvider.notifier)
|
||||
.setTheme(ThemeAA.schemes[selected].light,
|
||||
selected)
|
||||
: ref
|
||||
.read(flexSchemeColorProvider.notifier)
|
||||
.read(
|
||||
flexSchemeColorStateProvider.notifier)
|
||||
.setTheme(ThemeAA.schemes[selected].dark,
|
||||
selected);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:mangayomi/providers/hive_provider.dart';
|
||||
|
||||
final themeModeProvider = StateNotifierProvider<ThemeModeState, bool>((ref) {
|
||||
return ThemeModeState(ref);
|
||||
});
|
||||
final onPressedProvider = StateProvider<String>((ref) {
|
||||
return '';
|
||||
});
|
||||
|
||||
class ThemeModeState extends StateNotifier<bool> {
|
||||
final Ref _ref;
|
||||
|
||||
ThemeModeState(this._ref)
|
||||
: super(_ref.watch(hiveBoxSettings).get('isLight', defaultValue: true)!);
|
||||
|
||||
void setLightTheme() {
|
||||
state = true;
|
||||
_ref.watch(hiveBoxSettings).put('isLight', state);
|
||||
}
|
||||
|
||||
void setDarkTheme() {
|
||||
state = false;
|
||||
_ref.watch(hiveBoxSettings).put('isLight', state);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue