changed to new apis

merge-requests/18/head
nextwo 3 years ago
parent 42028f14fd
commit 5201f5789e

@ -0,0 +1,27 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/api/api_client.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/department.dart';
class DepartmentsApiClient{
static final DepartmentsApiClient _instance = DepartmentsApiClient._internal();
DepartmentsApiClient._internal();
factory DepartmentsApiClient() => _instance;
Future getDepartment() async {
Response response;
response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getDepartments,
{},
isFormData: false
);
Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
return listJson['data'].map<Department>((department) => Department.fromJson(department)).toList();
}
}

@ -16,9 +16,7 @@ class DeviceTransferApiClient {
Future<List<DeviceTransfer>> getRequests({required List items, required int pageItemNumber}) async {
Map<String, dynamic> body= {
"uid": "${UserApiClient().user?.id}",
"token": "${UserApiClient().user?.token}",
"page": "${(items.length) ~/ pageItemNumber}",
"pageSize": "${(items.length) ~/ pageItemNumber}",
};
final response = await ApiClient().postJsonForResponse(

@ -16,22 +16,31 @@ class DevicesApiClient {
/// Fetch devices by [hospitalId] and insert the result into [devices] list
Future getEquipment(String hospitalId) async {
final response = await ApiClient().getJsonForResponse(URLs.host1 + URLs.getEquipment, queryParameters: {'client': hospitalId});
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
{'client': hospitalId},
isFormData: false
);
Map equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
print(equipmentListJson);
devices.clear();
devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList());
devices.addAll(equipmentListJson['data'] != null ? equipmentListJson['data'].map<Device>((device) => Device.fromJson(device)).toList(): []);
debugPrint("devices : ${devices.length}");
}
/// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number]
Future<List<Device>> getDevicesList({required String hospitalId, String? serialNumber, String? number}) async {
final response = await ApiClient().getJsonForResponse(
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
queryParameters: {
{
'client': hospitalId,
if (serialNumber?.isEmpty == false) 'name': serialNumber,
if (number?.isEmpty == false) 'number': number,
},
isFormData: false
);
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList();
@ -39,12 +48,13 @@ class DevicesApiClient {
/// Returns a list of devices by [hospitalId] (and optionally) [serialNumber]
Future<List<Device>> getDevicesListBySN({required String hospitalId, required String serialNumber}) async {
final response = await ApiClient().getJsonForResponse(
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
queryParameters: {
{
'client': hospitalId,
if (serialNumber.isNotEmpty) 'serial_qr': serialNumber,
},
isFormData: false
);
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList();

@ -0,0 +1,53 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/hospital.dart';
import 'api_client.dart';
class HospitalsApiClient{
static final HospitalsApiClient _instance = HospitalsApiClient._internal();
HospitalsApiClient._internal();
factory HospitalsApiClient() => _instance;
Future getHospitals({
required String title,
required int pageSize
}) async {
Response response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getHospitals,
{
"pageSize": pageSize.toString(),
"name": title,
},
isFormData: false
);
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
print(categoriesListJson);
return categoriesListJson['data'].map<Hospital>((category) => Hospital.fromJson(category)).toList();
}
Future<List<Hospital>> getHospitalsList({
required String title,
}) async {
Response response;
response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getHospitals,
{"name" : title},
isFormData: false
);
List<Hospital> page = [];
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson['data'].map<Hospital>((category) => Hospital.fromJson(category)).toList();
return page;
}
}

@ -7,9 +7,9 @@ class URLs {
static const login = "/mobile/MobileAuth/Login"; // post
static const register = "/handle/create/user"; // post
static const updateProfile = "/update/user/profile"; // post
static const getHospitals = "/handle/return/all/clients"; // get
static const getDepartments = "/handle/return/all/departments"; // get
static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051
static const getHospitals = "/mobile/Customer/GetCustomers"; // get
static const getDepartments = "/mobile/Department/search"; // get
static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051
static const getServiceRequests = "/return/user/calls"; // get
static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get

@ -2,14 +2,16 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/api/departments_api_client.dart';
import '../../../models/department.dart';
import '../../api_routes/urls.dart';
import '../loading_notifier.dart';
class DepartmentsProvider extends ChangeNotifier {
class DepartmentsProvider extends LoadingNotifier {
//reset provider data
void reset() {
departments = null;
departments.clear();
stateCode = null;
}
@ -20,44 +22,17 @@ class DepartmentsProvider extends ChangeNotifier {
// contain user data
// when user not login or register _user = null
List<Department>? departments;
List<Department> departments=[];
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool? isLoading;
Future getDepartment() async {
/// 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<int> getDepartment(String host) async {
if (isLoading == true) {
return -2;
}
isLoading = true;
notifyListeners();
Response response;
try {
response = await get(
Uri.parse(host + URLs.getDepartments),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
} catch (error) {
isLoading = false;
stateCode = -1;
waitApiRequest(() async {
departments.addAll(await DepartmentsApiClient().getDepartment());
notifyListeners();
return -1;
}
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
departments = listJson.map((department) => Department.fromJson(department)).toList();
},
onSuccess: (){
stateCode=200;
}
isLoading = false;
notifyListeners();
return response.statusCode;
);
}
}

@ -35,6 +35,7 @@ class DeviceTransferProvider extends LoadingNotifier {
waitApiRequest(() async {
items.clear();
items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber));
print(items);
notifyListeners();
if (items.length == pageItemNumber) {
nextPage = true;

@ -3,126 +3,59 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/api/hospitals_api_client.dart';
import 'package:test_sa/controllers/providers/loading_notifier.dart';
import '../../../models/hospital.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class HospitalsProvider extends ChangeNotifier {
class HospitalsProvider extends LoadingNotifier {
// number of items call in each request
final pageItemNumber = 50;
//reset provider data
void reset() {
_hospitals = null;
_hospitals.clear();
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int? _stateCode;
int? get stateCode => _stateCode;
// true if there is next page in product list and false if not
bool _nextPage = true;
bool get nextPage => _nextPage;
// contain user data
// when user not login or register _user = null
List<Hospital>? _hospitals;
List<Hospital>? get hospitals => _hospitals;
List<Hospital> _hospitals=[];
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool? _loading;
List<Hospital> get hospitals => _hospitals;
bool? get isLoading => _loading;
set isLoading(bool? isLoading) {
_loading = isLoading;
notifyListeners();
}
/// 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<int> getHospitals({
required String host,
required User user,
Future getHospitals({
required String? title,
}) async {
if (_loading == true) {
return -2;
}
_loading = true;
notifyListeners();
Response response;
try {
response = await get(
Uri.parse(
"${host + URLs.getHospitals}?page=${(_hospitals?.length ?? 0) ~/ pageItemNumber}${title == null || title.isEmpty ? "" : "&name=$title"}",
),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
List<Hospital> page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
if (hospitals == null) _hospitals = [];
_hospitals?.addAll(page);
if (page.length >= pageItemNumber) {
_nextPage = true;
} else {
_nextPage = false;
}
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
waitApiRequest(() async {
_hospitals = [];
_hospitals.addAll(await HospitalsApiClient().getHospitals(title: title ?? "", pageSize: _hospitals.length ~/ pageItemNumber));
notifyListeners();
},
onSuccess: (){
_stateCode = 200;
}
);
}
Future<List<Hospital>> getHospitalsList({
required String host,
required User user,
required String title,
}) async {
Response response;
try {
response = await get(
Uri.parse(
host + URLs.getHospitals + (title.isEmpty ? "" : "?name=$title"),
),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
_stateCode = response.statusCode;
List<Hospital> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
}
return page;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return [];
waitApiRequest((){
return HospitalsApiClient().getHospitalsList(title: title);
},
onSuccess: (){
_stateCode=200;
}
);
return [];
}
}

@ -1,5 +1,5 @@
class Hospital {
String? id;
int? id;
String? name;
Hospital({

@ -35,14 +35,12 @@ class _SingleDepartmentPickerState extends State<SingleDepartmentPicker> {
return Scaffold(
resizeToAvoidBottomInset: false,
body: LoadingManager(
isLoading: _departmentsProvider?.isLoading,
isLoading: _departmentsProvider?.loading,
stateCode: _departmentsProvider?.stateCode,
isFailedLoading: _departmentsProvider?.departments == null,
onRefresh: () async {
_departmentsProvider?.reset();
await _departmentsProvider?.getDepartment(
_settingProvider?.host ?? "",
);
await _departmentsProvider?.getDepartment();
},
child: Column(
children: [

@ -73,7 +73,7 @@ class _HospitalAutoCompleteFieldState extends State<HospitalAutoCompleteField> {
widget.onSearch!(_controller.text);
}),
suggestionsCallback: (vale) async {
return await HospitalsProvider().getHospitalsList(host: _settingProvider?.host ?? "", title: vale, user: User());
return await HospitalsProvider().getHospitalsList(title: vale);
},
itemBuilder: (context, hospital) {
return HospitalItem(

@ -36,12 +36,12 @@ class _SingleHospitalPickerState extends State<SingleHospitalPicker> {
return Scaffold(
resizeToAvoidBottomInset: false,
body: LoadingManager(
isLoading: _hospitalsProvider?.isLoading,
isLoading: _hospitalsProvider?.loading,
stateCode: _hospitalsProvider?.stateCode,
isFailedLoading: _hospitalsProvider?.hospitals == null,
onRefresh: () async {
_hospitalsProvider?.reset();
await _hospitalsProvider?.getHospitals(host: _settingProvider?.host ?? "", user: User(), title: '');
await _hospitalsProvider?.getHospitals(title: '');
},
child: Column(
children: [

Loading…
Cancel
Save