get device list & get device list by serial number

merge-requests/12/head
zaid_daoud 3 years ago
parent b65158322c
commit 5f78d7e164

@ -14,15 +14,39 @@ class DevicesApiClient {
factory DevicesApiClient() => _instance;
/// Fetch devices and insert the result into [devices] list
/// 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});
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
devices.clear();
devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList());
debugPrint("devices : ${devices.length}");
}
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
devices.clear();
devices.addAll(equipmentListJson.map((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(
URLs.host1 + URLs.getEquipment,
queryParameters: {
'client': hospitalId,
if (serialNumber?.isEmpty == false) 'name': serialNumber,
if (number?.isEmpty == false) 'number': number,
},
);
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList();
}
/// 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(
URLs.host1 + URLs.getEquipment,
queryParameters: {
'client': hospitalId,
if (serialNumber.isNotEmpty) 'serial_qr': serialNumber,
},
);
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList();
}
}

@ -1,12 +1,7 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/api/devices_api_client.dart';
import 'package:test_sa/controllers/providers/loading_notifier.dart';
import '../../../models/device/device.dart';
import '../../../models/user.dart';
import '../../api_routes/urls.dart';
class DevicesProvider extends LoadingNotifier {
final List<Device> _searchableList = [];
@ -50,67 +45,19 @@ class DevicesProvider extends LoadingNotifier {
}
}
/// 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<List<Device>> getDevicesList({
required String host,
required User user,
required String hospitalId,
String? serialNumber,
String? number,
}) async {
Response response;
try {
response = await get(
Uri.parse("$host${URLs.getEquipment}?client=$hospitalId"
"${serialNumber?.isEmpty == false ? "&name=$serialNumber" : ""}"
"${number?.isEmpty == false ? "&number=$number" : ""}"),
);
List<Device> 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((device) => Device.fromJson(device)).toList();
}
return page;
} catch (error) {
return [];
}
/// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number]
///
/// ### NOTE : if [hospitalId] is [NULL] empty list will be returned
Future<List<Device>> getDevicesList({required String? hospitalId, String? serialNumber, String? number}) {
if (hospitalId == null) return Future.value(const []);
return DevicesApiClient().getDevicesList(hospitalId: hospitalId, serialNumber: serialNumber, number: number);
}
/// 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<List<Device>> getDevicesListBySN({
required String host,
required User user,
required String hospitalId,
required String sn,
}) async {
Response response;
try {
response = await get(
Uri.parse("$host${URLs.getEquipment}?client=$hospitalId${sn.isEmpty ? "" : "&serial_qr=$sn"}"),
);
_stateCode = response.statusCode;
List<Device> 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((device) => Device.fromJson(device)).toList();
}
return page;
} catch (error) {
stopLoading();
_stateCode = -1;
notifyListeners();
return [];
}
/// Returns a list of devices by [hospitalId] (and optionally) [serialNumber]
///
/// ### NOTE : if [hospitalId] is [NULL] empty list will be returned
Future<List<Device>> getDevicesListBySN({required String? hospitalId, required String serialNumber}) {
if (hospitalId == null) return Future.value(const []);
return DevicesApiClient().getDevicesListBySN(hospitalId: hospitalId, serialNumber: serialNumber);
}
}

