import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../core/api/api_client.dart'; import '../core/auth/auth_state.dart'; import '../models/user.dart'; import '../repositories/user_repository.dart'; final userRepositoryProvider = Provider((ref) { return UserRepository(ref.watch(apiClientProvider)); }); final userListProvider = AsyncNotifierProvider>( UserListNotifier.new, ); class UserListNotifier extends AsyncNotifier> { List _cache = []; @override Future> build() async { ref.watch(authStateProvider.select((s) => s.user?.shopId)); try { final result = await ref.read(userRepositoryProvider).list(); _cache = result; return result; } catch (_) { if (_cache.isNotEmpty) return _cache; rethrow; } } Future reload() async { state = const AsyncValue.loading(); try { final result = await ref.read(userRepositoryProvider).list(); _cache = result; state = AsyncValue.data(result); } catch (e, st) { if (_cache.isNotEmpty) { state = AsyncValue.data(_cache); } else { state = AsyncValue.error(e, st); } } } Future createUser(Map data) async { await ref.read(userRepositoryProvider).create(data); await reload(); } Future updateUser(int id, Map data) async { await ref.read(userRepositoryProvider).update(id, data); await reload(); } Future resetPassword(int id, String newPassword) async { await ref.read(userRepositoryProvider).resetPassword(id, newPassword); } }