Files
minhthu/lib/features/users/presentation/providers/users_provider.dart
2025-10-28 23:46:07 +07:00

58 lines
1.4 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../domain/usecases/get_users_usecase.dart';
import '../../domain/usecases/sync_users_usecase.dart';
import 'users_state.dart';
/// State notifier for users
class UsersNotifier extends StateNotifier<UsersState> {
final GetUsersUseCase getUsersUseCase;
final SyncUsersUseCase syncUsersUseCase;
UsersNotifier({
required this.getUsersUseCase,
required this.syncUsersUseCase,
}) : super(const UsersState()) {
// Load local users on initialization
getUsers();
}
/// Get users from local storage (or API if not cached)
Future<void> getUsers() async {
state = state.copyWith(isLoading: true, error: null);
final result = await getUsersUseCase();
result.fold(
(failure) => state = state.copyWith(
isLoading: false,
error: failure.message,
),
(users) => state = state.copyWith(
users: users,
isLoading: false,
error: null,
),
);
}
/// Sync users from API (force refresh)
Future<void> syncUsers() async {
state = state.copyWith(isLoading: true, error: null);
final result = await syncUsersUseCase();
result.fold(
(failure) => state = state.copyWith(
isLoading: false,
error: failure.message,
),
(users) => state = state.copyWith(
users: users,
isLoading: false,
error: null,
),
);
}
}