@ -1,12 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/api/user_api_client.dart';
import '../../../controllers/providers/api/devices_provider.dart';
import '../../../controllers/providers/settings/setting_provider.dart';
import '../../../models/device/device.dart';
import '../../../models/user.dart';
import '../../app_style/colors.dart';
import '../../app_style/sizing.dart';
@ -22,7 +19,6 @@ class AutoCompleteDeviceField extends StatefulWidget {
}
class AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
SettingProvider? _settingProvider;
DevicesProvider? _devicesProvider;
TextEditingController? _controller;
@ -40,7 +36,6 @@ class AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
@override
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
_devicesProvider = Provider.of<DevicesProvider>(context);
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
@ -63,12 +58,7 @@ class AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
textInputAction: TextInputAction.search,
),
suggestionsCallback: (value) async {
return await _devicesProvider!.getDevicesList(
host: _settingProvider?.host ?? "",
user: UserApiClient().user ?? User(),
hospitalId: widget.hospitalId ?? "",
serialNumber: value,
);
return await _devicesProvider!.getDevicesList(hospitalId: widget.hospitalId, serialNumber: value);
},
itemBuilder: (context, device) {
return ListTile(

@ -6,10 +6,8 @@ import 'package:test_sa/api/user_api_client.dart';
import '../../../controllers/localization/localization.dart';
import '../../../controllers/providers/api/devices_provider.dart';
import '../../../controllers/providers/settings/setting_provider.dart';
import '../../../models/device/device.dart';
import '../../../models/subtitle.dart';
import '../../../models/user.dart';
import '../app_text_form_field.dart';
import '../loaders/loading_manager.dart';
import '../loaders/no_item_found.dart';
@ -28,7 +26,6 @@ class SingleDevicePicker extends StatefulWidget {
class SingleDevicePickerState extends State<SingleDevicePicker> {
late DevicesProvider _devicesProvider;
late SettingProvider _settingProvider;
Subtitle? _subtitle;
_getDevice(String? result) async {
@ -39,8 +36,7 @@ class SingleDevicePickerState extends State<SingleDevicePicker> {
builder: (dialogContext) {
return const Center(child: CircularProgressIndicator());
});
List<Device> devices =
await _devicesProvider.getDevicesListBySN(host: _settingProvider.host ?? "", user: UserApiClient().user ?? User(), hospitalId: UserApiClient().user?.hospital?.id ?? "", sn: result);
List<Device> devices = await _devicesProvider.getDevicesListBySN(hospitalId: UserApiClient().user?.hospital?.id ?? "", serialNumber: result);
Navigator.of(context).pop();
if (devices.isEmpty) {
Fluttertoast.showToast(msg: _subtitle?.noDeviceFound ?? "");
@ -63,7 +59,6 @@ class SingleDevicePickerState extends State<SingleDevicePicker> {
@override
Widget build(BuildContext context) {
_devicesProvider = Provider.of<DevicesProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_subtitle = AppLocalization.of(context)?.subtitle;
return Scaffold(
resizeToAvoidBottomInset: false,

@ -2,13 +2,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import '../../../../api/user_api_client.dart';
import '../../../../controllers/providers/api/devices_provider.dart';
import '../../../../controllers/providers/settings/setting_provider.dart';
import '../../../../controllers/providers/user_provider.dart';
import '../../../../models/device/device.dart';
import '../../../../models/lookup.dart';
import '../../../../models/user.dart';
import '../../../app_style/colors.dart';
import '../../../app_style/sizing.dart';
@ -24,9 +20,7 @@ class AutoCompleteDeviceNumberField extends StatefulWidget {
}
class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumberField> {
late SettingProvider _settingProvider;
late DevicesProvider _devicesProvider;
late UserProvider _userProvider;
late TextEditingController _controller;
@override
@ -43,10 +37,7 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
@override
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_devicesProvider = Provider.of<DevicesProvider>(context);
//Subtitle _subtitle = AppLocalization.of(context).subtitle;
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
@ -56,7 +47,7 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
boxShadow: const [AppStyle.boxShadow]),
child: TypeAheadField<Device>(
textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.headline6,
style: Theme.of(context).textTheme.titleLarge,
controller: _controller,
textAlign: TextAlign.center,
decoration: const InputDecoration(
@ -68,12 +59,7 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
textInputAction: TextInputAction.search,
),
suggestionsCallback: (vale) async {
return await _devicesProvider.getDevicesList(
host: _settingProvider.host ?? "",
user: UserApiClient().user ?? User(),
hospitalId: widget.hospitalId ?? "",
number: vale,
);
return await _devicesProvider.getDevicesList(hospitalId: widget.hospitalId, number: vale);
},
itemBuilder: (context, device) {
return ListTile(

Loading…
Cancel
Save