riverpod generator for theme providers

This commit is contained in:
kodjodevf 2023-04-11 10:49:28 +01:00
parent d43137b459
commit 2636d96ba5
10 changed files with 141 additions and 120 deletions

View file

@ -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,

View file

@ -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'
}
: {};
}

View file

@ -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,
// ),
// ),
);
}));
}
}

View file

@ -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,
];
}

View file

@ -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,
];
}

View file

@ -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

View file

@ -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);
}
}

View file

@ -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

View file

@ -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);
},

View file

@ -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);
}
}