asset search done & filter assets need to be discussed

main_design2.0
zaid_daoud 2 years ago
parent 5cf84e6988
commit fb3f442ed5

@ -7,6 +7,7 @@ import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/asset_by_id_model.dart';
import 'package:test_sa/models/device/asset_search.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
@ -48,19 +49,18 @@ class AssetProvider extends ChangeNotifier {
notifyListeners();
}
Future<int> getAssets({@required String host, @required User user, @required int hospitalId, String serialNumber, String number, bool isQr = false}) async {
Future<int> getAssets({AssetSearch search, bool isQr = false}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.post(URLs.getAssets, body: {
final Map<String, dynamic> body = {
"pageSize": pageItemNumber,
"pageNumber": devices.length ~/ pageItemNumber + 1,
"siteId": hospitalId,
if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
if (number?.isEmpty == false) "assetNo": number,
});
};
if (search != null) body.addAll(search.toJson());
response = await ApiManager.instance.post(URLs.getAssets, body: body);
} catch (error) {
_loading = false;
_stateCode = -1;
@ -71,10 +71,10 @@ class AssetProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"];
var dList = equipmentListJson.map<Asset>((asset) => Asset.fromJson(asset)).toList();
var dList = equipmentListJson?.map<Asset>((asset) => Asset.fromJson(asset))?.toList() ?? [];
try {
if (isQr) {
dList = dList.where((element) => number?.toLowerCase() == element?.assetNumber?.toLowerCase())?.toList() ?? [];
dList = dList.where((element) => search?.assetNo?.toLowerCase() == element?.assetNumber?.toLowerCase())?.toList() ?? [];
}
} catch (e) {
print(e);
@ -119,7 +119,7 @@ class AssetProvider extends ChangeNotifier {
response = await ApiManager.instance.post(URLs.getAssets, body: {
"pageSize": pageItemNumber,
"pageNumber": devices.length ~/ pageItemNumber + 1,
"siteId": hospitalId,
// "siteId": hospitalId,
if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
if (number?.isEmpty == false) "assetNo": number,
});

@ -101,11 +101,11 @@ class GasRefillProvider extends ChangeNotifier {
Response response;
try {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
final body = model.toJson()
..addAll({
"uid": user.id.toString(),
"token": user.token ?? "",
});
final Map<String, dynamic> body = {
"uid": user.id.toString(),
"token": user.token ?? "",
};
if (model != null) body.addAll(model.toJson());
response = await ApiManager.instance.post(URLs.requestGasRefill, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {

@ -264,5 +264,16 @@
"receiverDetails" : "تفاصيل المستلم",
"requestedThrough" : "الطلب عبر",
"typeOfRequest" : "نوع الطلب",
"assetDetails" : "تفاصيل الجهاز"
"assetDetails" : "تفاصيل الجهاز",
"searchBy" : "إبحث بـ",
"searchByDesc" : "إبحث بأي من المعايير التالية",
"location" : "الموقع",
"supplier" : "المزود",
"md": "تعريف النموذج",
"snNumber" : "الرقم التسلسلي",
"oracleCode" : "رمز اوراكل",
"filter" : "تصفية",
"byDepartment" : "حسب القسم",
"bySite" : "حسب الموقع",
"applyFilter" : "تصفية"
}

@ -269,5 +269,16 @@
"receiverName" : "Receiver Name",
"receiverDetails" : "Receiver Details",
"requestedThrough" : "Requested Through",
"typeOfRequest" : "Type of Request"
"typeOfRequest" : "Type of Request",
"searchBy" : "Search by",
"searchByDesc" : "Search by any of the following criteria",
"location" : "Location",
"supplier" : "Supplier",
"md": "MD",
"snNumber" : "SN Number",
"oracleCode" : "Oracle Code",
"filter" : "Filter",
"byDepartment" : "By Department",
"bySite" : "By Site",
"applyFilter" : "Apply Filter"
}

@ -57,6 +57,8 @@ import 'package:test_sa/providers/service_request_providers/equipment_status_pro
import 'package:test_sa/providers/service_request_providers/priority_provider.dart';
import 'package:test_sa/providers/service_request_providers/requested_through_provider.dart';
import 'package:test_sa/providers/service_request_providers/type_of_request_provider.dart';
import 'package:test_sa/views/pages/device_transfer/asset_filter_screen.dart';
import 'package:test_sa/views/pages/device_transfer/asset_search_screen.dart';
import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart';
import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart';
import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart';
@ -204,6 +206,8 @@ class MyApp extends StatelessWidget {
CreateSubWorkOrderPage.id: (_) => const CreateSubWorkOrderPage(),
WorkOrderListPage.id: (_) => WorkOrderListPage(),
AssetDetailPage.id: (_) => AssetDetailPage(),
AssetSearchScreen.id: (_) => const AssetSearchScreen(),
AssetFilterScreen.id: (_) => const AssetFilterScreen(),
},
),
),

@ -0,0 +1,185 @@
import 'package:test_sa/models/lookup.dart';
class AssetSearch {
AssetSearch({
this.code,
this.assetSerialNumber,
this.assetName,
this.supplyDateSymbol,
this.supplyDateFrom,
this.supplyDateTo,
this.warrantyEndDateSymbol,
this.warrantyEndDateFrom,
this.warrantyEndDateTo,
this.delieveryInspectionDateSymbol,
this.deliveryInspectionDateFrom,
this.deliveryInspectionDateTo,
this.maintenanceContract,
this.assetClassification,
this.assetStatus,
this.assetNotScraped,
this.assetNo,
this.modelDefinition,
this.site,
this.manufacturer,
this.model,
this.department,
this.supplier,
this.tagCode,
this.assetGroupName,
this.assetGroup,
});
AssetSearch.fromJson(dynamic json) {
code = json['code'];
assetSerialNumber = json['assetSerialNumber'];
assetName = json['assetName'];
supplyDateSymbol = json['supplyDateSymbol'] != null ? Lookup.fromJson(json['supplyDateSymbol']) : null;
supplyDateFrom = json['supplyDateFrom'];
supplyDateTo = json['supplyDateTo'];
warrantyEndDateSymbol = json['warrantyEndDateSymbol'];
warrantyEndDateFrom = json['warrantyEndDateFrom'];
warrantyEndDateTo = json['warrantyEndDateTo'];
delieveryInspectionDateSymbol = json['delieveryInspectionDateSymbol'];
deliveryInspectionDateFrom = json['deliveryInspectionDateFrom'];
deliveryInspectionDateTo = json['deliveryInspectionDateTo'];
maintenanceContract = json['maintenanceContract'] != null ? Lookup.fromJson(json['maintenanceContract']) : null;
assetClassification = json['assetClassification'] != null ? Lookup.fromJson(json['assetClassification']) : null;
assetStatus = json['assetStatus'] != null ? Lookup.fromJson(json['assetStatus']) : null;
assetNotScraped = json['assetNotScraped'] != null ? Lookup.fromJson(json['assetNotScraped']) : null;
assetNo = json['assetNo'];
modelDefinition = json['modelDefinition'];
site = json['site'];
manufacturer = json['manufacturer'];
model = json['model'];
department = json['department'];
supplier = json['supplier'];
tagCode = json['tagCode'];
assetGroupName = json['assetGroupName'];
assetGroup = json['assetGroup'] != null ? Lookup.fromJson(json['assetGroup']) : null;
}
String code;
String assetSerialNumber;
String assetName;
Lookup supplyDateSymbol;
String supplyDateFrom;
String supplyDateTo;
num warrantyEndDateSymbol;
String warrantyEndDateFrom;
String warrantyEndDateTo;
num delieveryInspectionDateSymbol;
String deliveryInspectionDateFrom;
String deliveryInspectionDateTo;
Lookup maintenanceContract;
Lookup assetClassification;
Lookup assetStatus;
Lookup assetNotScraped;
String assetNo;
String modelDefinition;
String site;
String manufacturer;
String model;
String department;
String supplier;
String tagCode;
String assetGroupName;
Lookup assetGroup;
AssetSearch copyWith({
String code,
String assetSerialNumber,
String assetName,
Lookup supplyDateSymbol,
String supplyDateFrom,
String supplyDateTo,
num warrantyEndDateSymbol,
String warrantyEndDateFrom,
String warrantyEndDateTo,
num delieveryInspectionDateSymbol,
String deliveryInspectionDateFrom,
String deliveryInspectionDateTo,
Lookup maintenanceContract,
Lookup assetClassification,
Lookup assetStatus,
Lookup assetNotScraped,
String assetNo,
String modelDefinition,
String site,
String manufacturer,
String model,
String department,
String supplier,
String tagCode,
String assetGroupName,
Lookup assetGroup,
}) =>
AssetSearch(
code: code ?? this.code,
assetSerialNumber: assetSerialNumber ?? this.assetSerialNumber,
assetName: assetName ?? this.assetName,
supplyDateSymbol: supplyDateSymbol ?? this.supplyDateSymbol,
supplyDateFrom: supplyDateFrom ?? this.supplyDateFrom,
supplyDateTo: supplyDateTo ?? this.supplyDateTo,
warrantyEndDateSymbol: warrantyEndDateSymbol ?? this.warrantyEndDateSymbol,
warrantyEndDateFrom: warrantyEndDateFrom ?? this.warrantyEndDateFrom,
warrantyEndDateTo: warrantyEndDateTo ?? this.warrantyEndDateTo,
delieveryInspectionDateSymbol: delieveryInspectionDateSymbol ?? this.delieveryInspectionDateSymbol,
deliveryInspectionDateFrom: deliveryInspectionDateFrom ?? this.deliveryInspectionDateFrom,
deliveryInspectionDateTo: deliveryInspectionDateTo ?? this.deliveryInspectionDateTo,
maintenanceContract: maintenanceContract ?? this.maintenanceContract,
assetClassification: assetClassification ?? this.assetClassification,
assetStatus: assetStatus ?? this.assetStatus,
assetNotScraped: assetNotScraped ?? this.assetNotScraped,
assetNo: assetNo ?? this.assetNo,
modelDefinition: modelDefinition ?? this.modelDefinition,
site: site ?? this.site,
manufacturer: manufacturer ?? this.manufacturer,
model: model ?? this.model,
department: department ?? this.department,
supplier: supplier ?? this.supplier,
tagCode: tagCode ?? this.tagCode,
assetGroupName: assetGroupName ?? this.assetGroupName,
assetGroup: assetGroup ?? this.assetGroup,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
if (code != null && code.isNotEmpty) map['code'] = code;
if (assetSerialNumber != null && assetSerialNumber.isNotEmpty) map['assetSerialNumber'] = assetSerialNumber;
if (assetName != null && assetName.isNotEmpty) map['assetName'] = assetName;
if (supplyDateSymbol != null) {
map['supplyDateSymbol'] = supplyDateSymbol.toJson();
}
if (supplyDateFrom != null && supplyDateFrom.isNotEmpty) map['supplyDateFrom'] = supplyDateFrom;
if (supplyDateTo != null && supplyDateTo.isNotEmpty) map['supplyDateTo'] = supplyDateTo;
if (warrantyEndDateSymbol != null) map['warrantyEndDateSymbol'] = warrantyEndDateSymbol;
if (warrantyEndDateFrom != null && warrantyEndDateFrom.isNotEmpty) map['warrantyEndDateFrom'] = warrantyEndDateFrom;
if (warrantyEndDateTo != null && warrantyEndDateTo.isNotEmpty) map['warrantyEndDateTo'] = warrantyEndDateTo;
if (delieveryInspectionDateSymbol != null) map['delieveryInspectionDateSymbol'] = delieveryInspectionDateSymbol;
if (deliveryInspectionDateFrom != null && deliveryInspectionDateFrom.isNotEmpty) map['deliveryInspectionDateFrom'] = deliveryInspectionDateFrom;
if (deliveryInspectionDateTo != null && deliveryInspectionDateTo.isNotEmpty) map['deliveryInspectionDateTo'] = deliveryInspectionDateTo;
if (maintenanceContract != null) {
map['maintenanceContract'] = maintenanceContract.toJson();
}
if (assetClassification != null) {
map['assetClassification'] = assetClassification.toJson();
}
if (assetStatus != null) {
map['assetStatus'] = assetStatus.toJson();
}
if (assetNotScraped != null) {
map['assetNotScraped'] = assetNotScraped.toJson();
}
if (assetNo != null && assetNo.isNotEmpty) map['assetNo'] = assetNo;
if (modelDefinition != null && modelDefinition.isNotEmpty) map['modelDefinition'] = modelDefinition;
if (site != null && site.isNotEmpty) map['site'] = site;
if (manufacturer != null && manufacturer.isNotEmpty) map['manufacturer'] = manufacturer;
if (model != null && model.isNotEmpty) map['model'] = model;
if (department != null && department.isNotEmpty) map['department'] = department;
if (supplier != null && supplier.isNotEmpty) map['supplier'] = supplier;
if (tagCode != null && tagCode.isNotEmpty) map['tagCode'] = tagCode;
if (assetGroupName != null && assetGroupName.isNotEmpty) map['assetGroupName'] = assetGroupName;
if (assetGroup != null) {
map['assetGroup'] = assetGroup.toJson();
}
return map;
}
}

@ -4,31 +4,32 @@ import 'package:http/http.dart';
import '../../controllers/api_routes/api_manager.dart';
import '../../controllers/api_routes/urls.dart';
import '../../models/lookup.dart';
import '../models/new_models/department.dart';
import 'loading_list_notifier.dart';
class DepartmentProvider extends LoadingListNotifier<Lookup> {
class DepartmentProvider extends LoadingListNotifier<Department> {
@override
Future getDate() async {
if (loading ?? false) return -2;
loading = true;
notifyListeners();
Response response;
try {
Response response = await ApiManager.instance.get(URLs.getDepartments);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
}
loading = false;
notifyListeners();
return response.statusCode;
response = await ApiManager.instance.post(URLs.getDepartments, body: {"pageSize": 50});
} catch (error) {
loading = false;
stateCode = -1;
notifyListeners();
return -1;
}
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List listJson = json.decode(response.body)["data"];
items = listJson.map((department) => Department.fromJson(department)).toList();
}
loading = false;
notifyListeners();
return response.statusCode;
}
}

@ -0,0 +1,85 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/site.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/department_provider.dart';
import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
import '../../../models/device/asset_search.dart';
import '../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../../new_views/common_widgets/default_app_bar.dart';
class AssetFilterScreen extends StatefulWidget {
static const String id = "asset_filter_screen";
final AssetSearch data;
const AssetFilterScreen({Key key, this.data}) : super(key: key);
@override
State<AssetFilterScreen> createState() => _AssetFilterScreenState();
}
class _AssetFilterScreenState extends State<AssetFilterScreen> {
AssetSearch filter;
Site _site;
Department _department;
@override
void initState() {
filter = widget.data ?? AssetSearch();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: DefaultAppBar(title: context.translation.filter),
body: Column(
children: [
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// context.translation.equipmentStatus.heading5(context),
// 16.height,
SingleItemDropDownMenu<Department, DepartmentProvider>(
context: context,
title: context.translation.byDepartment,
initialValue: _department,
onSelect: (value) {
_department = value;
},
),
8.height,
SingleItemDropDownMenu<Site, SiteProvider>(
context: context,
title: context.translation.bySite,
initialValue: _site,
onSelect: (value) {
_site = value;
},
),
],
),
).expanded,
AppFilledButton(onPressed: _search, label: context.translation.applyFilter),
],
).paddingAll(16),
);
}
void _search() async {
filter.site = _site?.name;
filter.department = _department?.departmentName;
final deviceProvider = Provider.of<AssetProvider>(context, listen: false);
deviceProvider.reset();
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
await deviceProvider.getAssets(search: filter);
Navigator.pop(context);
Navigator.of(context).pop(filter);
}
}

