Theme configuration
This commit is contained in:
9
lib/providers/app_info_provider.dart
Normal file
9
lib/providers/app_info_provider.dart
Normal file
@@ -0,0 +1,9 @@
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'app_info_provider.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
PackageInfo appInfo(AppInfoRef ref) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
24
lib/providers/app_info_provider.g.dart
Normal file
24
lib/providers/app_info_provider.g.dart
Normal file
@@ -0,0 +1,24 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'app_info_provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$appInfoHash() => r'c1b99fe8e0ba1b1ba04aa2c1ae066a3de9f1dac1';
|
||||
|
||||
/// See also [appInfo].
|
||||
@ProviderFor(appInfo)
|
||||
final appInfoProvider = Provider<PackageInfo>.internal(
|
||||
appInfo,
|
||||
name: r'appInfoProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product') ? null : _$appInfoHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef AppInfoRef = ProviderRef<PackageInfo>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
@@ -1,18 +1,62 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:linkdy/constants/shared_preferences_keys.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import 'package:linkdy/providers/shared_preferences_provider.dart';
|
||||
import 'package:linkdy/constants/enums.dart';
|
||||
import 'package:linkdy/models/app_status.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
part 'app_status_provider.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class AppStatusProvider extends _$AppStatusProvider {
|
||||
class AppStatus extends _$AppStatus {
|
||||
@override
|
||||
AppStatus build() {
|
||||
return AppStatus();
|
||||
AppStatusModel build() {
|
||||
final sharedPreferences = ref.watch(sharedPreferencesProvider);
|
||||
return AppStatusModel(
|
||||
selectedColor: sharedPreferences.getInt(SharedPreferencesKeys.selectedColor) ?? 0,
|
||||
selectedTheme: SelectedTheme.values[sharedPreferences.getInt(SharedPreferencesKeys.selectedTheme) ?? 0],
|
||||
useDynamicTheme: sharedPreferences.getBool(SharedPreferencesKeys.useDynamicTheme) ?? true,
|
||||
);
|
||||
}
|
||||
|
||||
void setSharedPreferencesInstance(SharedPreferences instance) {
|
||||
state = state.copyWith(sharedPreferences: instance);
|
||||
void setTheme(SelectedTheme theme) {
|
||||
state.selectedTheme = theme;
|
||||
ref.read(sharedPreferencesProvider).setInt(SharedPreferencesKeys.selectedTheme, theme.index);
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
void setSupportsDynamicTheme(bool value) {
|
||||
state.supportsDynamicTheme = value;
|
||||
}
|
||||
|
||||
void setUseDynamicTheme(bool value) {
|
||||
state.useDynamicTheme = value;
|
||||
ref.read(sharedPreferencesProvider).setBool(SharedPreferencesKeys.useDynamicTheme, value);
|
||||
ref.notifyListeners();
|
||||
}
|
||||
|
||||
void setSelectedColor(int value) {
|
||||
state.selectedColor = value;
|
||||
ref.read(sharedPreferencesProvider).setInt(SharedPreferencesKeys.selectedColor, value);
|
||||
ref.notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
ThemeMode selectedTheme(SelectedThemeRef ref) {
|
||||
switch (ref.watch(appStatusProvider).selectedTheme) {
|
||||
case SelectedTheme.system:
|
||||
return SchedulerBinding.instance.window.platformBrightness == Brightness.light ? ThemeMode.light : ThemeMode.dark;
|
||||
|
||||
case SelectedTheme.light:
|
||||
return ThemeMode.light;
|
||||
|
||||
case SelectedTheme.dark:
|
||||
return ThemeMode.dark;
|
||||
|
||||
default:
|
||||
return ThemeMode.light;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,21 +6,34 @@ part of 'app_status_provider.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$appStatusProviderHash() => r'ba585a0cf3cf46f88f5895eacec3e992bf0cd42f';
|
||||
String _$selectedThemeHash() => r'b820484a59ed72419c5b4cad0b894a030b54c702';
|
||||
|
||||
/// See also [AppStatusProvider].
|
||||
@ProviderFor(AppStatusProvider)
|
||||
final appStatusProviderProvider =
|
||||
NotifierProvider<AppStatusProvider, AppStatus>.internal(
|
||||
AppStatusProvider.new,
|
||||
name: r'appStatusProviderProvider',
|
||||
/// See also [selectedTheme].
|
||||
@ProviderFor(selectedTheme)
|
||||
final selectedThemeProvider = AutoDisposeProvider<ThemeMode>.internal(
|
||||
selectedTheme,
|
||||
name: r'selectedThemeProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$appStatusProviderHash,
|
||||
: _$selectedThemeHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$AppStatusProvider = Notifier<AppStatus>;
|
||||
typedef SelectedThemeRef = AutoDisposeProviderRef<ThemeMode>;
|
||||
String _$appStatusHash() => r'cde4567157dd5a89f842a2818efc199db3585232';
|
||||
|
||||
/// See also [AppStatus].
|
||||
@ProviderFor(AppStatus)
|
||||
final appStatusProvider = NotifierProvider<AppStatus, AppStatusModel>.internal(
|
||||
AppStatus.new,
|
||||
name: r'appStatusProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product') ? null : _$appStatusHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$AppStatus = Notifier<AppStatusModel>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:linkdy/config/shared_preferences_keys.dart';
|
||||
import 'package:linkdy/constants/shared_preferences_keys.dart';
|
||||
import 'package:linkdy/providers/shared_preferences_provider.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
final sharedPreferencesProvider = Provider<SharedPreferences>((ref) {
|
||||
part 'shared_preferences_provider.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
SharedPreferences sharedPreferences(SharedPreferencesRef ref) {
|
||||
throw UnimplementedError();
|
||||
});
|
||||
}
|
||||
|
||||
25
lib/providers/shared_preferences_provider.g.dart
Normal file
25
lib/providers/shared_preferences_provider.g.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'shared_preferences_provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$sharedPreferencesHash() => r'3a9f8412df34c1653d08100c9826aa2125b80f7f';
|
||||
|
||||
/// See also [sharedPreferences].
|
||||
@ProviderFor(sharedPreferences)
|
||||
final sharedPreferencesProvider = Provider<SharedPreferences>.internal(
|
||||
sharedPreferences,
|
||||
name: r'sharedPreferencesProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$sharedPreferencesHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef SharedPreferencesRef = ProviderRef<SharedPreferences>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
Reference in New Issue
Block a user