import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:qpay/http/http.dart'; import 'package:qpay/models/api_response.dart'; import 'package:shared_preferences/shared_preferences.dart'; class LoginScreenModel { String username = ""; String password = ""; String status = "PENDING"; bool isLoading = false; String? errorMessage; } class LoginController extends ChangeNotifier { final Http http = Http(); final model = LoginScreenModel(); late SharedPreferences prefs; BuildContext context; LoginController(this.context); Future> login(String username, String password) async { try { model.isLoading = true; notifyListeners(); prefs = await SharedPreferences.getInstance(); dynamic response = await http.post('/auth/login', { 'username': username, 'password': password, }); logger.i(response.toString()); model.isLoading = false; notifyListeners(); if (response.containsKey('token')) { model.status = 'SUCCESS'; prefs.setString('token', response['token']); prefs.setString('username', username); prefs.setString('email', response['email']); prefs.setString('firstName', response['firstName']); prefs.setString('lastName', response['lastName']); prefs.setString('phone', response['phone']); prefs.setString('userId', response['uuid']); prefs.setString('initials', response['firstName'].substring(0, 1) + response['lastName'].substring(0, 1)); return ApiResponse.success(model); } else { model.errorMessage = response['errorMessage'] ?? "Problem with the transaction. Please try again or contact support"; return ApiResponse.failure(model.errorMessage!); } } on DioException catch (e, s) { logger.e(s); model.isLoading = false; notifyListeners(); return ApiResponse.failure(e.response?.data['errors'][0] ?? "Unknown error"); } catch (e, s) { logger.e(s); model.isLoading = false; notifyListeners(); return ApiResponse.failure( "Problem processing that transaction. Please try again or contact support", ); } } }