From edf9958b8f4c4625fea4af8ef393f6d44a4fc24d Mon Sep 17 00:00:00 2001 From: kodjodevf <107993382+kodjodevf@users.noreply.github.com> Date: Tue, 11 Apr 2023 11:27:48 +0100 Subject: [PATCH] add blendLevel feature --- lib/main.dart | 15 ++++----- .../appearance/appearance_screen.dart | 7 ++-- .../providers/blend_level_state_provider.dart | 16 +++++++++ .../blend_level_state_provider.g.dart | 25 ++++++++++++++ .../widgets/blend_level_slider.dart | 33 +++++++++++++++++++ .../{ => widgets}/dark_mode_button.dart | 0 .../{ => widgets}/theme_selector.dart | 0 7 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 lib/views/more/settings/appearance/providers/blend_level_state_provider.dart create mode 100644 lib/views/more/settings/appearance/providers/blend_level_state_provider.g.dart create mode 100644 lib/views/more/settings/appearance/widgets/blend_level_slider.dart rename lib/views/more/settings/appearance/{ => widgets}/dark_mode_button.dart (100%) rename lib/views/more/settings/appearance/{ => widgets}/theme_selector.dart (100%) diff --git a/lib/main.dart b/lib/main.dart index 67d799a5..311da987 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,6 +9,7 @@ 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 'package:mangayomi/views/more/settings/appearance/providers/blend_level_state_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'; @@ -35,10 +36,12 @@ class MyApp extends ConsumerWidget { // This widget is the root of your application. @override Widget build(BuildContext context, WidgetRef ref) { + final isThemeLight = ref.watch(themeModeStateProvider); + final blendLevel = ref.watch(blendLevelStateProvider); ThemeData themeLight = FlexThemeData.light( colors: ref.watch(flexSchemeColorStateProvider), surfaceMode: FlexSurfaceMode.highScaffoldLevelSurface, - blendLevel: 10, + blendLevel: blendLevel.toInt(), appBarOpacity: 0.00, subThemesData: const FlexSubThemesData( blendOnLevel: 24, @@ -56,7 +59,7 @@ class MyApp extends ConsumerWidget { ThemeData themeDark = FlexThemeData.dark( colors: ref.watch(flexSchemeColorStateProvider), surfaceMode: FlexSurfaceMode.highScaffoldLevelSurface, - blendLevel: 10, + blendLevel: blendLevel.toInt(), appBarOpacity: 0.00, subThemesData: const FlexSubThemesData( blendOnLevel: 24, @@ -73,7 +76,7 @@ class MyApp extends ConsumerWidget { ); final router = ref.watch(routerProvider); return MaterialApp.router( - theme: ref.watch(themeModeStateProvider) ? themeLight : themeDark, + theme: isThemeLight ? themeLight : themeDark, debugShowCheckedModeBanner: false, routeInformationParser: router.routeInformationParser, routerDelegate: router.routerDelegate, @@ -82,9 +85,3 @@ class MyApp extends ConsumerWidget { ); } } - -class ThemeAA { - static const List schemes = [ - ...FlexColor.schemesList, - ]; -} diff --git a/lib/views/more/settings/appearance/appearance_screen.dart b/lib/views/more/settings/appearance/appearance_screen.dart index d2de6aa6..ae4b50af 100644 --- a/lib/views/more/settings/appearance/appearance_screen.dart +++ b/lib/views/more/settings/appearance/appearance_screen.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:mangayomi/views/more/settings/appearance/dark_mode_button.dart'; -import 'package:mangayomi/views/more/settings/appearance/theme_selector.dart'; +import 'package:mangayomi/views/more/settings/appearance/widgets/blend_level_slider.dart'; +import 'package:mangayomi/views/more/settings/appearance/widgets/dark_mode_button.dart'; +import 'package:mangayomi/views/more/settings/appearance/widgets/theme_selector.dart'; class AppearanceScreen extends ConsumerWidget { const AppearanceScreen({super.key}); @@ -13,7 +14,7 @@ class AppearanceScreen extends ConsumerWidget { title: const Text("Appearance"), ), body: Column( - children: const [DarkModeButton(), ThemeSelector()], + children: const [DarkModeButton(), ThemeSelector(), BlendLevelSlider()], ), ); } diff --git a/lib/views/more/settings/appearance/providers/blend_level_state_provider.dart b/lib/views/more/settings/appearance/providers/blend_level_state_provider.dart new file mode 100644 index 00000000..1b247b85 --- /dev/null +++ b/lib/views/more/settings/appearance/providers/blend_level_state_provider.dart @@ -0,0 +1,16 @@ +import 'package:mangayomi/providers/hive_provider.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; +part 'blend_level_state_provider.g.dart'; + +@riverpod +class BlendLevelState extends _$BlendLevelState { + @override + double build() { + return ref.watch(hiveBoxSettings).get('blendLevel', defaultValue: 10.0)!; + } + + void setBlendLevel(double blendLevelValue) { + state = blendLevelValue; + ref.watch(hiveBoxSettings).put('blendLevel', state); + } +} diff --git a/lib/views/more/settings/appearance/providers/blend_level_state_provider.g.dart b/lib/views/more/settings/appearance/providers/blend_level_state_provider.g.dart new file mode 100644 index 00000000..179a1aee --- /dev/null +++ b/lib/views/more/settings/appearance/providers/blend_level_state_provider.g.dart @@ -0,0 +1,25 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'blend_level_state_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$blendLevelStateHash() => r'11d6ef7888230e249039d24cea788b3a9b4fb6e2'; + +/// See also [BlendLevelState]. +@ProviderFor(BlendLevelState) +final blendLevelStateProvider = + AutoDisposeNotifierProvider.internal( + BlendLevelState.new, + name: r'blendLevelStateProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$blendLevelStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$BlendLevelState = AutoDisposeNotifier; +// 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 diff --git a/lib/views/more/settings/appearance/widgets/blend_level_slider.dart b/lib/views/more/settings/appearance/widgets/blend_level_slider.dart new file mode 100644 index 00000000..4cf19298 --- /dev/null +++ b/lib/views/more/settings/appearance/widgets/blend_level_slider.dart @@ -0,0 +1,33 @@ +import 'dart:math'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:mangayomi/views/more/settings/appearance/providers/blend_level_state_provider.dart'; + +class BlendLevelSlider extends ConsumerWidget { + const BlendLevelSlider({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final blendLevel = ref.watch(blendLevelStateProvider); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Padding( + padding: EdgeInsets.only(left: 22), + child: Text( + 'Color blend Level', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + Slider( + min: 0.0, + max: 40.0, + divisions: max(40 - 1, 1), + value: blendLevel, + onChanged: (value) { + ref.read(blendLevelStateProvider.notifier).setBlendLevel(value); + }), + ], + ); + } +} diff --git a/lib/views/more/settings/appearance/dark_mode_button.dart b/lib/views/more/settings/appearance/widgets/dark_mode_button.dart similarity index 100% rename from lib/views/more/settings/appearance/dark_mode_button.dart rename to lib/views/more/settings/appearance/widgets/dark_mode_button.dart diff --git a/lib/views/more/settings/appearance/theme_selector.dart b/lib/views/more/settings/appearance/widgets/theme_selector.dart similarity index 100% rename from lib/views/more/settings/appearance/theme_selector.dart rename to lib/views/more/settings/appearance/widgets/theme_selector.dart