diff --git a/lib/models/new_models/gas_refill_model.dart b/lib/models/new_models/gas_refill_model.dart index 5283d2c4..4b0d9b89 100644 --- a/lib/models/new_models/gas_refill_model.dart +++ b/lib/models/new_models/gas_refill_model.dart @@ -186,18 +186,18 @@ class GasRefillModel { return map; } - Future validate(BuildContext context) async { + bool validate(BuildContext context) { if (site == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.destinationSite}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.destinationSite}"); return false; } else if (building == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.building}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.building}"); return false; } else if (floor == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.floor}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.floor}"); return false; } else if (department == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.department}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.department}"); return false; } return true; @@ -280,15 +280,18 @@ class GasRefillDetails { return map; } - Future validate(BuildContext context) async { + bool validate(BuildContext context) { if (gasType == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.gasType}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.gasType}"); + return false; + } else if (requestedQty == null) { + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.quantity}"); return false; } else if (cylinderType == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderType}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderType}"); return false; } else if (cylinderSize == null) { - await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderSize}"); + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderSize}"); return false; } return true; diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index 803ac941..196c440f 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -173,6 +173,9 @@ class _SingleItemDropDownMenuState { GasRefillDetails _currentDetails; GasRefillModel _gasModel; - GlobalKey _formKey; - TextEditingController _quantityController; + Lookup _requestedQuantity; + + static List gasQuantity = [ + Lookup(name: "1", id: 1, value: 1), + Lookup(name: "2", id: 2, value: 2), + Lookup(name: "3", id: 3, value: 3), + Lookup(name: "4", id: 4, value: 4), + Lookup(name: "5", id: 5, value: 5) + ]; @override void initState() { super.initState(); - _formKey = GlobalKey(); _currentDetails = GasRefillDetails(); _gasModel = GasRefillModel(gazRefillDetails: []); - _quantityController = TextEditingController(); } @override void dispose() { - _quantityController.dispose(); super.dispose(); } @@ -63,174 +65,162 @@ class _NewGasRefillRequestPageState extends State { body: Column( children: [ SingleChildScrollView( - child: Form( - key: _formKey, - child: Column( - children: [ - 16.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.gasType, - initialValue: _currentDetails.gasType, - onSelect: (value) { - _currentDetails.gasType = value; - }, - ), - 8.height, - AppTextFormField( - controller: _quantityController, - labelText: context.translation.quantity, - textInputType: TextInputType.number, - validator: (value) => Validator.hasValue(value) - ? Validator.isNumeric(value) - ? null - : context.translation.onlyNumbers - : context.translation.requiredField, - onSaved: (text) { - _currentDetails.requestedQty = double.tryParse(text ?? "") ?? 0; - }, - ), - 8.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.cylinderType, - initialValue: _currentDetails.cylinderType, - onSelect: (value) { - _currentDetails.cylinderType = value; - }, - ), - 8.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.cylinderSize, - initialValue: _currentDetails.cylinderSize, - onSelect: (value) { - _currentDetails.cylinderSize = value; - }, - ), - 8.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.site, - initialValue: _gasModel.site, - onSelect: (value) { - setState(() { - _gasModel.site = value; - _gasModel?.building = null; - _gasModel?.floor = null; - _gasModel?.department = null; - }); - }, + child: Column( + children: [ + 16.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.gasType, + initialValue: _currentDetails.gasType, + showAsBottomSheet: true, + onSelect: (value) { + _currentDetails.gasType = value; + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.quantity, + initialValue: _requestedQuantity, + staticData: gasQuantity, + onSelect: (value) { + _requestedQuantity = value; + _currentDetails.requestedQty = value.value; + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.cylinderType, + initialValue: _currentDetails.cylinderType, + onSelect: (value) { + _currentDetails.cylinderType = value; + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.cylinderSize, + initialValue: _currentDetails.cylinderSize, + showAsBottomSheet: true, + onSelect: (value) { + _currentDetails.cylinderSize = value; + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.site, + initialValue: _gasModel.site, + showAsBottomSheet: true, + onSelect: (value) { + setState(() { + _gasModel.site = value; + _gasModel?.building = null; + _gasModel?.floor = null; + _gasModel?.department = null; + }); + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.building, + initialValue: _gasModel.building, + enabled: _gasModel.site?.buildings?.isNotEmpty ?? false, + staticData: _gasModel.site?.buildings ?? [], + showAsBottomSheet: true, + onSelect: (value) { + setState(() { + _gasModel.building = value; + _gasModel?.floor = null; + _gasModel?.department = null; + }); + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.floor, + initialValue: _gasModel.floor, + enabled: _gasModel.building?.floors?.isNotEmpty ?? false, + staticData: _gasModel.building?.floors ?? [], + showAsBottomSheet: true, + onSelect: (value) { + setState(() { + _gasModel.floor = value; + _gasModel?.department = null; + }); + }, + ), + 8.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.department, + initialValue: _gasModel.department, + enabled: _gasModel.floor?.departments?.isNotEmpty ?? false, + staticData: _gasModel.floor?.departments ?? [], + showAsBottomSheet: true, + onSelect: (value) { + _gasModel.department = value; + }, + ), + 8.height, + if (_gasModel.gazRefillDetails?.isEmpty ?? true) + AppFilledButton( + label: context.translation.add, + maxWidth: true, + textColor: Colors.white, + buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50, + onPressed: _add, ), - 8.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.building, - initialValue: _gasModel.building, - enabled: _gasModel.site?.buildings?.isNotEmpty ?? false, - staticData: _gasModel.site?.buildings ?? [], - onSelect: (value) { - setState(() { - _gasModel.building = value; - _gasModel?.floor = null; - _gasModel?.department = null; - }); - }, - ), - 8.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.floor, - initialValue: _gasModel.floor, - enabled: _gasModel.building?.floors?.isNotEmpty ?? false, - staticData: _gasModel.building?.floors ?? [], - onSelect: (value) { - setState(() { - _gasModel.floor = value; - _gasModel?.department = null; - }); - }, - ), - 8.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.department, - initialValue: _gasModel.department, - enabled: _gasModel.floor?.departments?.isNotEmpty ?? false, - staticData: _gasModel.floor?.departments ?? [], - onSelect: (value) { - _gasModel.department = value; - }, - ), - 8.height, - if (_gasModel.gazRefillDetails?.isEmpty ?? true) - AppFilledButton( - label: context.translation.add, - maxWidth: true, - textColor: Colors.white, - buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50, - onPressed: _add, - ), - ListView.builder( - shrinkWrap: true, - itemCount: _gasModel.gazRefillDetails?.length, - padding: const EdgeInsets.only(top: 12, bottom: 24), - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _gasModel.gazRefillDetails[index].gasType?.name?.heading5(context), - 8.height, - ("${context.translation.quantity}: ${_gasModel.gazRefillDetails[index].requestedQty}").bodyText(context), - ("${context.translation.cylinderSize}: ${_gasModel.gazRefillDetails[index].cylinderSize?.name}").bodyText(context), - ("${context.translation.cylinderType}: ${_gasModel.gazRefillDetails[index].cylinderType?.name}").bodyText(context), - ], + ListView.builder( + shrinkWrap: true, + itemCount: _gasModel.gazRefillDetails?.length, + padding: const EdgeInsets.only(top: 12, bottom: 24), + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _gasModel.gazRefillDetails[index].gasType?.name?.heading5(context), + 8.height, + ("${context.translation.quantity}: ${_gasModel.gazRefillDetails[index].requestedQty}").bodyText(context), + ("${context.translation.cylinderSize}: ${_gasModel.gazRefillDetails[index].cylinderSize?.name}").bodyText(context), + ("${context.translation.cylinderType}: ${_gasModel.gazRefillDetails[index].cylinderType?.name}").bodyText(context), + ], + ), + Container( + height: 48.toScreenWidth, + width: 48.toScreenWidth, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + border: Border.all(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30), ), - Container( - height: 48.toScreenWidth, - width: 48.toScreenWidth, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - border: Border.all(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30), - ), - padding: EdgeInsets.symmetric(vertical: 12.toScreenHeight), - child: "trash".toSvgAsset(fit: BoxFit.fitHeight, color: context.isDark ? AppColor.red40 : AppColor.red50), - ).onPress(() { - _delete(index); - }), - ], - ), - const Divider().defaultStyle(context), - ("${context.translation.site}: ${_gasModel.site?.custName}").bodyText(context), - ("${context.translation.building}: ${_gasModel.building?.name}").bodyText(context), - ("${context.translation.floor}: ${_gasModel.floor?.name}").bodyText(context), - ("${context.translation.department}: ${_gasModel.department?.departmentName}").bodyText(context), - ], - ).toShadowContainer(context); - }, - ), - // 8.height, - - // // todo sikander, check it with FM - // AppTextFormField( - // labelText: context.translation.comments, - // textInputType: TextInputType.multiline, - // alignLabelWithHint: true, - // onChange: (text) { - // _gasModel.comment = text; - // }, - // ), - //40.height, - ], - ), + padding: EdgeInsets.symmetric(vertical: 12.toScreenHeight), + child: "trash".toSvgAsset(fit: BoxFit.fitHeight, color: context.isDark ? AppColor.red40 : AppColor.red50), + ).onPress(() { + _delete(index); + }), + ], + ), + const Divider().defaultStyle(context), + ("${context.translation.site}: ${_gasModel.site?.custName}").bodyText(context), + ("${context.translation.building}: ${_gasModel.building?.name}").bodyText(context), + ("${context.translation.floor}: ${_gasModel.floor?.name}").bodyText(context), + ("${context.translation.department}: ${_gasModel.department?.departmentName}").bodyText(context), + ], + ).toShadowContainer(context); + }, + ), + ], ), ).expanded, 16.height, @@ -241,11 +231,10 @@ class _NewGasRefillRequestPageState extends State { } void _add() async { - if (_formKey.currentState.validate() && await _currentDetails.validate(context) && await _gasModel.validate(context)) { - _formKey.currentState.save(); + if (_currentDetails.validate(context) && _gasModel.validate(context)) { _gasModel.gazRefillDetails.add(_currentDetails); - _quantityController.clear(); _currentDetails = GasRefillDetails(); + _requestedQuantity = null; setState(() {}); } } diff --git a/lib/new_views/swipe_module/swipe_history_view.dart b/lib/new_views/swipe_module/swipe_history_view.dart index f91cb032..2f8bcfa4 100644 --- a/lib/new_views/swipe_module/swipe_history_view.dart +++ b/lib/new_views/swipe_module/swipe_history_view.dart @@ -128,9 +128,7 @@ class _SwipeHistoryViewState extends State { 12.height, AppFilledButton(label: context.translation.search, maxWidth: false, onPressed: getSwipeHistory), 8.height, - const Divider( - thickness: 2, - ), + const Divider(thickness: 2), Consumer(builder: (context, snapshot, child) { return SwipeHistoryList(snapshot.swipeHistory ?? [], snapshot.isLoading); }), @@ -150,7 +148,7 @@ class SwipeHistoryList extends StatelessWidget { @override Widget build(BuildContext context) { return (list.isEmpty && !isLoading) - ? context.translation.noDataFound.heading5(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50).center + ? context.translation.noDataFound.heading5(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50).center.paddingOnly(top: 50) : ListView.separated( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, diff --git a/lib/new_views/swipe_module/swipe_view.dart b/lib/new_views/swipe_module/swipe_view.dart index de92893f..602d3e97 100644 --- a/lib/new_views/swipe_module/swipe_view.dart +++ b/lib/new_views/swipe_module/swipe_view.dart @@ -109,7 +109,7 @@ class _SwipeViewState extends State { mainAxisSize: MainAxisSize.min, children: [ Column( - mainAxisSize: MainAxisSize.min, + mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( context.translation.welcome, @@ -121,7 +121,6 @@ class _SwipeViewState extends State { ), ], ).paddingOnly(start: 16, end: 16, top: 8, bottom: 4), - SwipeHistoryView(showAppBar: false).expanded, ], ), diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 1c1bba89..b90350f9 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -8,7 +8,6 @@ import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; -import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; @@ -16,6 +15,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import '../../../../controllers/providers/api/hospitals_provider.dart'; @@ -53,10 +53,18 @@ class _RequestGasRefillState extends State { final TextEditingController _workingHoursController = TextEditingController(); GasRefillModel _formModel = GasRefillModel(gazRefillDetails: []); - final GlobalKey _formKey = GlobalKey(); - final GlobalKey _DetailsKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); bool _firstTime = true; + final GlobalKey _formKey = GlobalKey(); + Lookup _deliveredQuantity; + + static List deliveredQuantity = [ + Lookup(name: "1", id: 1, value: 1), + Lookup(name: "2", id: 2, value: 2), + Lookup(name: "3", id: 3, value: 3), + Lookup(name: "4", id: 4, value: 4), + Lookup(name: "5", id: 5, value: 5) + ]; @override void initState() { @@ -64,6 +72,10 @@ class _RequestGasRefillState extends State { if (widget.gasRefillModel != null) { _formModel.fromGasRefillModel(widget.gasRefillModel); _commentController.text = _formModel.comment ?? ""; + try { + _deliveredQuantity = deliveredQuantity.singleWhere((element) => element.value == _formModel.gazRefillDetails[0].deliverdQty); + _currentDetails.deliverdQty = _deliveredQuantity.value; + } catch (ex) {} } } @@ -86,11 +98,10 @@ class _RequestGasRefillState extends State { return false; } if (_formModel.gazRefillDetails?.isNotEmpty ?? false) { - if (!(await _addNewModel(context))) return; + if (!(_addNewModel(context))) return; } setState(() {}); - _formKey.currentState.save(); _formModel.comment = _commentController.text; int status = widget.gasRefillModel == null ? null /*await _gasRefillProvider.createModel( @@ -119,9 +130,10 @@ class _RequestGasRefillState extends State { } } - Future _addNewModel(BuildContext context) async { + bool _addNewModel(BuildContext context) { _validate = true; - if (!_formKey.currentState.validate()) { + if (_currentDetails.deliverdQty == null) { + Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.quantity}"); setState(() {}); return false; } @@ -129,7 +141,9 @@ class _RequestGasRefillState extends State { _currentDetails.gasType = _formModel.gazRefillDetails[0].gasType; _currentDetails.cylinderSize = _formModel.gazRefillDetails[0].cylinderSize; _currentDetails.cylinderType = _formModel.gazRefillDetails[0].cylinderType; - if (!(await _currentDetails.validate(context))) { + _currentDetails.requestedQty = _formModel.gazRefillDetails[0].requestedQty; + + if (!(_currentDetails.validate(context))) { setState(() {}); return false; } @@ -205,8 +219,6 @@ class _RequestGasRefillState extends State { children: [ context.translation.gasRefill.heading5(context), 8.height, - - /// TBD '${context.translation.gasRequest}: ${widget.gasRefillModel.gazRefillDetails[0].gasType.name}'.bodyText(context), '${context.translation.cylinderType}: ${widget.gasRefillModel.gazRefillDetails[0].cylinderType.name}'.bodyText(context), '${context.translation.cylinderSize}: ${widget.gasRefillModel.gazRefillDetails[0].cylinderSize.name}'.bodyText(context), @@ -235,27 +247,38 @@ class _RequestGasRefillState extends State { setState(() {}); return; } - if(value!=null) { + if (value != null) { _formModel.status = value; } }, ), 8.height, - AppTextFormField( - initialValue: _formModel.gazRefillDetails[0]?.deliverdQty?.toString(), - labelText: context.translation.deliveredQuantity, - onSaved: (value) { - _currentDetails?.deliverdQty = double.tryParse(value); + SingleItemDropDownMenu( + context: context, + title: context.translation.quantity, + initialValue: _deliveredQuantity, + staticData: deliveredQuantity, + onSelect: (value) { + _deliveredQuantity = value; + _currentDetails.deliverdQty = value.value; }, - textInputType: TextInputType.number, - controller: _deliveredQuantityController, - validator: (value) => value == null || value.isEmpty - ? context.translation.requiredField - : Validator.isNumeric(value) - ? null - : context.translation.onlyNumbers, ), 8.height, + // AppTextFormField( + // initialValue: _formModel.gazRefillDetails[0]?.deliverdQty?.toString(), + // labelText: context.translation.deliveredQuantity, + // onSaved: (value) { + // _currentDetails?.deliverdQty = double.tryParse(value); + // }, + // textInputType: TextInputType.number, + // controller: _deliveredQuantityController, + // validator: (value) => value == null || value.isEmpty + // ? context.translation.requiredField + // : Validator.isNumeric(value) + // ? null + // : context.translation.onlyNumbers, + // ), + // 8.height, /// TBD AppTextFormField(