@ -0,0 +1,149 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import '../../../models/device/asset_search.dart';
import '../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../../new_views/common_widgets/default_app_bar.dart';
class AssetSearchScreen extends StatefulWidget {
static const String id = "asset_search_screen";
final AssetSearch data;
const AssetSearchScreen({Key key, this.data}) : super(key: key);
@override
State<AssetSearchScreen> createState() => _AssetSearchScreenState();
}
class _AssetSearchScreenState extends State<AssetSearchScreen> {
AssetSearch search;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@override
void initState() {
search = widget.data ?? AssetSearch();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: DefaultAppBar(title: context.translation.search),
body: Form(
key: _formKey,
child: Column(
children: [
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
context.translation.searchBy.heading5(context),
8.height,
context.translation.searchByDesc.bodyText(context),
16.height,
AppTextFormField(
labelText: context.translation.assetName,
initialValue: search.assetName,
onSaved: (value) {
search.assetName = value;
},
),
8.height,
AppTextFormField(
labelText: context.translation.assetNumber,
initialValue: search.assetNo,
onSaved: (value) {
search.assetNo = value;
},
),
8.height,
/// todo : TBD (no matched parameter)
AppTextFormField(
labelText: context.translation.oracleCode,
onSaved: (value) {},
),
8.height,
AppTextFormField(
labelText: context.translation.snNumber,
initialValue: search.assetSerialNumber,
onSaved: (value) {
search.assetSerialNumber = value;
},
),
8.height,
AppTextFormField(
labelText: context.translation.model,
initialValue: search.model,
onSaved: (value) {
search.model = value;
},
),
8.height,
AppTextFormField(
labelText: context.translation.supplier,
initialValue: search.supplier,
onSaved: (value) {
search.supplier = value;
},
),
8.height,
AppTextFormField(
labelText: context.translation.site,
initialValue: search.site,
onSaved: (value) {
search.site = value;
},
),
8.height,
AppTextFormField(
labelText: context.translation.manufacture,
initialValue: search.manufacturer,
onSaved: (value) {
search.manufacturer = value;
},
),
8.height,
AppTextFormField(
labelText: context.translation.md,
initialValue: search.modelDefinition,
onSaved: (value) {
search.modelDefinition = value;
},
),
8.height,
/// todo : TBD (no matched parameter)
AppTextFormField(
labelText: context.translation.location,
onSaved: (value) {},
),
8.height,
],
),
).expanded,
AppFilledButton(onPressed: _search, label: context.translation.search),
],
).paddingAll(16),
),
);
}
void _search() async {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
final deviceProvider = Provider.of<AssetProvider>(context, listen: false);
deviceProvider.reset();
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
await deviceProvider.getAssets(search: search);
Navigator.pop(context);
Navigator.of(context).pop(search);
}
}
}

