Search in service request, preventive maintenance, gas refill, and transfer to arrange the requests from most recent to earliestt

design_3.0_demo_module
zaid_daoud 3 years ago
parent 4d548e1048
commit 11f95b9578

@ -60,9 +60,11 @@ class DeviceTransferProvider extends ChangeNotifier {
Future<int> getRequests({ Future<int> getRequests({
@required String host, @required String host,
@required User user, @required User user,
bool mostRecent,
}) async { }) async {
if (isLoading == true) return -2; if (isLoading == true) return -2;
isLoading = true; isLoading = true;
notifyListeners();
Response response; Response response;
try { try {
Map<String, dynamic> body = {}; Map<String, dynamic> body = {};
@ -81,6 +83,7 @@ class DeviceTransferProvider extends ChangeNotifier {
List<DeviceTransfer> itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList(); List<DeviceTransfer> itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
items ??= []; items ??= [];
items.addAll(itemsPage); items.addAll(itemsPage);
sortMostRecent(items, mostRecent);
print(listJson); print(listJson);
if (itemsPage.length == pageItemNumber) { if (itemsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
@ -99,6 +102,13 @@ class DeviceTransferProvider extends ChangeNotifier {
} }
} }
void sortMostRecent(List<DeviceTransfer> transfer, bool mostRecent) {
if (mostRecent != null) {
transfer.sort((prev, next) =>
(mostRecent ?? false) ? DateTime.tryParse(next.createdOn).compareTo(DateTime.tryParse(prev.createdOn)) : DateTime.tryParse(prev.createdOn).compareTo(DateTime.tryParse(next.createdOn)));
}
}
Future<int> createRequest({ Future<int> createRequest({
@required String host, @required String host,
@required User user, @required User user,

@ -70,7 +70,7 @@ class DevicesProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"]; List equipmentListJson = json.decode(response.body)["data"];
_devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device)).toList()); _devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
nextPage = true; nextPage = true;
} else { } else {
nextPage = false; nextPage = false;
@ -111,8 +111,8 @@ class DevicesProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"]; List equipmentListJson = json.decode(response.body)["data"];
page = equipmentListJson.map((device) => Device.fromJson(device)).toList(); page = equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
_devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device)).toList()); _devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
notifyListeners(); notifyListeners();
} }
return page; return page;

@ -47,9 +47,11 @@ class GasRefillProvider extends ChangeNotifier {
Future<int> getRequests({ Future<int> getRequests({
@required String host, @required String host,
@required User user, @required User user,
bool mostRecent,
}) async { }) async {
if (isLoading == true) return -2; if (isLoading == true) return -2;
isLoading = true; isLoading = true;
notifyListeners();
Response response; Response response;
Map<String, dynamic> body = {}; Map<String, dynamic> body = {};
@ -68,6 +70,7 @@ class GasRefillProvider extends ChangeNotifier {
List<GasRefillModel> itemsPage = requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList(); List<GasRefillModel> itemsPage = requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList();
items ??= []; items ??= [];
items.addAll(itemsPage); items.addAll(itemsPage);
sortMostRecent(items, mostRecent);
if (itemsPage.length == pageItemNumber) { if (itemsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
} else { } else {
@ -86,6 +89,12 @@ class GasRefillProvider extends ChangeNotifier {
} }
} }
void sortMostRecent(List<GasRefillModel> models, bool mostRecent) {
if (mostRecent != null) {
models.sort((prev, next) => (mostRecent ?? false) ? next.title.compareTo(prev.title) : prev.title.compareTo(next.title));
}
}
Future<int> createModel({ Future<int> createModel({
@required String host, @required String host,
@required User user, @required User user,

@ -79,6 +79,7 @@ class RegularVisitsProvider extends ChangeNotifier {
List requestsListJson = json.decode(response.body)["data"]; List requestsListJson = json.decode(response.body)["data"];
List<Visit> _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList(); List<Visit> _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
visits ??= []; visits ??= [];
sortMostRecent(_visits);
visits.addAll(_visits); visits.addAll(_visits);
if (_visits.length == pageItemNumber) { if (_visits.length == pageItemNumber) {
nextPage = true; nextPage = true;
@ -98,6 +99,12 @@ class RegularVisitsProvider extends ChangeNotifier {
return response.statusCode; return response.statusCode;
} }
void sortMostRecent(List<Visit> visits) {
visits.sort((prev, next) => (visitsSearch.mostRecent ?? false)
? DateTime.tryParse(next.createdOn).compareTo(DateTime.tryParse(prev.createdOn))
: DateTime.tryParse(prev.createdOn).compareTo(DateTime.tryParse(next.createdOn)));
}
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403

@ -76,6 +76,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
List requestsListJson = json.decode(response.body)["data"]; List requestsListJson = json.decode(response.body)["data"];
List<ServiceRequest> serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList(); List<ServiceRequest> serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList();
serviceRequests ??= []; serviceRequests ??= [];
sortMostRecent(serviceRequestsPage);
serviceRequests.addAll(serviceRequestsPage); serviceRequests.addAll(serviceRequestsPage);
if (serviceRequestsPage.length == pageItemNumber) { if (serviceRequestsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
@ -94,6 +95,12 @@ class ServiceRequestsProvider extends ChangeNotifier {
} }
} }
void sortMostRecent(List<ServiceRequest> requests) {
requests.sort(
(prev, next) => (search.mostRecent ?? false) ? DateTime.tryParse(next.date).compareTo(DateTime.tryParse(prev.date)) : DateTime.tryParse(prev.date).compareTo(DateTime.tryParse(next.date)),
);
}
Future<ServiceRequest> getSingleServiceRequest({ Future<ServiceRequest> getSingleServiceRequest({
@required String requestId, @required String requestId,
@required String host, @required String host,

@ -34,7 +34,7 @@ class Device {
this.modelDefinition, this.modelDefinition,
}); });
factory Device.fromJson(Map<String, dynamic> parsedJson) { factory Device.fromJson(Map<String, dynamic> parsedJson, {bool startKeyWithDest = true}) {
print("parsedJson:$parsedJson"); print("parsedJson:$parsedJson");
return Device( return Device(
id: parsedJson["id"], id: parsedJson["id"],
@ -43,10 +43,10 @@ class Device {
assetName: parsedJson["assetName"], assetName: parsedJson["assetName"],
modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]), modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]),
hospital: Hospital.fromJson(parsedJson["site"]), hospital: Hospital.fromJson(parsedJson["site"]),
destBuildingName: parsedJson["destBuildingName"] ?? parsedJson['building']['name'], destBuildingName: startKeyWithDest ? parsedJson["destBuildingName"] : parsedJson['building']['name'],
destDepartmentName: parsedJson["destDepartmentName"] ?? parsedJson['department']['departmentName'], destDepartmentName: startKeyWithDest ? parsedJson["destDepartmentName"] : parsedJson['department']['departmentName'],
destRoom: parsedJson["destRoom"] ?? parsedJson['room'], destRoom: startKeyWithDest ? parsedJson["destRoom"] : parsedJson['room'],
destFloor: parsedJson["destFloor"] ?? parsedJson['floor']['name'], destFloor: startKeyWithDest ? parsedJson["destFloor"] : parsedJson['floor']['name'],
destSiteName: parsedJson['destSiteName'] destSiteName: parsedJson['destSiteName']
// parsedJson["modelDefinition"] == null ? "" : // parsedJson["modelDefinition"] == null ? "" :
// parsedJson["modelDefinition"]["manufacturerName"], // parsedJson["modelDefinition"]["manufacturerName"],

@ -14,6 +14,7 @@ class DeviceTransfer {
Device device; Device device;
DeviceTransferInfo sender; DeviceTransferInfo sender;
DeviceTransferInfo receiver; DeviceTransferInfo receiver;
String createdOn;
DeviceTransfer({ DeviceTransfer({
this.id, this.id,
@ -22,6 +23,7 @@ class DeviceTransfer {
this.userId, this.userId,
this.sender, this.sender,
this.receiver, this.receiver,
this.createdOn,
}); });
bool validate() { bool validate() {
@ -40,6 +42,7 @@ class DeviceTransfer {
final receiver = DeviceTransferInfo(); final receiver = DeviceTransferInfo();
receiver.fromDetails(old.receiver); receiver.fromDetails(old.receiver);
this.receiver = receiver; this.receiver = receiver;
createdOn = old.createdOn;
} }
factory DeviceTransfer.fromJson(Map<String, dynamic> parsedJson) { factory DeviceTransfer.fromJson(Map<String, dynamic> parsedJson) {
@ -47,6 +50,7 @@ class DeviceTransfer {
id: parsedJson["id"], id: parsedJson["id"],
title: parsedJson["transferCode"], title: parsedJson["transferCode"],
userId: parsedJson["uid"], userId: parsedJson["uid"],
createdOn: parsedJson['createdOn'],
device: Device( device: Device(
id: parsedJson["assetId"], id: parsedJson["assetId"],
number: parsedJson["assetNumber"], number: parsedJson["assetNumber"],

@ -8,6 +8,7 @@ class ServiceRequestSearch {
Hospital hospital; Hospital hospital;
String model; String model;
Lookup statusValue; Lookup statusValue;
bool mostRecent;
ServiceRequestSearch({ ServiceRequestSearch({
this.deviceSerialNumber, this.deviceSerialNumber,
@ -16,6 +17,7 @@ class ServiceRequestSearch {
this.deviceName, this.deviceName,
this.model, this.model,
this.hospital, this.hospital,
this.mostRecent,
}); });
fromSearch(ServiceRequestSearch newSearch) { fromSearch(ServiceRequestSearch newSearch) {
@ -24,6 +26,7 @@ class ServiceRequestSearch {
statusValue = newSearch.statusValue; statusValue = newSearch.statusValue;
hospital = newSearch.hospital; hospital = newSearch.hospital;
model = newSearch.model; model = newSearch.model;
mostRecent = newSearch.mostRecent;
} }
Map<String, dynamic> toMap() { Map<String, dynamic> toMap() {

@ -6,6 +6,7 @@ class Visit {
String serialNumber; String serialNumber;
String expectDate; String expectDate;
String actualDate; String actualDate;
String createdOn;
int hospitalId; int hospitalId;
String hospitalName; String hospitalName;
int deviceId; int deviceId;
@ -42,6 +43,7 @@ class Visit {
this.images, this.images,
this.assignTo, this.assignTo,
this.deviceNumber, this.deviceNumber,
this.createdOn,
}); });
factory Visit.fromJson(Map<String, dynamic> parsedJson) { factory Visit.fromJson(Map<String, dynamic> parsedJson) {
@ -51,28 +53,30 @@ class Visit {
images = list.map((e) => e["attachmentURL"].toString()).toList(); images = list.map((e) => e["attachmentURL"].toString()).toList();
} }
return Visit( return Visit(
id: parsedJson["id"], id: parsedJson["id"],
serialNumber: parsedJson["visitCode"], serialNumber: parsedJson["visitCode"],
ppmScheduleId: parsedJson["ppmScheduleId"], ppmScheduleId: parsedJson["ppmScheduleId"],
hospitalId: parsedJson["siteId"], hospitalId: parsedJson["siteId"],
deviceNumber: parsedJson["assetNumber"], deviceNumber: parsedJson["assetNumber"],
hospitalName: parsedJson["siteName"], hospitalName: parsedJson["siteName"],
deviceId: parsedJson["assetId"], deviceId: parsedJson["assetId"],
deviceSerialNumber: parsedJson["assetSerialNo"], deviceSerialNumber: parsedJson["assetSerialNo"],
deviceEnglishName: parsedJson["assetName"], deviceEnglishName: parsedJson["assetName"],
deviceArabicName: parsedJson["assetName"], deviceArabicName: parsedJson["assetName"],
employId: parsedJson["assignedEmployeeId"].toString(), employId: parsedJson["assignedEmployeeId"].toString(),
employName: parsedJson["assignedEmployeeName"], employName: parsedJson["assignedEmployeeName"],
expectDate: parsedJson["expectedDate"].toString().split("T").first, expectDate: parsedJson["expectedDate"].toString().split("T").first,
actualDate: parsedJson["actualDate"].toString().split("T").first, actualDate: parsedJson["actualDate"].toString().split("T").first,
modelAndBrand: "${parsedJson["modelName"]} / ${parsedJson["manufacturerName"]}", modelAndBrand: "${parsedJson["modelName"]} / ${parsedJson["manufacturerName"]}",
// contactStatus: parsedJson["contactStatus"], // contactStatus: parsedJson["contactStatus"],
images: images, images: images,
status: Lookup( status: Lookup(
id: parsedJson["visitStatusId"], // actual value (0,1,2) id: parsedJson["visitStatusId"], // actual value (0,1,2)
name: parsedJson["visitStatusName"] // text value name: parsedJson["visitStatusName"] // text value
), ),
assignTo: parsedJson["assignedToName"], assignTo: parsedJson["assignedToName"],
pentry: Pentry.fromMap(parsedJson)); pentry: Pentry.fromMap(parsedJson),
createdOn: parsedJson['createdOn'],
);
} }
} }

@ -12,6 +12,7 @@ class VisitsSearch {
DateTime actualDateFrom; DateTime actualDateFrom;
DateTime actualDateTo; DateTime actualDateTo;
Lookup statusValue; Lookup statusValue;
bool mostRecent;
VisitsSearch({ VisitsSearch({
this.deviceSerialNumber, this.deviceSerialNumber,
@ -24,6 +25,7 @@ class VisitsSearch {
this.contactStatus, this.contactStatus,
this.expectedDateFrom, this.expectedDateFrom,
this.expectedDateTo, this.expectedDateTo,
this.mostRecent,
}); });
fromSearch(VisitsSearch newSearch) { fromSearch(VisitsSearch newSearch) {
@ -37,6 +39,7 @@ class VisitsSearch {
expectedDateFrom = newSearch.expectedDateFrom; expectedDateFrom = newSearch.expectedDateFrom;
expectedDateTo = newSearch.expectedDateTo; expectedDateTo = newSearch.expectedDateTo;
statusValue = newSearch.statusValue; statusValue = newSearch.statusValue;
mostRecent = newSearch.mostRecent;
} }
Map<String, dynamic> toMap() { Map<String, dynamic> toMap() {

@ -9,6 +9,7 @@ import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/switch_button.dart';
class TrackDeviceTransferPage extends StatefulWidget { class TrackDeviceTransferPage extends StatefulWidget {
static const String id = "/track-device-transfer"; static const String id = "/track-device-transfer";
@ -23,6 +24,7 @@ class _TrackDeviceTransferPageState extends State<TrackDeviceTransferPage> with
DeviceTransferProvider _deviceTransferProvider; DeviceTransferProvider _deviceTransferProvider;
UserProvider _userProvider; UserProvider _userProvider;
SettingProvider _settingProvider; SettingProvider _settingProvider;
bool mostRecent = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context); _deviceTransferProvider = Provider.of<DeviceTransferProvider>(context);
@ -71,6 +73,21 @@ class _TrackDeviceTransferPageState extends State<TrackDeviceTransferPage> with
], ],
), ),
), ),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: ASwitchButton(
title: "Most Recent",
value: mostRecent,
onChange: (value) async {
mostRecent = value;
await _deviceTransferProvider.getRequests(
user: _userProvider.user,
host: _settingProvider.host,
mostRecent: mostRecent,
);
},
),
),
Expanded( Expanded(
child: DeviceTransferList( child: DeviceTransferList(
nextPage: _deviceTransferProvider.nextPage, nextPage: _deviceTransferProvider.nextPage,

@ -368,7 +368,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
const SizedBox(height: 8), const SizedBox(height: 8),
Divider(color: Theme.of(context).colorScheme.primary), Divider(color: Theme.of(context).colorScheme.primary),
const SizedBox(height: 4), const SizedBox(height: 4),
const ASubTitle("Type"), const ASubTitle("Gas Type"),
if (_validate && _currentDetails.type == null) ASubTitle(_subtitle.requiredWord, color: Colors.red), if (_validate && _currentDetails.type == null) ASubTitle(_subtitle.requiredWord, color: Colors.red),
const SizedBox(height: 4), const SizedBox(height: 4),
GasTypeMenu( GasTypeMenu(
@ -396,9 +396,6 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
const SizedBox( const SizedBox(
height: 8, height: 8,
), ),
const SizedBox(
height: 8,
),
const ASubTitle("Cylinder Type"), const ASubTitle("Cylinder Type"),
if (_validate && _currentDetails.cylinderSize == null) if (_validate && _currentDetails.cylinderSize == null)
ASubTitle( ASubTitle(

@ -10,6 +10,8 @@ import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../widgets/switch_button.dart';
class TrackGasRefillPage extends StatefulWidget { class TrackGasRefillPage extends StatefulWidget {
static const String id = "/track-gas-refill"; static const String id = "/track-gas-refill";
@ -23,6 +25,7 @@ class _TrackGasRefillPageState extends State<TrackGasRefillPage> with TickerProv
GasRefillProvider _gasRefillProvider; GasRefillProvider _gasRefillProvider;
UserProvider _userProvider; UserProvider _userProvider;
SettingProvider _settingProvider; SettingProvider _settingProvider;
bool mostRecent = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -76,6 +79,21 @@ class _TrackGasRefillPageState extends State<TrackGasRefillPage> with TickerProv
], ],
), ),
), ),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: ASwitchButton(
title: "Most Recent",
value: mostRecent,
onChange: (value) async {
mostRecent = value;
await _gasRefillProvider.getRequests(
user: _userProvider.user,
host: _settingProvider.host,
mostRecent: mostRecent,
);
},
),
),
Expanded( Expanded(
child: GasRefillList( child: GasRefillList(
nextPage: _gasRefillProvider.nextPage, nextPage: _gasRefillProvider.nextPage,

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
@ -9,6 +8,7 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart';
import 'package:test_sa/views/widgets/status/service_request/service_request_status_mune.dart'; import 'package:test_sa/views/widgets/status/service_request/service_request_status_mune.dart';
import 'package:test_sa/views/widgets/switch_button.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
@ -90,6 +90,17 @@ class _ServiceRequestsSearchDialogState extends State<ServiceRequestsSearchDialo
SizedBox( SizedBox(
height: 8.0 * AppStyle.getScaleFactor(context), height: 8.0 * AppStyle.getScaleFactor(context),
), ),
ASwitchButton(
title: "Most Recent",
value: _search.mostRecent ?? false,
onChange: (value) {
_search.mostRecent = value;
setState(() {});
},
),
SizedBox(
height: 8.0 * AppStyle.getScaleFactor(context),
),
ATextFormField( ATextFormField(
initialValue: _search.deviceSerialNumber, initialValue: _search.deviceSerialNumber,
hintText: _subtitle.serialNumber, hintText: _subtitle.serialNumber,

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
@ -12,10 +11,10 @@ import 'package:test_sa/views/widgets/equipment/auto_complete_models_field.dart'
import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart';
import 'package:test_sa/views/widgets/status/employee/assigned_to_mune.dart'; import 'package:test_sa/views/widgets/status/employee/assigned_to_mune.dart';
import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
import '../switch_button.dart';
class VisitsSearchDialog extends StatefulWidget { class VisitsSearchDialog extends StatefulWidget {
final VisitsSearch initialSearchValue; final VisitsSearch initialSearchValue;
@ -90,6 +89,14 @@ class _VisitsSearchDialogState extends State<VisitsSearchDialog> with TickerProv
) )
], ],
), ),
ASwitchButton(
title: "Most Recent",
value: _search.mostRecent ?? false,
onChange: (value) {
_search.mostRecent = value;
setState(() {});
},
),
ATextFormField( ATextFormField(
initialValue: _search.deviceSerialNumber, initialValue: _search.deviceSerialNumber,
hintText: _subtitle.serialNumber, hintText: _subtitle.serialNumber,

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../app_style/colors.dart';
import '../app_style/sizing.dart';
class ASwitchButton extends StatelessWidget {
final String title;
final bool value;
final void Function(bool) onChange;
const ASwitchButton({
@required this.title,
@required this.value,
@required this.onChange,
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
margin: const EdgeInsets.symmetric(vertical: 8),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: const Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ASubTitle(title),
Switch.adaptive(
value: value,
activeColor: AColors.primaryColor,
onChanged: onChange,
),
],
),
);
}
}
Loading…
Cancel
Save