Files
scan-ktp/lib/screen/no-login/no_login_refresh_token_provider.dart

198 lines
6.3 KiB
Dart

// import 'dart:convert';
// import 'package:equatable/equatable.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart';
// import '../../provider/no-login/no_login_current_user_provider.dart';
// import '../../model/no-login/no_login_auth_model.dart';
// import '../../repository/no-login/no_login_auth_repository.dart';
// import 'package:shared_preferences/shared_preferences.dart';
// import '../../app/constant.dart';
// import '../../provider/dio_provider.dart';
// import '../../repository/base_repository.dart';
// // 3. state provider
// final noLoginRefreshTokenProvider = StateNotifierProvider<
// NoLoginRefreshTokenNotifier,
// NoLoginRefreshTokenState>((ref) => NoLoginRefreshTokenNotifier(ref: ref));
// // 2. notifier
// class NoLoginRefreshTokenNotifier
// extends StateNotifier<NoLoginRefreshTokenState> {
// final Ref ref;
// NoLoginRefreshTokenNotifier({required this.ref})
// : super(NoLoginRefreshTokenStateInit());
// void refreshToken({
// required String client_id,
// required String host,
// required String expire_date,
// }) async {
// try {
// state = NoLoginRefreshTokenStateLoading();
// final resp = await NoLoginAuthRepository(
// dio: ref.read(dioProvider),
// ).refreshToken(
// client_id: client_id,
// host: host,
// expire_date: expire_date,
// );
// // print(resp);
// state = NoLoginRefreshTokenStateDone(model: resp);
// //Simpan ke token
// final shared = await SharedPreferences.getInstance();
// String expireDateStr = resp.expire_date;
// if (!expireDateStr.contains("T")) {
// expireDateStr = expireDateStr.replaceFirst(" ", "T");
// }
// // Simpan dalam format ISO 8601
// // await shared.setString("expire_date", expireDateStr);
// final token = jsonEncode({
// "host": host,
// "date": DateTime.now().toString(),
// "token": resp.token,
// "client_id": resp.client_id,
// // "expire_date": resp.expire_date,
// "expire_date": expireDateStr,
// "isLogin": resp.isLogin,
// });
// await shared.setString(Constant.bearerName, token);
// ref.read(noLoginCurrentUserProvider.notifier).state = resp;
// // print(shared.getString(Constant.bearerName));
// } catch (e) {
// if (e is BaseRepositoryException) {
// state = NoLoginRefreshTokenStateError(message: e.message);
// } else {
// state = NoLoginRefreshTokenStateError(message: e.toString());
// }
// }
// }
// }
// // 1. state
// abstract class NoLoginRefreshTokenState extends Equatable {
// final DateTime date;
// const NoLoginRefreshTokenState(this.date);
// @override
// List<Object?> get props => [date];
// }
// class NoLoginRefreshTokenStateInit extends NoLoginRefreshTokenState {
// NoLoginRefreshTokenStateInit() : super(DateTime.now());
// }
// class NoLoginRefreshTokenStateLoading extends NoLoginRefreshTokenState {
// NoLoginRefreshTokenStateLoading() : super(DateTime.now());
// }
// class NoLoginRefreshTokenStateError extends NoLoginRefreshTokenState {
// final String message;
// NoLoginRefreshTokenStateError({
// required this.message,
// }) : super(DateTime.now());
// }
// class NoLoginRefreshTokenStateDone extends NoLoginRefreshTokenState {
// final NoLoginAuthModel model;
// NoLoginRefreshTokenStateDone({
// required this.model,
// }) : super(DateTime.now());
// }
// new
import 'dart:convert';
import 'package:equatable/equatable.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../provider/no-login/no_login_current_user_provider.dart';
import '../../model/no-login/no_login_auth_model.dart';
import '../../repository/no-login/no_login_auth_repository.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../app/constant.dart';
import '../../provider/dio_provider.dart';
import '../../repository/base_repository.dart';
// 3. State Provider
final noLoginRefreshTokenProvider = StateNotifierProvider<
NoLoginRefreshTokenNotifier,
NoLoginRefreshTokenState>((ref) => NoLoginRefreshTokenNotifier(ref: ref));
// 2. Notifier
class NoLoginRefreshTokenNotifier
extends StateNotifier<NoLoginRefreshTokenState> {
final Ref ref;
NoLoginRefreshTokenNotifier({required this.ref})
: super(NoLoginRefreshTokenStateInit());
void refreshToken({
required String client_id,
required String host,
required String expire_date,
}) async {
try {
state = NoLoginRefreshTokenStateLoading();
final resp = await NoLoginAuthRepository(
dio: ref.read(dioProvider),
).refreshToken(
client_id: client_id,
host: host,
expire_date: expire_date,
);
// Simpan token ke SharedPreferences
final shared = await SharedPreferences.getInstance();
final tokenData = jsonEncode({
"expire_date": resp.expire_date,
"host": host,
"date": DateTime.now().toString(),
"token": resp.token,
"client_id": resp.client_id,
"isLogin": resp.isLogin,
});
await shared.setString(Constant.bearerName, tokenData);
ref.read(noLoginCurrentUserProvider.notifier).state = resp;
state = NoLoginRefreshTokenStateDone(model: resp);
} catch (e) {
if (e is BaseRepositoryException) {
state = NoLoginRefreshTokenStateError(message: e.message);
} else {
state = NoLoginRefreshTokenStateError(message: e.toString());
}
}
}
}
// 1. State
abstract class NoLoginRefreshTokenState extends Equatable {
final DateTime date;
const NoLoginRefreshTokenState(this.date);
@override
List<Object?> get props => [date];
}
class NoLoginRefreshTokenStateInit extends NoLoginRefreshTokenState {
NoLoginRefreshTokenStateInit() : super(DateTime.now());
}
class NoLoginRefreshTokenStateLoading extends NoLoginRefreshTokenState {
NoLoginRefreshTokenStateLoading() : super(DateTime.now());
}
class NoLoginRefreshTokenStateError extends NoLoginRefreshTokenState {
final String message;
NoLoginRefreshTokenStateError({
required this.message,
}) : super(DateTime.now());
}
class NoLoginRefreshTokenStateDone extends NoLoginRefreshTokenState {
final NoLoginAuthModel model;
NoLoginRefreshTokenStateDone({
required this.model,
}) : super(DateTime.now());
}