diff --git a/lib/main.dart b/lib/main.dart index c19c9bf6..4afb5db9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -53,6 +53,7 @@ import 'package:test_sa/providers/gas_request_providers/gas_status_provider.dart import 'package:test_sa/providers/gas_request_providers/gas_types_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; +import 'package:test_sa/providers/ppm_visit_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/first_action_provider.dart'; import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart'; @@ -176,6 +177,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => LoanAvailabilityProvider()), ChangeNotifierProvider(create: (_) => ReasonProvider()), ChangeNotifierProvider(create: (_) => ServiceTypeProvider()), + ChangeNotifierProvider(create: (_) => PPMVisitStatusProvider()), ], child: GestureDetector( onTap: () { diff --git a/lib/providers/ppm_visit_status_provider.dart b/lib/providers/ppm_visit_status_provider.dart new file mode 100644 index 00000000..4e8a5cd5 --- /dev/null +++ b/lib/providers/ppm_visit_status_provider.dart @@ -0,0 +1,35 @@ +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/models/lookup.dart'; + +import '../../controllers/api_routes/api_manager.dart'; +import '../../controllers/api_routes/urls.dart'; +import 'loading_list_notifier.dart'; + +class PPMVisitStatusProvider extends LoadingListNotifier { + @override + Future getDate() async { + if (loading ?? false) return -2; + loading = true; + notifyListeners(); + Response response; + try { + response = await ApiManager.instance.get(URLs.getPentryVisitStatus); + } 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) => Lookup.fromJson(department)).toList(); + } + loading = false; + notifyListeners(); + return response.statusCode; + } +} diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index 1ccf44c2..f2ecd399 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -1,18 +1,20 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_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/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/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; -import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; +import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/pentry/pentry_calibration_tool_form.dart'; import 'package:test_sa/views/widgets/pentry/pentry_pm_kit_form.dart'; @@ -91,109 +93,84 @@ class _EditPentryState extends State with SingleTickerProviderStateM _settingProvider = Provider.of(context); _regularVisitsProvider = Provider.of(context); return Scaffold( + appBar: DefaultAppBar(title: context.translation.preventiveMaintenance), key: _scaffoldKey, body: SafeArea( child: LoadingManager( - isLoading: _isLoading, - isFailedLoading: false, - stateCode: 200, - onRefresh: () async {}, - child: Column( - children: [ - Material( - color: Theme.of(context).colorScheme.primary, - child: Padding( - padding: const EdgeInsets.all(2.0), - child: TabBar( - controller: _tabController, - isScrollable: true, - onTap: (index) { - setState(() {}); - }, - tabs: const [ - Tab( - text: "PPM Check List", - ), - Tab( - text: "Calibration Tools", - ), - Tab( - text: "PM Kits", - ), - Tab( - text: "PM Entry", - ), - ], - ), - ), + isLoading: _isLoading, + isFailedLoading: false, + stateCode: 200, + onRefresh: () async {}, + child: Column( + children: [ + Container( + decoration: BoxDecoration(color: AppColor.neutral30, borderRadius: BorderRadius.circular(16)), + child: TabBar( + controller: _tabController, + isScrollable: true, + padding: EdgeInsets.zero, + labelColor: AppColor.neutral60, + unselectedLabelColor: AppColor.neutral20, + indicatorPadding: const EdgeInsets.all(4), + indicator: BoxDecoration(color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), + onTap: (index) { + setState(() {}); + }, + tabs: [ + Tab(text: "TBS", height: 57.toScreenHeight), + Tab(text: "Calibration Tool", height: 57.toScreenHeight), + Tab(text: "PM Kit", height: 57.toScreenHeight), + Tab(text: "PPM Checklist", height: 57.toScreenHeight), + ], ), - Expanded( - child: Stack( - children: [ - TabBarView( - physics: const NeverScrollableScrollPhysics(), - controller: _tabController, - children: [ - PentryPPMCheckListForm( - models: _pentry.ppmCheckLists, - enableValidate: _validate, - ), - PentryCalibrationToolForm( - models: _pentry.calibrationTools, - enableValidate: _validate, - ), - PentryPMKitForm( - models: _pentry.pmKits, - enableValidate: _validate, - assetId: widget.visit?.deviceId, - ), - PentryInfoForm( - model: _pentry, - enableValidate: _validate, - ), - ], - ), - Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - if (_tabController.index != 0) - ASmallButton( - text: context.translation.back, - onPressed: () { - _tabController.animateTo( - _tabController.index - 1, - ); - setState(() {}); - }, - ), - const Spacer(), - if (_tabController.index != _tabController.length - 1) - ASmallButton( - text: context.translation.next, - onPressed: () { - _tabController.animateTo( - _tabController.index + 1, - ); - setState(() {}); - }, - ), - if (_tabController.index == _tabController.length - 1) - ASmallButton( - text: context.translation.update, - onPressed: _onSubmit, - ), - ], - ), - ), - ) - ], - ), - ), - ], - )), + ), + TabBarView( + physics: const NeverScrollableScrollPhysics(), + controller: _tabController, + children: [ + PentryTBSForm(model: _pentry, enableValidate: _validate), + PentryCalibrationToolForm(models: _pentry.calibrationTools, enableValidate: _validate), + PentryPMKitForm(models: _pentry.pmKits, enableValidate: _validate, assetId: widget.visit?.deviceId), + PentryPMChecklistForm(models: _pentry.ppmCheckLists, enableValidate: _validate), + ], + ).expanded, + AppFilledButton(onPressed: () {}, label: context.translation.next).paddingOnly(top: 16), + // Padding( + // padding: const EdgeInsets.all(8.0), + // child: Row( + // children: [ + // if (_tabController.index != 0) + // ASmallButton( + // text: context.translation.back, + // onPressed: () { + // _tabController.animateTo( + // _tabController.index - 1, + // ); + // setState(() {}); + // }, + // ), + // const Spacer(), + // if (_tabController.index != _tabController.length - 1) + // ASmallButton( + // text: context.translation.next, + // onPressed: () { + // _tabController.animateTo( + // _tabController.index + 1, + // ); + // setState(() {}); + // }, + // ), + // if (_tabController.index == _tabController.length - 1) + // ASmallButton( + // text: context.translation.update, + // onPressed: _onSubmit, + // ), + // ], + // ), + // ), + ], + ).paddingAll(16), + ), ), ); } diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index 4a53c0f9..dea919cc 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -7,7 +7,7 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; -import 'package:test_sa/views/pages/user/visits/pantry/future_edit_pently.dart'; +import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; import '../../../../controllers/providers/api/user_provider.dart'; import '../../../../models/enums/user_types.dart'; @@ -80,7 +80,7 @@ class VisitDetailsPage extends StatelessWidget { if (userProvider.user.type == UsersTypes.engineer && visit.status.value != 5 && visit.status.value != 3) AppFilledButton( onPressed: () { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => FutureEditPentry(visit: visit))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPentry(visit: visit, pentry: visit.pentry))); }, label: context.translation.updateRequest, ).paddingAll(16), diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart index 9ea520ac..22e0af8e 100644 --- a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; @@ -14,11 +13,7 @@ import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; class PentryCalibrationToolForm extends StatefulWidget { final List models; final bool enableValidate; - const PentryCalibrationToolForm({ - Key key, - this.models, - this.enableValidate, - }) : super(key: key); + const PentryCalibrationToolForm({Key key, this.models, this.enableValidate}) : super(key: key); @override State createState() => _PentryCalibrationToolFormState(); @@ -27,7 +22,6 @@ class PentryCalibrationToolForm extends StatefulWidget { class _PentryCalibrationToolFormState extends State { @override Widget build(BuildContext context) { - final userProvider = Provider.of(context); return ListView.builder( padding: EdgeInsets.only( diff --git a/lib/views/widgets/pentry/pentry_info_form.dart b/lib/views/widgets/pentry/pentry_info_form.dart index f38b1fbc..b87a1401 100644 --- a/lib/views/widgets/pentry/pentry_info_form.dart +++ b/lib/views/widgets/pentry/pentry_info_form.dart @@ -1,208 +1,159 @@ import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/pentry.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/app_text_form_field.dart'; -import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; +import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; +import 'package:test_sa/providers/ppm_visit_status_provider.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; -import 'package:test_sa/views/widgets/status/pentry/pentry_visit_status_mune.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; -import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +import '../date_and_time/date_picker.dart'; import '../images/multi_image_picker.dart'; -import '../status/pentry/pentry_status_mune.dart'; -class PentryInfoForm extends StatefulWidget { +class PentryTBSForm extends StatefulWidget { final Pentry model; final bool enableValidate; - const PentryInfoForm({ + const PentryTBSForm({ Key key, this.model, this.enableValidate, }) : super(key: key); @override - State createState() => _PentryInfoFormState(); + State createState() => _PentryTBSFormState(); } -class _PentryInfoFormState extends State { +class _PentryTBSFormState extends State { @override Widget build(BuildContext context) { widget.model?.files ??= []; - final userProvider = Provider.of(context); - return Padding( - padding: EdgeInsets.only( - top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const SizedBox( - height: 8, - ), - const ASubTitle("PPM Visit Status"), - if (widget.enableValidate && widget.model.ppmVisitStatus == null) - ASubTitle( - context.translation.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - PentryVisitsStatusMenu( - initialValue: widget.model.ppmVisitStatus, - onSelect: (status) { - if (status != null) { - widget.model.ppmVisitStatus = status; - } - }, - ), - const SizedBox( - height: 8, - ), - const ASubTitle("Timer"), - if (widget.enableValidate && widget.model?.timer?.endAt == null) - ASubTitle( - context.translation.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - AppTimer( - timer: widget.model.timer, - enabled: widget.model.timer.endAt == null, - onChange: (timer) async { - widget.model.timer = timer; - return true; - }, - ), - const SizedBox( - height: 8, - ), - const ASubTitle("Status"), - if (widget.enableValidate && widget.model.status == null) - ASubTitle( - context.translation.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - PentryStatusMenu( - initialValue: widget.model.status, - onSelect: (status) { - widget.model.status = status; - }, - ), - const SizedBox( - height: 8, - ), - const ASubTitle("Actual Visit Date"), - if (widget.enableValidate && widget.model.actualVisitDate == null) - ASubTitle( - context.translation.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - ADatePicker( - date: widget.model.actualVisitDate, - from: DateTime.now().subtract(const Duration(days: 30)), - onDatePicker: (date) { - if (date == null) return; - widget.model.actualVisitDate = date; - setState(() {}); - }, - ), - const SizedBox( - height: 8, - ), - const ASubTitle("Expected Visit Date"), - if (widget.enableValidate && widget.model.expectedVisitDate == null) - ASubTitle( - context.translation.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - ADatePicker( - date: widget.model.expectedVisitDate, - from: DateTime.now().subtract(const Duration(days: 30)), - onDatePicker: (date) { - if (date == null) return; - widget.model.expectedVisitDate = date; - setState(() {}); - }, - ), - const SizedBox( - height: 8, - ), - const ASubTitle("Traveling Hours"), - const SizedBox( - height: 4, - ), - ATextFormField( - initialValue: (widget.model.travelingHours ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.titleMedium, - textInputType: TextInputType.number, - onChange: (value) { - widget.model.travelingHours = value; - }, - ), - const SizedBox(height: 12), - MultiFilesPicker(label: "PPM Attachments", files: widget.model.files), - // AMiniOneFilePicker( - // //error: _validate && _serviceReport.image == null, - // file: widget.model.file, - // onPick: (file) { - // widget.model.file = file; - // }, - // ), - const SizedBox( - height: 8, - ), - const ASubTitle("Nurse Signature"), - ESignature( - oldSignature: widget.model.signatureNurse, - newSignature: widget.model.localNurseSignature, - onChange: (signature) { - if (signature == null || signature.isEmpty) { - return; - } - widget.model.localNurseSignature = signature; - widget.model.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; - }, - ), - const SizedBox( - height: 8, - ), - const ASubTitle("Engineer Signature"), - ESignature( - oldSignature: widget.model.signatureEngineer, - newSignature: widget.model.localEngineerSignature, - onChange: (signature) { - if (signature == null || signature.isEmpty) { - return; - } - widget.model.localEngineerSignature = signature; - widget.model.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; - }, - ), - const SizedBox( - height: 8, - ), - ], - ), + return SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + 8.height, + + /// required + SingleItemDropDownMenu( + context: context, + title: "PPM Visit Status", + onSelect: (value) { + if (value != null) { + widget.model.ppmVisitStatus = value; + } + }, + ), + 8.height, + + /// required + AppTimer( + timer: widget.model.timer, + enabled: widget.model.timer.endAt == null, + onChange: (timer) async { + widget.model.timer = timer; + return true; + }, + ), + 8.height, + // const ASubTitle("Status"), + // if (widget.enableValidate && widget.model.status == null) + // ASubTitle( + // context.translation.requiredWord, + // color: Colors.red, + // ), + // const SizedBox( + // height: 4, + // ), + // PentryStatusMenu( + // initialValue: widget.model.status, + // onSelect: (status) { + // widget.model.status = status; + // }, + // ), + // const SizedBox( + // height: 8, + // ), + + /// required + ADatePicker( + label: "Actual Visit Date", + date: widget.model.actualVisitDate, + from: DateTime.now().subtract(const Duration(days: 30)), + onDatePicker: (date) { + if (date == null) return; + widget.model.actualVisitDate = date; + setState(() {}); + }, + ), + 8.height, + + /// required + ADatePicker( + label: "Expected Visit Date", + date: widget.model.expectedVisitDate, + from: DateTime.now().subtract(const Duration(days: 30)), + onDatePicker: (date) { + if (date == null) return; + widget.model.expectedVisitDate = date; + setState(() {}); + }, + ), + 8.height, + // const ASubTitle("Traveling Hours"), + // const SizedBox( + // height: 4, + // ), + // ATextFormField( + // initialValue: (widget.model.travelingHours ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.titleMedium, + // textInputType: TextInputType.number, + // onChange: (value) { + // widget.model.travelingHours = value; + // }, + // ), + 8.height, + MultiFilesPicker(label: "Attach Image", files: widget.model.files), + // AMiniOneFilePicker( + // //error: _validate && _serviceReport.image == null, + // file: widget.model.file, + // onPick: (file) { + // widget.model.file = file; + // }, + // ), + 8.height, + ESignature( + title: "Nurse Signature", + oldSignature: widget.model.signatureNurse, + newSignature: widget.model.localNurseSignature, + onChange: (signature) { + // if (signature == null || signature.isEmpty) { + // return; + // } + widget.model.localNurseSignature = signature; + widget.model.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + 8.height, + ESignature( + title: context.translation.engSign, + oldSignature: widget.model.signatureEngineer, + newSignature: widget.model.localEngineerSignature, + onChange: (signature) { + // if (signature == null || signature.isEmpty) { + // return; + // } + widget.model.localEngineerSignature = signature; + widget.model.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }, + ), + 8.height, + ], ), ); } diff --git a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart index 3d74dd78..ba70d496 100644 --- a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart +++ b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -9,24 +8,23 @@ import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; -class PentryPPMCheckListForm extends StatefulWidget { +class PentryPMChecklistForm extends StatefulWidget { final List models; final bool enableValidate; - const PentryPPMCheckListForm({ + const PentryPMChecklistForm({ Key key, this.models, this.enableValidate, }) : super(key: key); @override - State createState() => _PentryPPMCheckListFormState(); + State createState() => _PentryPMChecklistFormState(); } -class _PentryPPMCheckListFormState extends State { +class _PentryPMChecklistFormState extends State { @override Widget build(BuildContext context) { - return ListView.builder( padding: EdgeInsets.only( top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), diff --git a/lib/views/widgets/timer/app_timer.dart b/lib/views/widgets/timer/app_timer.dart index fdfe2483..3d6fd259 100644 --- a/lib/views/widgets/timer/app_timer.dart +++ b/lib/views/widgets/timer/app_timer.dart @@ -1,10 +1,14 @@ import 'dart:async'; import 'package:flutter/material.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/models/timer_model.dart'; -import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; +import '../../../new_views/app_style/app_color.dart'; + class AppTimer extends StatefulWidget { final TimerModel timer; final Future Function(TimerModel) onChange; @@ -96,37 +100,36 @@ class _AppTimerState extends State { @override Widget build(BuildContext context) { - return SizedBox( + return Container( width: 100 * AppStyle.getScaleFactor(context), - height: 28 * AppStyle.getScaleFactor(context), - child: ElevatedButton( - style: ElevatedButton.styleFrom( - minimumSize: const Size(1, 1), padding: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), backgroundColor: _running ? AColors.green[300] : AColors.grey, foregroundColor: Colors.black), - onPressed: _loading || widget.enabled == false ? null : _onPressed, - child: _loading - ? const SizedBox.square( - dimension: 18, - child: CircularProgressIndicator( - color: Colors.white, - )) - : Row( - children: [ - if (widget.enabled) Icon(_running ? Icons.pause : Icons.play_arrow), - Expanded( - child: Center( - child: ValueListenableBuilder( - valueListenable: _period, - builder: (context, value, _) { - return Text( - value, - style: widget.enabled ? widget.style : widget.style?.copyWith(color: Colors.black54), - ); - }), - ), - ), - ], - ), + height: 56.toScreenHeight, + padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: BorderRadius.circular(10), ), - ); + child: _loading + ? const SizedBox.square(dimension: 18, child: CircularProgressIndicator(color: Colors.white)) + : Row( + children: [ + Expanded( + child: ValueListenableBuilder( + valueListenable: _period, + builder: (context, value, _) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + "Timer".tinyFont(context), + value.bodyText(context).custom(color: AppColor.neutral50), + ], + ); + }, + ), + ), + if (widget.enabled) Icon(_running ? Icons.pause : Icons.play_arrow), + ], + ), + ).onPress(_loading || widget.enabled == false ? () {} : _onPressed); } } diff --git a/lib/views/widgets/visits/visit_item.dart b/lib/views/widgets/visits/visit_item.dart index 6defea31..b88e8809 100644 --- a/lib/views/widgets/visits/visit_item.dart +++ b/lib/views/widgets/visits/visit_item.dart @@ -11,7 +11,7 @@ import 'package:test_sa/views/pages/user/visits/visit_details.dart'; import '../../../controllers/providers/api/user_provider.dart'; import '../../../extensions/text_extensions.dart'; import '../../app_style/colors.dart'; -import '../../pages/user/visits/pantry/future_edit_pently.dart'; +import '../../pages/user/visits/pantry/edit_pentry.dart'; import '../requests/request_status.dart'; class VisitItem extends StatelessWidget { @@ -89,7 +89,7 @@ class VisitItem extends StatelessWidget { children: [ if (userProvider.user.type == UsersTypes.engineer && visit.status.value != 5 && visit.status.value != 3) "edit".toSvgAsset(height: 48, width: 48).onPress(() { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => FutureEditPentry(visit: visit))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPentry(visit: visit, pentry: visit.pentry))); }), Text(visit.createdOn != null ? visit.createdOn.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), ], diff --git a/lib/views/widgets/visits/visits_list.dart b/lib/views/widgets/visits/visits_list.dart index 280dc1ee..5fe65349 100644 --- a/lib/views/widgets/visits/visits_list.dart +++ b/lib/views/widgets/visits/visits_list.dart @@ -1,15 +1,12 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; -import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/visits/visit.dart'; -import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/visits/visit_item.dart'; import '../../../controllers/providers/api/user_provider.dart'; -import '../../../models/enums/user_types.dart'; class VisitsList extends StatefulWidget { final List visits; @@ -40,29 +37,18 @@ class _VisitsListState extends State { } return Stack( children: [ - Column( - children: [ - LazyLoading( - nextPage: widget.nextPage, - onLazyLoad: widget.onLazyLoad, - child: ListView.builder( - itemCount: widget.visits.length, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - itemBuilder: (context, itemIndex) { - Visit visit = widget.visits[itemIndex]; - // bool isSelected = _selectedVisits.contains(visit); - return VisitItem(visit: visit); - }, - ), - ).expanded, - if (userProvider.user.type == UsersTypes.normal_user) - AppFilledButton( - onPressed: () { - Navigator.push(context, MaterialPageRoute(builder: (context) => Container())); - }, - label: context.translation.createNewRequest, - ).paddingAll(16), - ], + LazyLoading( + nextPage: widget.nextPage, + onLazyLoad: widget.onLazyLoad, + child: ListView.builder( + itemCount: widget.visits.length, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { + Visit visit = widget.visits[itemIndex]; + // bool isSelected = _selectedVisits.contains(visit); + return VisitItem(visit: visit); + }, + ), ), // Align( // alignment: Alignment.bottomLeft,