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'; // 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": resp.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()); }