import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart'; import '../../../models/user.dart'; import '../../api_routes/urls.dart'; class UserProvider extends ChangeNotifier { //reset provider data void reset() { _user = null; _loading = false; } // contain user data // when user not login or register _user = null User? _user; User? get user => _user; set user(User? user) { _user = user; notifyListeners(); } // when login or register in-process _login = true // when login or register is done or not start = false bool _loading = false; bool get isLoading => _loading; set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } /// sign in with user - need (email or phone) and password; /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart Future login({ required String host, required User user, }) async { if (_loading == true) { return -2; } _loading = true; notifyListeners(); Response response; try { response = await post( Uri.parse(host + URLs.login), body: await user.toLoginJson(), ); _loading = false; if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); return response.statusCode; } notifyListeners(); return response.statusCode; } catch (error) { _loading = false; notifyListeners(); return -1; } } /// sign up with User object; /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details about state codes check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart Future register({ required String host, required User user, }) async { if (_loading == true) { return -2; } _loading = true; notifyListeners(); Response response; try { response = await post(Uri.parse(host + URLs.register), body: await user.toRegisterJson()); } catch (error) { _loading = false; notifyListeners(); return -1; } _loading = false; notifyListeners(); if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user?.hospital = user.hospital; notifyListeners(); return response.statusCode; } return response.statusCode; } /// sign up with User object; /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details about state codes check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart Future updateProfile({ required String host, required User user, }) async { if (_loading == true) { return -2; } _loading = true; notifyListeners(); Response response; Map jsonObject = {}; jsonObject["uid"] = user.id; jsonObject["token"] = user.token; if (user.department?.id != _user?.department?.id) { jsonObject["department"] = user.department?.id; } if (user.whatsApp != _user?.whatsApp) { jsonObject["whatsapp"] = user.whatsApp; } if (user.phoneNumber != _user?.phoneNumber) { jsonObject["phone"] = user.phoneNumber; } try { response = await post(Uri.parse(host + URLs.updateProfile), body: jsonObject); } catch (error) { _loading = false; notifyListeners(); return -1; } _loading = false; notifyListeners(); if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user?.hospital = user.hospital; _user?.department = user.department; notifyListeners(); return response.statusCode; } return response.statusCode; } }