38 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flutter/material.dart';
 | 
						|
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
						|
 | 
						|
import '../../../services/storage/prefs.dart';
 | 
						|
 | 
						|
part 'settings.g.dart';
 | 
						|
 | 
						|
/// The current theme mode of the app.
 | 
						|
///
 | 
						|
/// When this provider is first read, it will read the saved value from storage,
 | 
						|
/// and defaults to [ThemeMode.system] if the theme mode has not been set before.
 | 
						|
@riverpod
 | 
						|
class CurrentThemeMode extends _$CurrentThemeMode {
 | 
						|
  @override
 | 
						|
  ThemeMode build() {
 | 
						|
    final prefs = ref.watch(prefsProvider).requireValue;
 | 
						|
 | 
						|
    // Load the saved theme mode setting from shared preferences.
 | 
						|
    final themeModeName = prefs.getString('themeMode');
 | 
						|
 | 
						|
    // Return [ThemeMode] based on the saved setting, or [ThemeMode.system]
 | 
						|
    // if there's no saved setting yet.
 | 
						|
    return ThemeMode.values.singleWhere(
 | 
						|
          (themeMode) => themeMode.name == themeModeName,
 | 
						|
      orElse: () => ThemeMode.system,
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  void set(ThemeMode themeMode) {
 | 
						|
    final prefs = ref.read(prefsProvider).requireValue;
 | 
						|
 | 
						|
    // Save the new theme mode to shared preferences.
 | 
						|
    prefs.setString('themeMode', themeMode.name);
 | 
						|
 | 
						|
    ref.invalidateSelf();
 | 
						|
  }
 | 
						|
}
 |