// 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 { // 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 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 { 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 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()); }