feat: User/onboarding persistence — save to DB, load on startup [AITM-233]
This commit is contained in:
@@ -4,4 +4,5 @@ abstract final class Routes {
|
||||
static const pet = '/pet';
|
||||
static const zen = '/zen';
|
||||
static const profile = '/profile';
|
||||
static const onboarding = '/onboarding';
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../../../domain/entities/pet_state_entity.dart';
|
||||
import '../../../domain/entities/pet_type.dart';
|
||||
import '../../../domain/entities/user_entity.dart';
|
||||
import 'task_providers.dart';
|
||||
|
||||
/// Pet mood states.
|
||||
enum PetMood {
|
||||
|
||||
@@ -2,8 +2,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../../data/db/app_database.dart';
|
||||
import '../../../data/repositories/task_repository.dart';
|
||||
import '../../../data/repositories/user_repository.dart';
|
||||
import '../../../domain/entities/task_entity.dart';
|
||||
import '../../../domain/entities/task_status.dart';
|
||||
import '../../../domain/entities/user_entity.dart';
|
||||
|
||||
// ── Infrastructure providers ──
|
||||
|
||||
@@ -19,6 +21,17 @@ final taskRepositoryProvider = Provider<TaskRepository>((ref) {
|
||||
return TaskRepository(ref.watch(appDatabaseProvider));
|
||||
});
|
||||
|
||||
/// User repository backed by Drift.
|
||||
final userRepositoryProvider = Provider<UserRepository>((ref) {
|
||||
return UserRepository(ref.watch(appDatabaseProvider));
|
||||
});
|
||||
|
||||
/// Current user loaded from the database. Null if onboarding not complete.
|
||||
final currentUserProvider = FutureProvider<UserEntity?>((ref) {
|
||||
final repo = ref.watch(userRepositoryProvider);
|
||||
return repo.getCurrentUser();
|
||||
});
|
||||
|
||||
// ── Task list (reactive stream from DB) ──
|
||||
|
||||
const _userId = 'user-1';
|
||||
|
||||
Reference in New Issue
Block a user