import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:im_app/app/di/user_provider.dart'; import 'package:im_app/domain/entities/user.dart'; import 'package:im_app/domain/repositories/user_repository.dart'; /// 单个用户状态管理 (family — 每个 uid 独立 notifier) /// /// ## 用法 /// ```dart /// // 监听 — 自动重建 /// final userAsync = ref.watch(userNotifierProvider(123)); /// /// // 即时读取,无需 await /// final user = ref.read(userNotifierProvider(123).notifier).current; /// /// // 插入或替换 /// ref.read(userNotifierProvider(123).notifier).insertOrReplaceUser(user); /// /// // 单个更新 /// ref.read(userNotifierProvider(123).notifier).updateUser( /// user.copyWith(nickname: 'New Name'), /// ); /// /// // 批量更新 /// ref.read(userNotifierProvider(123).notifier).updateUsers(updatedList); /// ``` class UserNotifier extends FamilyAsyncNotifier { User? _cached; UserRepository get _repo => ref.watch(userRepositoryProvider); @override Future build(int arg) async { ref.onDispose(() => _cached = null); _repo.watchUser(arg).listen((user) { _cached = user; state = AsyncData(user); }); return _repo.getUser(arg); } // ── 即时访问,无需 await ────────────────────────────────────────────────── User? get current => _cached; // ── 写入 ───────────────────────────────────────────────────────────────── /// 插入或替换单个用户 Future insertOrReplaceUser(User user) async { await _repo.insertOrReplaceUser(user); } /// 更新单个用户所有字段,按 uid 匹配 Future updateUser(User user) async { await _repo.updateUser(user); } /// 批量更新用户,每条按 uid 匹配更新所有字段 Future updateUsers(List users) async { await _repo.updateUsersBatch(users); } // ── 删除 ───────────────────────────────────────────────────────────────── Future deleteUser() async { await _repo.deleteUser(arg); _cached = null; state = const AsyncData(null); } } final userNotifierProvider = AsyncNotifierProvider.family(UserNotifier.new);