From 5f78d7e16427baa4341f22d86f7449d809923d48 Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Tue, 7 Mar 2023 16:04:39 +0300 Subject: [PATCH] get device list & get device list by serial number --- lib/api/devices_api_client.dart | 40 ++++++++-- .../providers/api/devices_provider.dart | 77 +++---------------- .../auto_complete_devices_field.dart | 12 +-- .../equipment/single_device_picker.dart | 7 +- .../auto_complete_devices_field.dart | 18 +---- 5 files changed, 48 insertions(+), 106 deletions(-) diff --git a/lib/api/devices_api_client.dart b/lib/api/devices_api_client.dart index 7612bb15..b77d50a5 100644 --- a/lib/api/devices_api_client.dart +++ b/lib/api/devices_api_client.dart @@ -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> 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> 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(); } } diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index 91812da4..14f88cae 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -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 _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> 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 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> 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> 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 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> getDevicesListBySN({required String? hospitalId, required String serialNumber}) { + if (hospitalId == null) return Future.value(const []); + return DevicesApiClient().getDevicesListBySN(hospitalId: hospitalId, serialNumber: serialNumber); } } diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index b52aefcd..83c67756 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -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 { - SettingProvider? _settingProvider; DevicesProvider? _devicesProvider; TextEditingController? _controller; @@ -40,7 +36,6 @@ class AutoCompleteDeviceFieldState extends State { @override Widget build(BuildContext context) { - _settingProvider = Provider.of(context); _devicesProvider = Provider.of(context); return Container( padding: const EdgeInsets.symmetric(horizontal: 16), @@ -63,12 +58,7 @@ class AutoCompleteDeviceFieldState extends State { 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( diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 4be0b15a..d8ca8491 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -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 { late DevicesProvider _devicesProvider; - late SettingProvider _settingProvider; Subtitle? _subtitle; _getDevice(String? result) async { @@ -39,8 +36,7 @@ class SingleDevicePickerState extends State { builder: (dialogContext) { return const Center(child: CircularProgressIndicator()); }); - List devices = - await _devicesProvider.getDevicesListBySN(host: _settingProvider.host ?? "", user: UserApiClient().user ?? User(), hospitalId: UserApiClient().user?.hospital?.id ?? "", sn: result); + List 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 { @override Widget build(BuildContext context) { _devicesProvider = Provider.of(context); - _settingProvider = Provider.of(context); _subtitle = AppLocalization.of(context)?.subtitle; return Scaffold( resizeToAvoidBottomInset: false, diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart index 798d23d7..21c5dc50 100644 --- a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -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 { - late SettingProvider _settingProvider; late DevicesProvider _devicesProvider; - late UserProvider _userProvider; late TextEditingController _controller; @override @@ -43,10 +37,7 @@ class _AutoCompleteDeviceNumberFieldState extends State(context); - _userProvider = Provider.of(context); _devicesProvider = Provider.of(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( 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