feat(02-02): create room providers, form screen, icon picker, and router routes
- 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>
This commit is contained in:
48
lib/features/rooms/presentation/room_providers.dart
Normal file
48
lib/features/rooms/presentation/room_providers.dart
Normal file
@@ -0,0 +1,48 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user