feat: refactor RecipesScreen and RecipesViewNotifier to support dynamic view modes and column selection
This commit is contained in:
@@ -1,21 +1,36 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
const _prefsKey = 'recipes_grid_columns';
|
||||
enum RecipesViewMode { grid, list }
|
||||
|
||||
class RecipesViewNotifier extends AsyncNotifier<({RecipesViewMode mode, int columns})> {
|
||||
static const _modeKey = 'recipes_view_mode';
|
||||
static const _columnsKey = 'recipes_grid_columns';
|
||||
|
||||
class RecipesGridNotifier extends AsyncNotifier<int> {
|
||||
@override
|
||||
Future<int> build() async {
|
||||
Future<({RecipesViewMode mode, int columns})> build() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
return prefs.getInt(_prefsKey) ?? 2;
|
||||
final mode = RecipesViewMode.values[prefs.getInt(_modeKey) ?? 0];
|
||||
final columns = prefs.getInt(_columnsKey) ?? 2;
|
||||
return (mode: mode, columns: columns);
|
||||
}
|
||||
|
||||
Future<void> toggleMode() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final current = state.valueOrNull ?? (mode: RecipesViewMode.grid, columns: 2);
|
||||
final newMode = current.mode == RecipesViewMode.grid ? RecipesViewMode.list : RecipesViewMode.grid;
|
||||
await prefs.setInt(_modeKey, newMode.index);
|
||||
state = AsyncData((mode: newMode, columns: current.columns));
|
||||
}
|
||||
|
||||
Future<void> setColumns(int columns) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setInt(_prefsKey, columns);
|
||||
state = AsyncData(columns);
|
||||
final current = state.valueOrNull ?? (mode: RecipesViewMode.grid, columns: 2);
|
||||
await prefs.setInt(_columnsKey, columns);
|
||||
state = AsyncData((mode: current.mode, columns: columns));
|
||||
}
|
||||
}
|
||||
|
||||
final recipesGridProvider =
|
||||
AsyncNotifierProvider<RecipesGridNotifier, int>(RecipesGridNotifier.new);
|
||||
final recipesViewProvider =
|
||||
AsyncNotifierProvider<RecipesViewNotifier, ({RecipesViewMode mode, int columns})>(
|
||||
RecipesViewNotifier.new);
|
||||
|
||||
Reference in New Issue
Block a user