@ -51,7 +51,7 @@ class _AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
stateCode: _devicesProvider.stateCode,
onRefresh: () async {
_devicesProvider.reset();
await _devicesProvider.getAssets(host: _settingProvider.host, user: _userProvider.user, hospitalId: widget.hospitalId);
await _devicesProvider.getAssets();
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16),

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
@ -24,6 +25,7 @@ class PickAsset extends StatelessWidget {
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
child: Row(
children: [
Column(
@ -38,8 +40,7 @@ class PickAsset extends StatelessWidget {
}).expanded,
"qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight, color: context.isDark ? AppColor.primary40 : AppColor.primary70),
],
// TODO [Zaid] : if you have container as parent widget, no need to add padding widget separately
).paddingOnly(start: 16, end: 16, top: 8, bottom: 8),
),
),
if (device != null) AssetInfoCard(asset: device).paddingOnly(top: 8),
],

@ -7,7 +7,6 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart';
import 'package:test_sa/views/widgets/equipment/asset_item_gridview.dart';
import 'package:test_sa/views/widgets/equipment/asset_item_listview.dart';
@ -16,7 +15,9 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import '../../../models/device/asset.dart';
import '../../../new_views/app_style/app_color.dart';
import '../../../models/device/asset_search.dart';
import '../../pages/device_transfer/asset_filter_screen.dart';
import '../../pages/device_transfer/asset_search_screen.dart';
import '../qr/scan_qr.dart';
class SingleDevicePicker extends StatefulWidget {
@ -34,6 +35,7 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
List<Asset> _searchableList = [];
List<Asset> _initList = [];
bool _firstTime = true;
AssetSearch _searchAsset;
bool showListView = true;
@ -44,11 +46,7 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
if (result == null) return;
_devicesProvider.reset();
await _devicesProvider.getAssets(
user: _userProvider.user,
host: _settingProvider.host,
hospitalId: _userProvider.user.clientId,
serialNumber: "",
number: result,
search: AssetSearch(assetNo: result, assetSerialNumber: ""),
isQr: isQr,
);
_searchableList.clear();
@ -110,8 +108,13 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
).expanded,
],
),
).onPress(() {
// todo 'sikander' add search screen
).onPress(() async {
final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => AssetSearchScreen(data: _searchAsset)));
if (result != null) {
_searchAsset = result;
}
_searchableList.clear();
_searchableList.addAll(_devicesProvider.devices);
}).expanded,
16.width,
const Icon(
@ -124,7 +127,14 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
Text(
'Filter',
style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
),
).onPress(() async {
final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => AssetFilterScreen(data: _searchAsset)));
if (result != null) {
_searchAsset = result;
}
_searchableList.clear();
_searchableList.addAll(_devicesProvider.devices);
}),
],
).paddingOnly(start: 16, end: 16),
),
@ -135,50 +145,11 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
isFailedLoading: _devicesProvider.devices == null,
onRefresh: () async {
_devicesProvider.reset();
await _devicesProvider.getAssets(user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId);
await _devicesProvider.getAssets(search: _searchAsset);
},
child: Column(
children: [
const SizedBox(height: 16),
// todo "Siaknder" will remove when add search screen
Padding(
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: Column(
children: [
AppTextFormField(
labelText: context.translation.searchByAssetNumber,
controller: numberController,
prefixIcon: "search".toSvgAsset().paddingAll(16),
backgroundColor: context.isDark ? AppColor.neutral40 : AppColor.neutral30,
textInputAction: TextInputAction.search,
onAction: () async {
_devicesProvider.reset();
await _devicesProvider.getAssets(
user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text);
_searchableList.clear();
_searchableList.addAll(_devicesProvider.devices);
},
),
const SizedBox(
height: 8,
),
AppTextFormField(
labelText: context.translation.searchBySn,
controller: snController,
prefixIcon: "search".toSvgAsset().paddingAll(16),
backgroundColor: context.isDark ? AppColor.neutral40 : AppColor.neutral30,
textInputAction: TextInputAction.search,
onAction: () async {
_devicesProvider.reset();
await _devicesProvider.getAssets(
user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.clientId, serialNumber: snController.text, number: numberController.text);
_searchableList.clear();
_searchableList.addAll(_devicesProvider.devices);
},
),
],
),
),
Expanded(
child: _searchableList.isEmpty
? NoItemFound(

Loading…
Cancel
Save