step 25 : upload ktp, qrcode string, edit data,
check token expired 10 menit dari expired_date
This commit is contained in:
@@ -7,15 +7,17 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:image/image.dart' as img;
|
||||
import 'package:mobile_scanner/mobile_scanner.dart';
|
||||
import 'package:scanktpflutter/model/no-login/no_login_edit_person_ktp_model.dart';
|
||||
import 'package:scanktpflutter/model/no-login/no_login_sex_model.dart';
|
||||
import '../../app/app_extension.dart';
|
||||
import '../../app/route.dart';
|
||||
|
||||
import '../../app/constant.dart';
|
||||
import '../../model/edit_person_model.dart';
|
||||
import '../../model/sex_model.dart';
|
||||
import '../../provider/current_user_provider.dart';
|
||||
import '../../provider/no-login-scan/no_login_scan_provider.dart';
|
||||
import '../../provider/no-login/no_login_current_user_provider.dart';
|
||||
import '../../widget/customsnackbarwidget.dart';
|
||||
import '../home/list_riwayat_scan_provider.dart';
|
||||
import '../no-login-home/no_login_riwayat_scan_provider.dart';
|
||||
import '../no-login/no_login_refresh_token_provider.dart';
|
||||
import 'no_login_upload_scan_provider.dart';
|
||||
|
||||
class NoLoginScanScreen extends HookConsumerWidget {
|
||||
@@ -43,11 +45,40 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
final croppedImage = useState<File?>(null);
|
||||
final isLoading = useState<bool>(false);
|
||||
final isLoadingUpload = useState<bool>(false);
|
||||
final currentUser = ref.watch(currentUserProvider);
|
||||
|
||||
// auth
|
||||
final currentUser = ref.watch(noLoginCurrentUserProvider);
|
||||
final host = currentUser?.host ?? "";
|
||||
final userId = currentUser?.model.userId ?? "";
|
||||
final client_id = currentUser?.client_id ?? "";
|
||||
final expire_date = currentUser?.expire_date ?? "";
|
||||
final token = currentUser?.token ?? "";
|
||||
final selectedResolution =
|
||||
useState<ResolutionPreset>(ResolutionPreset.medium);
|
||||
final readProsesAksi = ref.watch(noLoginprosesAksi);
|
||||
final base64Post = useState("");
|
||||
|
||||
useEffect(() {
|
||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
|
||||
if (client_id == "0" || token == "") {
|
||||
// not logged in and doesn't have token
|
||||
Navigator.of(context)
|
||||
.pushNamedAndRemoveUntil(noLoginRoute, (route) => false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (token != "") {
|
||||
if (await isTokenExpired() == true) {
|
||||
print("Token expired, refreshing...");
|
||||
ref.read(noLoginRefreshTokenProvider.notifier).refreshToken(
|
||||
client_id: client_id,
|
||||
host: host,
|
||||
expire_date: expire_date,
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
return () {};
|
||||
}, [currentUser]);
|
||||
|
||||
Future<void> initializeCamera() async {
|
||||
try {
|
||||
@@ -85,13 +116,13 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
if (loadingScreen.value) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: (cameraOn.value == false)
|
||||
title: (judulTombol.value == "SCAN")
|
||||
? Text(
|
||||
judulAppBar.value,
|
||||
judulPosisiHp.value,
|
||||
style: Constant.titlePosisiHP(context: context),
|
||||
)
|
||||
: Text(
|
||||
judulPosisiHp.value,
|
||||
judulAppBar.value,
|
||||
style: Constant.titlePosisiHP(context: context),
|
||||
),
|
||||
automaticallyImplyLeading: false,
|
||||
@@ -204,6 +235,54 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
return () {};
|
||||
}, []);
|
||||
|
||||
// void getRiwayat
|
||||
void getRiwayat() async {
|
||||
if (await isTokenExpired() == true) {
|
||||
ref.read(noLoginprosesAksi.notifier).state = Constant.getRiwayat;
|
||||
print("Token expired, refreshing...");
|
||||
ref.read(noLoginRefreshTokenProvider.notifier).refreshToken(
|
||||
client_id: client_id,
|
||||
host: host,
|
||||
expire_date: expire_date,
|
||||
);
|
||||
} else {
|
||||
ref.read(noLoginRiwayatScanProvider.notifier).noLoginRiwayatScan(
|
||||
host: host,
|
||||
client_id: client_id,
|
||||
token: token,
|
||||
expire_date: expire_date,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// void prosesUpload
|
||||
void prosesUpload() async {
|
||||
print("Token expired, refreshing...");
|
||||
print("client_id : $client_id");
|
||||
print("host : $host");
|
||||
print("expire_date : $expire_date");
|
||||
print("token : $token");
|
||||
print("qrCodeStr.value : ${qrCodeStr.value}");
|
||||
|
||||
if (await isTokenExpired() == true) {
|
||||
ref.read(noLoginprosesAksi.notifier).state = Constant.postUploadFoto;
|
||||
print("Token expired, refreshing...");
|
||||
ref.read(noLoginRefreshTokenProvider.notifier).refreshToken(
|
||||
client_id: client_id,
|
||||
host: host,
|
||||
expire_date: expire_date,
|
||||
);
|
||||
} else {
|
||||
ref.read(noLoginUploadScanProvider.notifier).uploadScan(
|
||||
host: host,
|
||||
base64File: base64Post.value,
|
||||
client_id: client_id,
|
||||
qr_code: qrCodeStr.value,
|
||||
token: token,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> initializeCameraAfterChangeResolution() async {
|
||||
final cameras = await availableCameras();
|
||||
cameraController.value = CameraController(
|
||||
@@ -290,11 +369,8 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
// post ke BE
|
||||
Uint8List finalBytes = await croppedImage.value!.readAsBytes();
|
||||
String base64String = base64Encode(finalBytes);
|
||||
ref.read(noLoginUploadScanProvider.notifier).uploadScan(
|
||||
host: host,
|
||||
base64File: base64String,
|
||||
userId: userId,
|
||||
);
|
||||
base64Post.value = base64String;
|
||||
prosesUpload();
|
||||
} catch (e) {
|
||||
print("Error capturing image: $e");
|
||||
} finally {
|
||||
@@ -302,12 +378,12 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
// listRiwayProvider
|
||||
ref.listen(listRiwayatScanProvider, (prev, next) {
|
||||
if (next is ListRiwayatScanStateLoading) {
|
||||
// isLoading.value = true;
|
||||
} else if (next is ListRiwayatScanStateError) {
|
||||
// isLoading.value = false;
|
||||
// refreshToken Provider
|
||||
ref.listen(noLoginRefreshTokenProvider, (prev, next) async {
|
||||
if (next is NoLoginRefreshTokenStateLoading) {
|
||||
isLoading.value = true;
|
||||
} else if (next is NoLoginRefreshTokenStateError) {
|
||||
isLoading.value = false;
|
||||
// errorMessage.value = next.message;
|
||||
snackbarWidget(
|
||||
context,
|
||||
@@ -315,12 +391,47 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
snackbarType.error,
|
||||
Duration(seconds: 3),
|
||||
);
|
||||
} else if (next is ListRiwayatScanStateDone) {
|
||||
// isLoading.value = false;
|
||||
} else if (next is NoLoginRefreshTokenStateDone) {
|
||||
isLoading.value = false;
|
||||
|
||||
// check proses aksi yg berlangsung
|
||||
if (readProsesAksi == Constant.getRiwayat) {
|
||||
ref.read(noLoginRiwayatScanProvider.notifier).noLoginRiwayatScan(
|
||||
host: host,
|
||||
client_id: client_id,
|
||||
token: token,
|
||||
expire_date: expire_date,
|
||||
);
|
||||
} else if (readProsesAksi == Constant.postUploadFoto) {
|
||||
ref.read(noLoginUploadScanProvider.notifier).uploadScan(
|
||||
host: host,
|
||||
base64File: base64Post.value,
|
||||
client_id: client_id,
|
||||
qr_code: qrCodeStr.value,
|
||||
token: token,
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// listRiwayProvider
|
||||
ref.listen(noLoginRiwayatScanProvider, (prev, next) async {
|
||||
if (next is NoLoginRiwayatScanStateLoading) {
|
||||
isLoading.value = true;
|
||||
} else if (next is NoLoginRiwayatScanStateError) {
|
||||
isLoading.value = false;
|
||||
// errorMessage.value = next.message;
|
||||
snackbarWidget(
|
||||
context,
|
||||
next.message,
|
||||
snackbarType.error,
|
||||
Duration(seconds: 3),
|
||||
);
|
||||
} else if (next is NoLoginRiwayatScanStateDone) {
|
||||
// isLoading.value = false;
|
||||
Navigator.of(context).pop();
|
||||
Navigator.of(context).pushNamed(
|
||||
editScanRoute,
|
||||
noLoginEditScanRoute,
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -344,13 +455,13 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
ref.read(selectedPersonIdx.notifier).state = next.model[0].personID;
|
||||
|
||||
// set SEX
|
||||
ref.read(eSexSelected.notifier).state = SexModel(
|
||||
ref.read(eSexSelected.notifier).state = NoLoginSexModel(
|
||||
M_SexID: next.model[0].personSex,
|
||||
M_SexCode: "",
|
||||
m_sexname: next.model[0].m_sexname,
|
||||
M_SexNameLang: "");
|
||||
|
||||
ref.read(selectedEdit.notifier).state = EditPersonModel(
|
||||
ref.read(selectedEdit.notifier).state = NoLoginEditPersonKtpModel(
|
||||
personID: next.model[0].personID,
|
||||
personNIK: next.model[0].personNIK,
|
||||
personName: next.model[0].personName,
|
||||
@@ -358,12 +469,9 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
personDob: next.model[0].personDob,
|
||||
personSex: next.model[0].personSex,
|
||||
personUrl: next.model[0].personUrl,
|
||||
personQrCode: next.model[0].personQrCode,
|
||||
);
|
||||
|
||||
ref.read(listRiwayatScanProvider.notifier).listRiwayatScan(
|
||||
host: host,
|
||||
userId: userId,
|
||||
);
|
||||
getRiwayat();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -384,7 +492,7 @@ class NoLoginScanScreen extends HookConsumerWidget {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: (cameraOn.value == false)
|
||||
title: (cameraOrScanner.value == "SCAN")
|
||||
? Text(
|
||||
judulAppBar.value,
|
||||
style: Constant.titlePosisiHP(context: context),
|
||||
|
||||
Reference in New Issue
Block a user