- Add Riverpod providers (roomWithStatsList, RoomActions) connecting to RoomsDao - Create RoomFormScreen with name field, icon picker preview, create/edit modes - Create IconPickerSheet bottom sheet with curated Material Icons grid - Add nested GoRouter routes: /rooms/new, /rooms/:roomId, /rooms/:roomId/edit - Add placeholder TaskListScreen and TaskFormScreen for Plan 03 routes - Add 11 new German localization keys for room management UI - Add flutter_reorderable_grid_view dependency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
49 lines
1.5 KiB
Dart
49 lines
1.5 KiB
Dart
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
|
|
import 'package:household_keeper/core/database/database.dart';
|
|
import 'package:household_keeper/core/providers/database_provider.dart';
|
|
import 'package:household_keeper/features/rooms/data/rooms_dao.dart';
|
|
|
|
part 'room_providers.g.dart';
|
|
|
|
/// Watches all rooms with computed task stats (due count, cleanliness ratio).
|
|
@riverpod
|
|
Stream<List<RoomWithStats>> roomWithStatsList(Ref ref) {
|
|
final db = ref.watch(appDatabaseProvider);
|
|
return db.roomsDao.watchRoomWithStats();
|
|
}
|
|
|
|
/// Async notifier for room mutation actions (create, update, delete, reorder).
|
|
@riverpod
|
|
class RoomActions extends _$RoomActions {
|
|
@override
|
|
FutureOr<void> build() {}
|
|
|
|
/// Create a new room. Returns the auto-generated id.
|
|
Future<int> createRoom(String name, String iconName) async {
|
|
final db = ref.read(appDatabaseProvider);
|
|
return db.roomsDao.insertRoom(RoomsCompanion.insert(
|
|
name: name,
|
|
iconName: iconName,
|
|
));
|
|
}
|
|
|
|
/// Update an existing room.
|
|
Future<void> updateRoom(Room room) async {
|
|
final db = ref.read(appDatabaseProvider);
|
|
await db.roomsDao.updateRoom(room);
|
|
}
|
|
|
|
/// Delete a room and cascade to its tasks and completions.
|
|
Future<void> deleteRoom(int roomId) async {
|
|
final db = ref.read(appDatabaseProvider);
|
|
await db.roomsDao.deleteRoom(roomId);
|
|
}
|
|
|
|
/// Reorder rooms by their IDs in the new order.
|
|
Future<void> reorderRooms(List<int> roomIds) async {
|
|
final db = ref.read(appDatabaseProvider);
|
|
await db.roomsDao.reorderRooms(roomIds);
|
|
}
|
|
}
|