import 'dart:convert'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:scanktpflutter/model/no-login/no_login_auth_model.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../app/constant.dart'; import '../../provider/no-login/no_login_current_user_provider.dart'; import '../../repository/no-login/no_login_auth_repository.dart'; import '../../provider/dio_provider.dart'; import '../../repository/base_repository.dart'; // // 3. state provider // final noLoginProvider = StateNotifierProvider( // (ref) => NoLoginNotifier(ref: ref)); // // 2. notifier // class NoLoginNotifier extends StateNotifier { // final Ref ref; // NoLoginNotifier({required this.ref}) : super(NoLoginStateInit()); // void prosesLoginF({ // required String client_id, // required String host, // required String password, // }) async { // try { // state = NoLoginStateLoading(); // final resp = await NoLoginAuthRepository( // dio: ref.read(dioProvider), // ).loginF( // client_id: client_id, // host: host, // password: password, // ); // // print(resp); // state = NoLoginStateDone(model: resp); // final shared = await SharedPreferences.getInstance(); // String expireDateStr = resp.expire_date; // if (!expireDateStr.contains("T")) { // expireDateStr = expireDateStr.replaceFirst(" ", "T"); // } // 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; // } catch (e) { // if (e is BaseRepositoryException) { // state = NoLoginStateError(message: e.message); // } else { // state = NoLoginStateError(message: e.toString()); // } // } // } // } // // 1. state // abstract class NoLoginState extends Equatable { // final DateTime date; // const NoLoginState(this.date); // @override // List get props => [date]; // } // class NoLoginStateInit extends NoLoginState { // NoLoginStateInit() : super(DateTime.now()); // } // class NoLoginStateLoading extends NoLoginState { // NoLoginStateLoading() : super(DateTime.now()); // } // class NoLoginStateError extends NoLoginState { // final String message; // NoLoginStateError({ // required this.message, // }) : super(DateTime.now()); // } // class NoLoginStateDone extends NoLoginState { // // final String pesan; // final NoLoginAuthModel model; // NoLoginStateDone({ // required this.model, // }) : super(DateTime.now()); // } // new import 'dart:convert'; import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:scanktpflutter/model/no-login/no_login_auth_model.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../app/constant.dart'; import '../../provider/no-login/no_login_current_user_provider.dart'; import '../../repository/no-login/no_login_auth_repository.dart'; import '../../provider/dio_provider.dart'; import '../../repository/base_repository.dart'; // 3. state provider final noLoginProvider = StateNotifierProvider( (ref) => NoLoginNotifier(ref: ref)); // 2. notifier class NoLoginNotifier extends StateNotifier { final Ref ref; NoLoginNotifier({required this.ref}) : super(NoLoginStateInit()); void prosesLoginF({ required String client_id, required String host, required String password, }) async { state = NoLoginStateLoading(); final resp = await NoLoginAuthRepository( dio: ref.read(dioProvider), ).loginF( client_id: client_id, host: host, password: password, ); state = NoLoginStateDone(model: resp); // Simpan ke SharedPreferences final shared = await SharedPreferences.getInstance(); // Simpan token dalam format JSON final token = jsonEncode({ "expire_date": resp.expire_date, "host": host, "date": DateTime.now().toIso8601String(), "token": resp.token, "client_id": resp.client_id, "isLogin": resp.isLogin, }); await shared.setString(Constant.bearerName, token); ref.read(noLoginCurrentUserProvider.notifier).state = resp; } } // 1. state abstract class NoLoginState extends Equatable { final DateTime date; const NoLoginState(this.date); @override List get props => [date]; } class NoLoginStateInit extends NoLoginState { NoLoginStateInit() : super(DateTime.now()); } class NoLoginStateLoading extends NoLoginState { NoLoginStateLoading() : super(DateTime.now()); } class NoLoginStateError extends NoLoginState { final String message; NoLoginStateError({required this.message}) : super(DateTime.now()); } class NoLoginStateDone extends NoLoginState { final NoLoginAuthModel model; NoLoginStateDone({required this.model}) : super(DateTime.now()); }