import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../models/user_model.dart'; import '../services/auth_service.dart'; class AuthProvider with ChangeNotifier { UserModel? _user = UserModel(); AuthService _userService = AuthService(); String? _token; String? get token => _token; UserModel get user => _user!; set user(UserModel user) { _user = user; notifyListeners(); } Future autoLogin() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String? token = prefs.getString('token'); if (token != null) { try { UserModel? user = await _userService.getUserInfoFromServer(token); if (user != null) { print('TOKEN ditemukan(Success): $token'); _user = user; return true; } else { print('TOKEN tidak ditemukan(Failed): $token'); return false; } } catch (e) { print(e); return false; } } return false; } FutureOr register({ String? name, String? email, String? password, }) async { try { UserModel user = await AuthService().register( name: name!, email: email!, password: password!, ); _user = user; return true; } catch (e) { print(e); return false; } } // FutureOr login({ // String? email, // String? password, // }) async { // try { // UserModel user = await AuthService().login( // email: email!, // password: password!, // ); // // SharedPreferences prefs = await SharedPreferences.getInstance(); // // prefs.setString('token', user.token!); // _user = user; // return user; // } catch (e) { // print(e); // throw Exception('Failed to login'); // } // } Future login({ String? email, String? password, // String? roles, }) async { try { UserModel user = await AuthService().login( email: email!, password: password!, ); SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString('token', user.token!); _user = user; return true; } catch (e) { print(e); return false; } } FutureOr logout(String token) async { try { if (await AuthService().logout(token)) { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.remove('token'); await prefs.remove('email'); await prefs.remove('password'); await prefs.clear(); notifyListeners(); return true; } else { return false; } } catch (e) { print(e); return false; } } FutureOr updateProfile({ String? name, String? username, String? token, }) async { try { UserModel user = await AuthService().updateProfile( name: name!, username: username!, token: token!, ); _user = user; print('Success Update Profile Provider'); return true; } catch (e) { print(e); return false; } } }