Files
scan-ktp/lib/screen/no-login-home/no_login_riwayat_scan_provider.dart

91 lines
2.7 KiB
Dart

import 'package:equatable/equatable.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:scanktpflutter/screen/no-login/no_login_refresh_token_provider.dart';
import '../../app/app_extension.dart';
import '../../repository/no-login-scan/no_login_scan_repository.dart';
import '../../provider/scan_provider.dart';
import '../../model/person_ktp_model.dart';
import '../../provider/dio_provider.dart';
import '../../repository/base_repository.dart';
// 3. state provider
final noLoginRiwayatScanProvider =
StateNotifierProvider<NoLoginRiwayatScanNotifier, NoLoginRiwayatScanState>(
(ref) => NoLoginRiwayatScanNotifier(ref: ref));
// 2. notifier
class NoLoginRiwayatScanNotifier
extends StateNotifier<NoLoginRiwayatScanState> {
final Ref ref;
NoLoginRiwayatScanNotifier({required this.ref})
: super(NoLoginRiwayatScanStateInit());
void noLoginRiwayatScan({
required String host,
required String userId,
required String token,
required String expire_date,
}) async {
try {
state = NoLoginRiwayatScanStateLoading();
final resp = await NoLoginScanRepository(
dio: ref.read(dioProvider),
).listRiwayatScanRepo(
host: host,
userId: userId,
token: token,
);
// print(resp);
state = NoLoginRiwayatScanStateDone(model: resp);
ref.read(listScanRwt.notifier).state = resp;
// // fungsi check token expired
// if (await isTokenExpired()) {
// print("Token expired, refreshing...");
// ref.read(noLoginRefreshTokenProvider.notifier).refreshToken(
// client_id: userId,
// host: host,
// expire_date:expire_date,
// );
// }
} catch (e) {
if (e is BaseRepositoryException) {
state = NoLoginRiwayatScanStateError(message: e.message);
} else {
state = NoLoginRiwayatScanStateError(message: e.toString());
}
}
}
}
// 1. state
abstract class NoLoginRiwayatScanState extends Equatable {
final DateTime date;
const NoLoginRiwayatScanState(this.date);
@override
List<Object?> get props => [date];
}
class NoLoginRiwayatScanStateInit extends NoLoginRiwayatScanState {
NoLoginRiwayatScanStateInit() : super(DateTime.now());
}
class NoLoginRiwayatScanStateLoading extends NoLoginRiwayatScanState {
NoLoginRiwayatScanStateLoading() : super(DateTime.now());
}
class NoLoginRiwayatScanStateError extends NoLoginRiwayatScanState {
final String message;
NoLoginRiwayatScanStateError({
required this.message,
}) : super(DateTime.now());
}
class NoLoginRiwayatScanStateDone extends NoLoginRiwayatScanState {
final List<PersonKtp> model;
NoLoginRiwayatScanStateDone({
required this.model,
}) : super(DateTime.now());
}