From c96f61105112d3133602a2efdd5cbc6f636244a4 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Nov 2023 11:35:18 +0300 Subject: [PATCH 1/7] service request flow added & improvements --- lib/extensions/text_extensions.dart | 1 + lib/extensions/widget_extensions.dart | 4 +- lib/l10n/app_en.arb | 3 +- lib/models/comment.dart | 6 ++ .../common_widgets/app_text_form_field.dart | 4 +- .../requests/service_request_item_view.dart | 9 ++- .../user/requests/comments_bottom_sheet.dart | 40 +++++----- .../requests/service_request_details.dart | 77 ++++++++++--------- lib/views/widgets/loaders/no_item_found.dart | 10 +-- .../requests/service_request_item.dart | 22 +++--- 10 files changed, 100 insertions(+), 76 deletions(-) diff --git a/lib/extensions/text_extensions.dart b/lib/extensions/text_extensions.dart index b89f6625..d09b3898 100644 --- a/lib/extensions/text_extensions.dart +++ b/lib/extensions/text_extensions.dart @@ -145,6 +145,7 @@ extension FilesExtension on String { BoxFit fit = BoxFit.contain, }) => Image.asset("assets/images/$this.png", width: width?.toScreenWidth, height: height?.toScreenHeight, color: color, fit: fit); + LottieBuilder toLottieAsset({ int width, int height, diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index 30c0842f..002c6dc5 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -48,9 +48,9 @@ extension WidgetExtensions on Widget { ).toShadowContainer(context) : this; - Widget toShadowContainer(BuildContext context, {bool showShadow = true}) => showShadow + Widget toShadowContainer(BuildContext context, {bool showShadow = true, double padding = 16}) => showShadow ? Container( - padding: const EdgeInsets.all(16), + padding: EdgeInsets.all(padding), decoration: ShapeDecoration( color: Theme.of(context).cardColor, shape: RoundedRectangleBorder( diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 01732e16..aa168e16 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -360,5 +360,6 @@ "requestGasRefill" : "Request Gas Refill", "trackGasRefill" : "Track Gas Refill", "trackAssetTransfer" : "Track Asset Transfer", - "total" : "Total" + "total" : "Total", + "noDataFound" : "No Data Found" } \ No newline at end of file diff --git a/lib/models/comment.dart b/lib/models/comment.dart index f0bebfd2..63cd4732 100644 --- a/lib/models/comment.dart +++ b/lib/models/comment.dart @@ -14,11 +14,13 @@ class Comment { createdBy = json['createdBy'] != null ? CreatedBy.fromJson(json['createdBy']) : null; comment = json['comment']; } + num id; num callRequestId; String createdOn; CreatedBy createdBy; String comment; + Comment copyWith({ num id, num callRequestId, @@ -33,6 +35,7 @@ class Comment { createdBy: createdBy ?? this.createdBy, comment: comment ?? this.comment, ); + Map toJson() { final map = {}; map['id'] = id; @@ -56,8 +59,10 @@ class CreatedBy { userId = json['userId']; userName = json['userName']; } + String userId; String userName; + CreatedBy copyWith({ String userId, String userName, @@ -66,6 +71,7 @@ class CreatedBy { userId: userId ?? this.userId, userName: userName ?? this.userName, ); + Map toJson() { final map = {}; map['userId'] = userId; diff --git a/lib/new_views/common_widgets/app_text_form_field.dart b/lib/new_views/common_widgets/app_text_form_field.dart index 29676754..405880ad 100644 --- a/lib/new_views/common_widgets/app_text_form_field.dart +++ b/lib/new_views/common_widgets/app_text_form_field.dart @@ -27,6 +27,7 @@ class AppTextFormField extends StatefulWidget { final VoidCallback onAction; final Color backgroundColor; final bool alignLabelWithHint; + final bool showShadow; const AppTextFormField( {Key key, @@ -51,6 +52,7 @@ class AppTextFormField extends StatefulWidget { this.textInputAction, this.onAction, this.backgroundColor, + this.showShadow = true, this.alignLabelWithHint}) : super(key: key); @@ -71,7 +73,7 @@ class _AppTextFormFieldState extends State { return Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], + boxShadow: widget.showShadow ? [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)] : null, ), child: TextFormField( focusNode: widget.node, diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index 84444c5e..6f9e997d 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -5,7 +5,9 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; +import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/pages/user/requests/service_request_details.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; class ServiceRequestItemView extends StatelessWidget { @@ -65,6 +67,11 @@ class ServiceRequestItemView extends StatelessWidget { ], ), ], - ).toShadowContainer(context, showShadow: showShadow).onPress(() {}); + ).toShadowContainer(context, showShadow: showShadow).onPress(() { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => ServiceRequestDetailsPage( + serviceRequest: ServiceRequest(id: request.id.toString()), + ))); + }); } } diff --git a/lib/views/pages/user/requests/comments_bottom_sheet.dart b/lib/views/pages/user/requests/comments_bottom_sheet.dart index 4675b2b4..a92d141b 100644 --- a/lib/views/pages/user/requests/comments_bottom_sheet.dart +++ b/lib/views/pages/user/requests/comments_bottom_sheet.dart @@ -19,6 +19,7 @@ import '../../../widgets/loaders/loading_manager.dart'; class CommentsBottomSheet extends StatefulWidget { final String requestId; + const CommentsBottomSheet({Key key, @required this.requestId}) : super(key: key); @override @@ -58,50 +59,53 @@ class _CommentsBottomSheetState extends State { await commentsProvider.getComments(callId: widget.requestId); }, child: Column( + crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( width: 40.toScreenWidth, height: 5.toScreenHeight, decoration: BoxDecoration(color: AppColor.neutral40, borderRadius: BorderRadius.circular(30)), ), + 16.height, Align( alignment: AlignmentDirectional.centerStart, - child: context.translation.comments.heading3(context).custom(fontWeight: FontWeight.w600).paddingOnly(top: 16, bottom: 16), + child: context.translation.comments.heading3(context).custom(fontWeight: FontWeight.w600), ), commentsProvider.comments.isEmpty - ? NoItemFound(message: context.translation.noServiceRequestFound).expanded + ? NoItemFound(message: context.translation.noDataFound).expanded : LazyLoading( nextPage: commentsProvider.nextPage, onLazyLoad: () async => await commentsProvider.getComments(callId: widget.requestId), child: ListView.separated( itemCount: commentsProvider.comments.length, + padding: const EdgeInsets.only(top: 16, bottom: 8), separatorBuilder: (cxt, index) => 8.height, itemBuilder: (context, itemIndex) { final model = commentsProvider.comments[itemIndex]; - return Card( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - (model?.createdBy?.userName ?? "Nurse").heading6(context), - 8.height, - (model?.comment ?? "").bodyText(context), - 8.height, - Align( - alignment: AlignmentDirectional.bottomEnd, - child: DateTime.tryParse(model.createdOn).toIso8601String().toServiceRequestDetailsFormat.tinyFont(context), - ), - ], - ).paddingAll(16), - ); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (model?.createdBy?.userName ?? "Nurse").heading6(context), + 8.height, + (model?.comment ?? "").bodyText(context), + 8.height, + Align( + alignment: AlignmentDirectional.bottomEnd, + child: Text(DateTime.tryParse(model.createdOn).toIso8601String().toServiceRequestDetailsFormat, + style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)), + ), + ], + ).toShadowContainer(context); }, ), ).expanded, - if (userProvider.user.type == UsersTypes.normal_user) 16.height, + if (userProvider.user.type == UsersTypes.normal_user) 8.height, if (userProvider.user.type == UsersTypes.normal_user) AppTextFormField( labelText: "Type any comment", backgroundColor: AppColor.neutral30, alignLabelWithHint: true, + showShadow: false, validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField, textInputType: TextInputType.multiline, suffixIcon: "comment_send".toSvgAsset().paddingOnly(end: 16).onPress(() { diff --git a/lib/views/pages/user/requests/service_request_details.dart b/lib/views/pages/user/requests/service_request_details.dart index d8252baf..c317a009 100644 --- a/lib/views/pages/user/requests/service_request_details.dart +++ b/lib/views/pages/user/requests/service_request_details.dart @@ -49,7 +49,7 @@ class _ServiceRequestDetailsPageState extends State { ServiceRequestsProvider _serviceRequestsProvider = Provider.of(context); // _serviceRequestsProvider.getServiceRequestObjectById(requestId: serviceRequest.id); - Widget informationCard() { + Widget informationCard(ServiceRequest serviceRequest) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -66,32 +66,32 @@ class _ServiceRequestDetailsPageState extends State { Row( children: [ StatusLabel( - label: widget.serviceRequest.priority.name, - id: widget.serviceRequest.priority.id, - textColor: AColors.getPriorityStatusTextColor(widget.serviceRequest.priority.id), - backgroundColor: AColors.getPriorityStatusColor(widget.serviceRequest.priority.id)), + label: serviceRequest.priority.name, + id: serviceRequest.priority.id, + textColor: AColors.getPriorityStatusTextColor(serviceRequest.priority.id), + backgroundColor: AColors.getPriorityStatusColor(serviceRequest.priority.id)), 8.width, StatusLabel( - label: widget.serviceRequest.statusLabel, - textColor: AColors.getRequestStatusTextColor(widget.serviceRequest.statusValue), - backgroundColor: AColors.getRequestStatusColor(widget.serviceRequest.statusValue)), + label: serviceRequest.statusLabel, + textColor: AColors.getRequestStatusTextColor(serviceRequest.statusValue), + backgroundColor: AColors.getRequestStatusColor(serviceRequest.statusValue)), 1.width.expanded, ], ), 8.height, - Text(widget.serviceRequest.deviceEnName, style: AppTextStyles.heading5.copyWith(color: context.isDark?AppColor.neutral30: const Color(0xFF3B3D4A))), + Text(serviceRequest.deviceEnName, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), 8.height, Text( - '${context.translation.assetNumber}: ${widget.serviceRequest.device.assetNumber}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + '${context.translation.assetNumber}: ${serviceRequest.device.assetNumber}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), Text( - '${context.translation.requestType}: ${widget.serviceRequest.type.name}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + '${context.translation.requestType}: ${serviceRequest.type.name}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), Text( - '${context.translation.requestNo}: ${widget.serviceRequest.requestCode}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + '${context.translation.requestNo}: ${serviceRequest.requestCode}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), ], ).expanded, @@ -100,10 +100,11 @@ class _ServiceRequestDetailsPageState extends State { children: [ if (_userProvider.user.type == UsersTypes.normal_user) context.translation.code.toSvgAsset(width: 48).onPress(() { - Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: widget.serviceRequest))); + Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: serviceRequest))); }), if (_userProvider.user.type == UsersTypes.engineer) 16.height, - Text(widget.serviceRequest.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))), + Text(serviceRequest.date.toServiceRequestCardFormat, + textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), ], ) ], @@ -112,34 +113,35 @@ class _ServiceRequestDetailsPageState extends State { const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), 8.height, Text( - '${context.translation.manufacture}: ${widget.serviceRequest.device.modelDefinition.manufacturerName}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + '${context.translation.manufacture}: ${serviceRequest.device.modelDefinition.manufacturerName}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), Text( - '${context.translation.model}: ${widget.serviceRequest.device.modelDefinition.modelName}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + '${context.translation.model}: ${serviceRequest.device.modelDefinition.modelName}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), 8.height, - if ((widget.serviceRequest.callComments ?? "").isNotEmpty) ...[ + if ((serviceRequest.callComments ?? "").isNotEmpty) ...[ const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), 8.height, Text( - widget.serviceRequest.callComments, - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + serviceRequest.callComments, + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), ], - if (widget.serviceRequest.devicePhotos.isNotEmpty) ...[ + if (serviceRequest.devicePhotos.isNotEmpty) ...[ 8.height, const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), - FilesList(images: widget.serviceRequest.devicePhotos), + FilesList(images: serviceRequest.devicePhotos), ], - if (widget.serviceRequest.audio?.isNotEmpty ?? false) ...[ + if (serviceRequest.audio?.isNotEmpty ?? false) ...[ const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), 16.height, - ASoundPlayer(audio: widget.serviceRequest.audio), + ASoundPlayer(audio: serviceRequest.audio), + 8.height, ], ], - ).paddingAll(16), + ).paddingOnly(start: 16, end: 16, top: 16, bottom: 8), (_userProvider.user.type == UsersTypes.normal_user ? Container( height: 50, @@ -158,12 +160,12 @@ class _ServiceRequestDetailsPageState extends State { child: Row( children: [ Text( - '${context.translation.viewComments}...', + '${context.translation.commentHere}...', style: AppTextStyles.heading6.copyWith( color: AppColor.neutral50.withOpacity(.6), ), ).expanded, - SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 24 * AppStyle.getScaleFactor(context), color: AppColor.primary70), + SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 20 * AppStyle.getScaleFactor(context), color: AppColor.primary70), ], ), ) @@ -190,17 +192,18 @@ class _ServiceRequestDetailsPageState extends State { ), ], ).paddingOnly(bottom: 16, start: 16, end: 16)) - .onPress(() async { - await showModalBottomSheet( + .onPress(() { + showModalBottomSheet( context: context, useSafeArea: true, isScrollControlled: true, + useRootNavigator: true, backgroundColor: Colors.transparent, - builder: (context) => CommentsBottomSheet(requestId: widget.serviceRequest.id), + builder: (context) => CommentsBottomSheet(requestId: serviceRequest.id), ); }), ], - ).toShadowContainer(context); + ).toShadowContainer(context, padding: 0); } return Scaffold( @@ -213,13 +216,13 @@ class _ServiceRequestDetailsPageState extends State { if (snap.connectionState == ConnectionState.waiting) { return const ALoading(); } else if (snap.hasData) { - final serviceRequest = snap.data; + ServiceRequest serviceRequest = snap.data; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SingleChildScrollView( padding: const EdgeInsets.all(16), - child: informationCard(), + child: informationCard(serviceRequest), ).expanded, if (_userProvider.user.type == UsersTypes.engineer || (serviceRequest.statusValue == 5 || serviceRequest.statusValue == 3)) (serviceRequest.firstAction == null diff --git a/lib/views/widgets/loaders/no_item_found.dart b/lib/views/widgets/loaders/no_item_found.dart index 3466f7e7..8da966cd 100644 --- a/lib/views/widgets/loaders/no_item_found.dart +++ b/lib/views/widgets/loaders/no_item_found.dart @@ -1,4 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/app_style/app_text_style.dart'; import 'package:test_sa/views/app_style/sizing.dart'; class NoItemFound extends StatelessWidget { @@ -14,11 +18,7 @@ class NoItemFound extends StatelessWidget { return Stack( children: [ Center( - child: Text( - message ?? "no item found", - style: Theme.of(context).textTheme.headline6, - textScaleFactor: AppStyle.getScaleFactor(context), - ), + child: Text(message ?? "no item found", style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)), ), ListView(), ], diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index ac1f26a2..ba250f67 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -27,11 +27,11 @@ class ServiceRequestItem extends StatelessWidget { @override Widget build(BuildContext context) { - User _user = Provider.of(context, listen: false).user; - final servicesProvider = Provider.of(context, listen: false); - final settingProvider = Provider.of(context, listen: false); - Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; - Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + // User _user = Provider.of(context, listen: false).user; + // final servicesProvider = Provider.of(context, listen: false); + // final settingProvider = Provider.of(context, listen: false); + // Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + // Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; return Column( children: [ @@ -50,26 +50,26 @@ class ServiceRequestItem extends StatelessWidget { 8.width, StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)), 1.width.expanded, - Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark? AppColor.neutral30:const Color(0xFF3B3D4A))), + Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), ], ), 8.height, - Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: context.isDark? AppColor.neutral30:const Color(0xFF3B3D4A))), + Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), Text( '${context.translation.assetName}: ${request.deviceEnName}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), Text( '${context.translation.assetNumber}: ${request.device.assetNumber}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), Text( '${context.translation.requestType}: ${request.type.name}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), Text( '${context.translation.requestNo}: ${request.requestCode}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)), ), 8.height, Row( From 7ecd90a556537d4c878bf8c4e6f1627e20ca2a4a Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Nov 2023 11:51:54 +0300 Subject: [PATCH 2/7] gas refill flow added. --- lib/controllers/api_routes/urls.dart | 1 + .../providers/api/gas_refill_provider.dart | 13 ++++ .../requests/gas_refill_item_view.dart | 9 ++- .../user/gas_refill/gas_refill_details.dart | 66 +++++++++++-------- 4 files changed, 61 insertions(+), 28 deletions(-) diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 09bdea74..f3e608bc 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -94,6 +94,7 @@ class URLs { static get requestGasRefill => "$_baseUrl/GazRefill/AddGazRefill"; // get static get updateGasRefill => "$_baseUrl/GazRefill/UpdateGazRefill"; // get static get getGasRefill => "$_baseUrl/GazRefill/GetGazRefills"; // get + static get getGasRefillById => "$_baseUrl/GazRefill/GetGazRefillById"; // get //device transfer static get requestDeviceTransfer => "$_baseUrl/AssetTransfer/AddAssetTransfer"; // get diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index ff4f190e..3f2118a3 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -45,6 +45,19 @@ class GasRefillProvider extends ChangeNotifier { // failed _loading = false bool isLoading; + Future getGasRefillObjectById(num id) async { + try { + Response response = await ApiManager.instance.get(URLs.getGasRefillById + "?gazRefillId=$id"); + if (response.statusCode >= 200 && response.statusCode < 300) { + return GasRefillModel.fromJson(json.decode(response.body)["data"]); + } else { + return null; + } + } catch (error) { + return null; + } + } + /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 diff --git a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart index 027750dd..9972cdaa 100644 --- a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart +++ b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart @@ -5,8 +5,10 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; +import 'package:test_sa/models/new_models/gas_refill_model.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; class GasRefillItemView extends StatelessWidget { @@ -61,6 +63,11 @@ class GasRefillItemView extends StatelessWidget { ], ), ], - ).toShadowContainer(context, showShadow: showShadow).onPress(() {}); + ).toShadowContainer(context, showShadow: showShadow).onPress(() { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => GasRefillDetailsPage( + model: GasRefillModel(id: request.id), + ))); + }); } } diff --git a/lib/views/pages/user/gas_refill/gas_refill_details.dart b/lib/views/pages/user/gas_refill/gas_refill_details.dart index 5688996f..1ee8f6f6 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.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/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -8,7 +9,9 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; +import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; import '../../../../extensions/text_extensions.dart'; @@ -37,35 +40,44 @@ class _GasRefillDetailsPageState extends State { @override void initState() { - _model.fromGasRefillModel(widget.model); + // _model.fromGasRefillModel(gasRefillModel); super.initState(); } @override Widget build(BuildContext context) { _userProvider = Provider.of(context); + GasRefillProvider _gasRefillProvider = Provider.of(context); return Scaffold( appBar: DefaultAppBar(title: context.translation.gasRefillDetails), key: _scaffoldKey, body: SafeArea( - child: Form( - key: _formKey, - child: LoadingManager( - isLoading: _isLoading, - isFailedLoading: false, - stateCode: 200, - onRefresh: () async {}, - child: Column( - children: [informationCard()], - ), - ), + child: FutureBuilder( + future: _gasRefillProvider.getGasRefillObjectById(widget.model.id), + builder: (context, snap) { + if (snap.connectionState == ConnectionState.waiting) { + return const ALoading(); + } else if (!snap.hasData) { + _model = snap.data; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: informationCard(_model), + ).expanded, + ], + ); + } + return NoItemFound(message: context.translation.noDataFound); + }, ), ), ); } - Widget informationCard() { + Widget informationCard(GasRefillModel gasRefillModel) { return Column( children: [ Column( @@ -87,24 +99,24 @@ class _GasRefillDetailsPageState extends State { //), // 8.width, StatusLabel( - label: widget.model.status?.name ?? "", - textColor: AColors.getRequestStatusTextColor(widget.model.status?.value ?? 0), - backgroundColor: AColors.getRequestStatusColor(widget.model.status?.value ?? 0)), + label: gasRefillModel.status?.name ?? "", + textColor: AColors.getRequestStatusTextColor(gasRefillModel.status?.value ?? 0), + backgroundColor: AColors.getRequestStatusColor(gasRefillModel.status?.value ?? 0)), 8.height, context.translation.gasRefillRequest.heading5(context), 8.height, ///TBD - context.translation.gasRequest.bodyText(context), - '${context.translation.cylinderSize}: ${widget.model.gazRefillDetails[0].cylinderSize.value}'.bodyText(context), - '${context.translation.site}: ${widget.model.site.name}'.bodyText(context), + context.translation.gasRequest.bodyText(context), + '${context.translation.cylinderSize}: ${gasRefillModel.gazRefillDetails[0].cylinderSize.value}'.bodyText(context), + '${context.translation.site}: ${gasRefillModel.site.name}'.bodyText(context), ], ), 1.width.expanded, Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - if (_userProvider.user.type == UsersTypes.engineer && (widget.model.status?.value ?? 0) != 2) + if (_userProvider.user.type == UsersTypes.engineer && (gasRefillModel.status?.value ?? 0) != 2) CircleAvatar( radius: 25, backgroundColor: AppColor.neutral30, @@ -118,13 +130,13 @@ class _GasRefillDetailsPageState extends State { ), ).onPress( () async { - _model?.fromGasRefillModel(widget.model); + _model?.fromGasRefillModel(gasRefillModel); // setState(() {}); Navigator.push( context, MaterialPageRoute( builder: (context) => RequestGasRefill( - gasRefillModel: widget.model, + gasRefillModel: gasRefillModel, ), ), ).then((value) { @@ -135,7 +147,7 @@ class _GasRefillDetailsPageState extends State { setState(() {}); }, ), - Text(widget.model.startDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + Text(gasRefillModel.startDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), ], ) ], @@ -143,8 +155,8 @@ class _GasRefillDetailsPageState extends State { 8.height, const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), 8.height, - '${context.translation.requestedQuantity}: ${widget.model.gazRefillDetails[0].requestedQty}'.bodyText(context), - '${context.translation.deliveredQuantity}: ${widget.model.gazRefillDetails[0].deliverdQty}'.bodyText(context), + '${context.translation.requestedQuantity}: ${gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context), + '${context.translation.deliveredQuantity}: ${gasRefillModel.gazRefillDetails[0].deliverdQty}'.bodyText(context), 8.height, ], ).paddingAll(16), @@ -173,7 +185,7 @@ class _GasRefillDetailsPageState extends State { color: AppColor.neutral50.withOpacity(.6), ), ).expanded, - SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 24 * AppStyle.getScaleFactor(context), color: AppColor.primary70), + SvgPicture.asset("assets/images/comment_send.svg", width: 24 * AppStyle.getScaleFactor(context), height: 20 * AppStyle.getScaleFactor(context), color: AppColor.primary70), ], ), ) @@ -202,6 +214,6 @@ class _GasRefillDetailsPageState extends State { ).paddingOnly(bottom: 16, start: 16, end: 16)) .onPress(() {}), ], - ).toShadowContainer(context).paddingAll(16); + ).toShadowContainer(context, padding: 0); } } From f8ba08a44b2340dd6defd0ba4ce81ff13b3287bd Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Nov 2023 12:17:25 +0300 Subject: [PATCH 3/7] ppm flow added. --- .../api/regular_visits_provider.dart | 25 ++++ .../land_page/requests/ppm_item_view.dart | 4 +- .../pages/user/visits/visit_details.dart | 112 ++++++++++-------- 3 files changed, 91 insertions(+), 50 deletions(-) diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart index fccfe190..0c3dcd13 100644 --- a/lib/controllers/providers/api/regular_visits_provider.dart +++ b/lib/controllers/providers/api/regular_visits_provider.dart @@ -103,6 +103,31 @@ class RegularVisitsProvider extends ChangeNotifier { return response.statusCode; } + Future getVisitObjectById(num id) async { + try { + Map body = {}; + body.addAll(visitsSearch.toMap()); + body["pageNumber"] = 1; + body["pageSize"] = 3; + body["id"] = id; + + Response response = await ApiManager.instance.post( + URLs.getRegularVisits, + body: body, + ); + + if (response.statusCode >= 200 && response.statusCode < 300) { + List requestsListJson = json.decode(response.body)["data"]; + List visits = requestsListJson.map((request) => Visit.fromJson(request)).toList(); + return visits?.first; + } else { + return null; + } + } catch (error) { + return null; + } + } + /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 diff --git a/lib/new_views/pages/land_page/requests/ppm_item_view.dart b/lib/new_views/pages/land_page/requests/ppm_item_view.dart index bd069843..1114800a 100644 --- a/lib/new_views/pages/land_page/requests/ppm_item_view.dart +++ b/lib/new_views/pages/land_page/requests/ppm_item_view.dart @@ -65,6 +65,8 @@ class PpmItemView extends StatelessWidget { ], ), ], - ).toShadowContainer(context, showShadow: showShadow).onPress(() {}); + ).toShadowContainer(context, showShadow: showShadow).onPress(() { + Navigator.of(context).push(MaterialPageRoute(builder: (_) => VisitDetailsPage(visit: Visit(id: request.id)))); + }); } } diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index 3548258b..dfc846b7 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/regular_visits_provider.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'; @@ -8,6 +9,8 @@ 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/edit_pentry.dart'; +import 'package:test_sa/views/widgets/loaders/app_loading.dart'; +import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import '../../../../controllers/providers/api/user_provider.dart'; import '../../../../models/enums/user_types.dart'; @@ -25,58 +28,69 @@ class VisitDetailsPage extends StatelessWidget { Widget build(BuildContext context) { UserProvider userProvider = Provider.of(context); + RegularVisitsProvider _visitsProvider = Provider.of(context); + return Scaffold( appBar: DefaultAppBar(title: context.translation.preventiveMaintenance), body: SafeArea( - child: Column( - children: [ - SingleChildScrollView( - child: Column( - //mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - // StatusLabel( - // label: visit.priority.name, - // id: visit.priority.id, - // textColor: AColors.getPriorityStatusTextColor(visit.priority.id), - // backgroundColor: AColors.getPriorityStatusColor(visit.priority.id)), - // 8.width, - StatusLabel( - label: visit.status.name, - id: visit.status.id, - textColor: AColors.getRequestStatusTextColorByName(visit.status.name), - backgroundColor: AColors.getRequestStatusColorByName(visit.status.name), - ), - 1.width.expanded, - ], - ), - 8.height, - visit.deviceEnglishName.heading5(context), - 8.height, - '${context.translation.assetNumber}: ${visit.deviceNumber}'.bodyText(context), - '${context.translation.assetSN}: ${visit.deviceSerialNumber}'.bodyText(context), - '${context.translation.code}: ${visit.serialNumber}'.bodyText(context), - const Divider().defaultStyle(context), - '${context.translation.expectDate}: ${visit.expectDate?.toServiceRequestDetailsFormat}'.bodyText(context), - '${context.translation.actualDate}: ${visit.actualDate?.toServiceRequestDetailsFormat}'.bodyText(context), - const Divider().defaultStyle(context), - '${context.translation.assignedTo}: ${visit.assignTo}'.bodyText(context), - '${context.translation.engineerName}: ${visit.employName}'.bodyText(context), - '${context.translation.site}: ${visit.hospitalName}'.bodyText(context), - ], - ).toShadowContainer(context).paddingAll(16), - ).expanded, - if (userProvider.user.type == UsersTypes.engineer && visit.status.id != 270) - AppFilledButton( - onPressed: () { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPentry(visit: visit, pentry: visit.pentry))); - }, - label: context.translation.updateRequest, - ).paddingAll(16), - ], - ), + child: FutureBuilder( + future: _visitsProvider.getVisitObjectById(visit.id), + builder: (context, snap) { + if (snap.connectionState == ConnectionState.waiting) { + return const ALoading(); + } else if (snap.hasData) { + Visit visit = snap.data; + + return Column(children: [ + SingleChildScrollView( + child: Column( + //mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + // StatusLabel( + // label: visit.priority.name, + // id: visit.priority.id, + // textColor: AColors.getPriorityStatusTextColor(visit.priority.id), + // backgroundColor: AColors.getPriorityStatusColor(visit.priority.id)), + // 8.width, + StatusLabel( + label: visit.status.name, + id: visit.status.id, + textColor: AColors.getRequestStatusTextColorByName(visit.status.name), + backgroundColor: AColors.getRequestStatusColorByName(visit.status.name), + ), + 1.width.expanded, + ], + ), + 8.height, + visit.deviceEnglishName.heading5(context), + 8.height, + '${context.translation.assetNumber}: ${visit.deviceNumber}'.bodyText(context), + '${context.translation.assetSN}: ${visit.deviceSerialNumber}'.bodyText(context), + '${context.translation.code}: ${visit.serialNumber}'.bodyText(context), + const Divider().defaultStyle(context), + '${context.translation.expectDate}: ${visit.expectDate?.toServiceRequestDetailsFormat}'.bodyText(context), + '${context.translation.actualDate}: ${visit.actualDate?.toServiceRequestDetailsFormat}'.bodyText(context), + const Divider().defaultStyle(context), + '${context.translation.assignedTo}: ${visit.assignTo}'.bodyText(context), + '${context.translation.engineerName}: ${visit.employName}'.bodyText(context), + '${context.translation.site}: ${visit.hospitalName}'.bodyText(context), + ], + ).toShadowContainer(context).paddingAll(16), + ).expanded, + if (userProvider.user.type == UsersTypes.engineer && visit.status.id != 270) + AppFilledButton( + onPressed: () { + Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPentry(visit: visit, pentry: visit.pentry))); + }, + label: context.translation.updateRequest, + ).paddingAll(16) + ]); + } + return NoItemFound(message: context.translation.noDataFound); + }), ), ); } From ab83963c65b4685324444bbd51b031ca3e954824 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Nov 2023 14:11:27 +0300 Subject: [PATCH 4/7] improvements --- .../device_transfer/device_transfer_details.dart | 16 ++++++---------- lib/views/pages/user/visits/visit_details.dart | 1 - .../widgets/equipment/asset_item_listview.dart | 9 +++++---- .../widgets/equipment/single_device_picker.dart | 2 -- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 73c2be5a..81636434 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -30,35 +30,31 @@ class DeviceTransferDetails extends StatefulWidget { } class _DeviceTransferDetailsState extends State { - AssetTransfer _model; UserProvider _userProvider; + AssetTransfer _model; bool _isLoading = false; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @override void initState() { - _model = widget.model; super.initState(); } - Future _getDeviceTransfer() async { - _model = await Provider.of(context).getRequestById(assetTransferId: widget.model.id); - } - @override Widget build(BuildContext context) { + _userProvider ??= Provider.of(context); return Scaffold( appBar: DefaultAppBar(title: context.translation.deviceTransferDetails), key: _scaffoldKey, body: SafeArea( child: FutureBuilder( - future: _getDeviceTransfer(), + future: Provider.of(context).getRequestById(assetTransferId: widget.model.id), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const ALoading(); } else { - _userProvider = Provider.of(context); + _model = snapshot.data; return Form( key: _formKey, child: LoadingManager( @@ -108,8 +104,8 @@ class _DeviceTransferDetailsState extends State { // ], // ), 1.width, - Text(widget.model.createdOn != null ? widget.model.createdOn.toServiceRequestCardFormat : "", - textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color:context.isDark? AppColor.neutral10: Color(0xFF3B3D4A))), + Text(_model.createdOn != null ? _model.createdOn.toServiceRequestCardFormat : "", + textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF3B3D4A))), ], ), ], diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index dfc846b7..3065f7f1 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -44,7 +44,6 @@ class VisitDetailsPage extends StatelessWidget { return Column(children: [ SingleChildScrollView( child: Column( - //mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( diff --git a/lib/views/widgets/equipment/asset_item_listview.dart b/lib/views/widgets/equipment/asset_item_listview.dart index 6fd6890e..27654035 100644 --- a/lib/views/widgets/equipment/asset_item_listview.dart +++ b/lib/views/widgets/equipment/asset_item_listview.dart @@ -15,6 +15,7 @@ class AssetItemListView extends StatelessWidget { @override Widget build(BuildContext context) { return Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 95, @@ -38,15 +39,15 @@ class AssetItemListView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - device.modelDefinition.assetName.heading5(context), - "${context.translation.assetNumber} : ${device.assetNumber}".bodyText(context), - "${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText(context), + device.modelDefinition.assetName.heading6(context), + "${context.translation.assetNumber} : ${device.assetNumber}".bodyText(context), + "${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText(context), ], ), Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ - "${context.translation.serialNo} : ${device.assetSerialNo}".bodyText(context).expanded, + "${context.translation.serialNo} : ${device.assetSerialNo}".bodyText(context).expanded, Row( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index c6a3069d..dbff8e47 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -186,8 +186,6 @@ class _SingleDevicePickerState extends State { device: _searchableList[index], onPressed: (device) { Navigator.of(context).pushNamed(AssetDetailPage.id, arguments: device.id); - return; - Navigator.of(context).pop(device); }, ); }, From 84e6bf70a14c9e631009e413704e14b5b8870a37 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Mon, 13 Nov 2023 15:04:57 +0300 Subject: [PATCH 5/7] dark / ligth dark & localization --- lib/l10n/app_ar.arb | 1 + lib/l10n/app_en.arb | 1 + .../calender_fragments/monthly_fragment.dart | 2 +- .../calender_fragments/weekly_fragment.dart | 2 +- .../progress_fragment.dart | 2 +- .../my_request/my_requests_page.dart | 6 +++-- .../requests/gas_refill_item_view.dart | 16 +++++------- .../land_page/requests/ppm_item_view.dart | 21 ++++++---------- .../requests/service_request_item_view.dart | 25 ++++++------------- 9 files changed, 29 insertions(+), 47 deletions(-) diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index f4f5c82e..5a6c4c98 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -341,6 +341,7 @@ "nurseSignature" : "توقيع الممرض", "actualVisitDate": "تاريخ الزيارة الفعلي", "ppmVisit": "موعد زيارة الصيانة الوقائية", + "ppmRequest": "طلب الصيانة الوقائية", "timer": "مؤقت", "deviceStatus" : "حالة الجهاز", "addAsset" : "اضافة جهاز", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index aa168e16..4ae532c6 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -341,6 +341,7 @@ "commentHere" : "Comment Here", "nurseSignature" : "Nurse Signature", "ppmVisit": "PPM Visit Status", + "ppmRequest": "PPMs Request", "timer": "Timer", "deviceStatus" : "Device Status", "addAsset" : "Add Asset", diff --git a/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart index 864d806d..e01f614c 100644 --- a/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart @@ -66,7 +66,7 @@ class _MonthlyFragmentState extends State { }), dowBuilder: (context, dateTime) { final day = DateFormat("EE", context.isAr ? "ar" : "en").format(dateTime).toUpperCase(); - return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50)); + return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark? AppColor.neutral10 : AppColor.neutral50)); }, defaultBuilder: (context, dateTime, _) { final day = DateFormat("d").format(dateTime); diff --git a/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart b/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart index b1984440..38ff0a7c 100644 --- a/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart +++ b/lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart @@ -71,7 +71,7 @@ class _WeeklyFragmentState extends State { ), dowBuilder: (context, dateTime) { final day = DateFormat("EE", context.isAr ? "ar" : "en").format(dateTime).toUpperCase(); - return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50)); + return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark? AppColor.neutral10: AppColor.neutral50)); }, defaultBuilder: (context, dateTime, _) { final day = DateFormat("d").format(dateTime); diff --git a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart index 221045c2..b248f2b9 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart @@ -64,7 +64,7 @@ class ProgressFragment extends StatelessWidget { unselectedLabelStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), labelStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral60), indicatorPadding: const EdgeInsets.all(4), - indicator: BoxDecoration(color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), + indicator: BoxDecoration(color: context.isDark? AppColor.neutral20:Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), onTap: (index) { // setState(() {}); }, diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index 04c5d95d..8d9a8e01 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -40,8 +40,10 @@ class _MyRequestsPageState extends State { padding: const EdgeInsets.only(left: 16, right: 8), alignment: Alignment.center, decoration: ShapeDecoration( - color: const Color(0xFFEAF1F4), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + color: context.isDark ? Color(0xFF3B3D4A) : Color(0xFFEAF1F4), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), ), child: Row( children: [ diff --git a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart index 9972cdaa..7891e830 100644 --- a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart +++ b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart @@ -11,6 +11,8 @@ import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; +import '../../../app_style/app_color.dart'; + class GasRefillItemView extends StatelessWidget { final RequestsDetails request; final bool showShadow; @@ -33,19 +35,13 @@ class GasRefillItemView extends StatelessWidget { 8.width, StatusLabel(label: request.status, textColor: AColors.getRequestStatusTextColorByName(request.status), backgroundColor: AColors.getRequestStatusColorByName(request.status)), 1.width.expanded, - Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral10: Color(0xFF3B3D4A))), ], ), 8.height, - Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), - Text( - '${context.translation.gasType}: ${request.gasType}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), - Text( - '${context.translation.site}: ${request.site}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), + context.translation.gasRefillRequest.heading5(context), + '${context.translation.gasType}: ${request.gasType}'.bodyText(context), + '${context.translation.site}: ${request.site}'.bodyText(context), 8.height, Row( mainAxisSize: MainAxisSize.min, diff --git a/lib/new_views/pages/land_page/requests/ppm_item_view.dart b/lib/new_views/pages/land_page/requests/ppm_item_view.dart index 1114800a..20e31fa6 100644 --- a/lib/new_views/pages/land_page/requests/ppm_item_view.dart +++ b/lib/new_views/pages/land_page/requests/ppm_item_view.dart @@ -12,6 +12,8 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/visits/visit_details.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; +import '../../../app_style/app_color.dart'; + class PpmItemView extends StatelessWidget { final RequestsDetails request; final bool showShadow; @@ -34,24 +36,15 @@ class PpmItemView extends StatelessWidget { backgroundColor: AColors.getRequestStatusColorByName(request.status), ), 1.width.expanded, - Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral10: Color(0xFF3B3D4A))), ], ), 8.height, - Text("PPMs Request", style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), + context.translation.ppmRequest.heading5(context), 8.height, - Text( - '${context.translation.assetNumber}: ${request.assetName}', - style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), - ), - Text( - '${context.translation.assetSN}: ${request.assetNo}', - style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), - ), - Text( - '${context.translation.code}: ${request.code}', - style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), - ), + '${context.translation.assetNumber}: ${request.assetName}'.bodyText(context), + '${context.translation.assetSN}: ${request.assetNo}'.bodyText(context), + '${context.translation.code}: ${request.code}'.bodyText(context), 16.height, Row( mainAxisSize: MainAxisSize.min, diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index 6f9e997d..7a93e935 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -6,6 +6,7 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/service_request/service_request.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/requests/service_request_details.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; @@ -29,27 +30,15 @@ class ServiceRequestItemView extends StatelessWidget { 8.width, StatusLabel(label: request.status, textColor: AColors.getRequestStatusTextColorByName(request.status), backgroundColor: AColors.getRequestStatusColorByName(request.status)), 1.width.expanded, - Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral10: Color(0xFF3B3D4A))), ], ), 8.height, - Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), - Text( - '${context.translation.assetName}: ${request.assetName}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), - Text( - '${context.translation.assetNumber}: ${request.assetNo}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), - Text( - '${context.translation.requestType}: ${request.requestType}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), - Text( - '${context.translation.requestNo}: ${request.requestNo}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), + context.translation.serviceRequest.heading5(context), + '${context.translation.assetName}: ${request.assetName}'.bodyText(context), + '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), + '${context.translation.requestType}: ${request.requestType}'.bodyText(context), + '${context.translation.requestNo}: ${request.requestNo}'.bodyText(context), 8.height, Row( mainAxisSize: MainAxisSize.min, From ecacd2ec8fa75c34f05255a4d75ff71fb588bdd7 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Nov 2023 15:23:11 +0300 Subject: [PATCH 6/7] request list added on my requests. --- lib/l10n/app_en.arb | 26 +++++---- .../my_request/my_requests_page.dart | 57 ++++++++++++++++++- .../widgets/request_item_view_list.dart | 52 +++++++++-------- .../equipment/single_device_picker.dart | 4 +- 4 files changed, 97 insertions(+), 42 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index aa168e16..6cb41f2c 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -350,16 +350,18 @@ "item" : "Item", "measuredValue": "Measured Value", "overdue": "Overdue", - "sureExit" : "Are you sure ypu want to Exit? ", - "daily" : "Daily", - "weekly" : "Weekly", - "monthly" : "Monthly", - "myShift" : "My Shift", - "myTeamRequest" : "My Team Request", - "sunToThurs": "Sunday to Thursday", - "requestGasRefill" : "Request Gas Refill", - "trackGasRefill" : "Track Gas Refill", - "trackAssetTransfer" : "Track Asset Transfer", - "total" : "Total", - "noDataFound" : "No Data Found" + "sureExit" : "Are you sure ypu want to Exit? ", + "daily" : "Daily", + "weekly" : "Weekly", + "monthly" : "Monthly", + "myShift" : "My Shift", + "myTeamRequest" : "My Team Request", + "sunToThurs": "Sunday to Thursday", + "requestGasRefill" : "Request Gas Refill", + "trackGasRefill" : "Track Gas Refill", + "trackAssetTransfer" : "Track Asset Transfer", + "deviceTransferRequest" : "Device Transfer Requests", + "total" : "Total", + "noDataFound" : "No Data Found", + "allRequests" : "All Requests" } \ No newline at end of file diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index 04c5d95d..fc4479f3 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -6,6 +6,7 @@ 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/search_all_requests_model.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/pages/land_page/my_request/all_requests_filter_page.dart'; import 'package:test_sa/new_views/pages/land_page/my_request/all_requests_search_page.dart'; import 'package:test_sa/new_views/pages/land_page/widgets/request_item_view_list.dart'; @@ -21,9 +22,20 @@ class _MyRequestsPageState extends State { AllRequestsProvider _provider; SearchAllRequestsModel _search; + List requestsList; + int selectedRequest; + @override Widget build(BuildContext context) { if (_provider == null) { + requestsList = [ + context.translation.allRequests, + context.translation.serviceRequest, + context.translation.gasRefillRequest, + context.translation.deviceTransferRequest, + context.translation.preventiveMaintenance, + ]; + selectedRequest = 0; _provider = Provider.of(context, listen: false); _provider.getAllRequests(); } @@ -78,8 +90,47 @@ class _MyRequestsPageState extends State { ], ).paddingOnly(start: 16, end: 16), ), - body: Consumer(builder: (context, snapshot, _) { - return RequestItemViewList(snapshot.allRequestsAndCount?.requestsDetails ?? [], snapshot.isAllLoading); - })); + body: Column( + children: [ + SizedBox( + height: 34 + 16.0, + child: ListView.separated( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.only(top: 16, right: 16, left: 16), + itemBuilder: (cxt, index) => Container( + alignment: Alignment.center, + padding: const EdgeInsets.symmetric(horizontal: 8), + decoration: ShapeDecoration( + color: selectedRequest == index ? const Color(0xFFEAF1F4) : Colors.white, + shape: RoundedRectangleBorder( + side: BorderSide(width: 1, color: selectedRequest == index ? Color(0xFF4A8DB7) : Colors.white), + borderRadius: BorderRadius.circular(7), + ), + shadows: const [ + BoxShadow( + color: Color(0x07000000), + blurRadius: 14, + offset: Offset(0, 0), + spreadRadius: 0, + ) + ], + ), + child: Text(requestsList[index], style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, height: 1)), + ).onPress(() { + if (selectedRequest != index) { + setState(() { + selectedRequest = index; + }); + _provider.getAllRequests(typeTransaction: selectedRequest == 0 ? null : selectedRequest); + } + }), + separatorBuilder: (cxt, index) => 8.width, + itemCount: requestsList.length), + ), + Consumer(builder: (context, snapshot, _) { + return RequestItemViewList(snapshot.allRequestsAndCount?.requestsDetails ?? [], snapshot.isAllLoading); + }).expanded, + ], + )); } } diff --git a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart index 3f2ab25e..a0930fc4 100644 --- a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart +++ b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart @@ -1,4 +1,5 @@ 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/widget_extensions.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; @@ -6,6 +7,7 @@ import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart' import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart'; import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart'; +import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; class RequestItemViewList extends StatelessWidget { List list; @@ -15,30 +17,32 @@ class RequestItemViewList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.separated( - padding: const EdgeInsets.all(16), - itemBuilder: (cxt, index) { - if (isLoading) return SizedBox().toRequestShimmer(cxt, isLoading); - bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; - bool isGasRefill = list[index].nameOfType == "GasRefill"; - bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; - bool isPPMs = list[index].nameOfType == "PPMs"; + return (list?.isEmpty ?? true) + ? NoItemFound(message: context.translation.noDataFound) + : ListView.separated( + padding: const EdgeInsets.all(16), + itemBuilder: (cxt, index) { + if (isLoading) return SizedBox().toRequestShimmer(cxt, isLoading); + bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; + bool isGasRefill = list[index].nameOfType == "GasRefill"; + bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; + bool isPPMs = list[index].nameOfType == "PPMs"; - return isServiceRequest - ? ServiceRequestItemView(list[index]) - : isGasRefill - ? GasRefillItemView(list[index]) - : isPPMs - ? PpmItemView(list[index]) - : isAssetTransfer - ? AssetItemView(list[index]) - : Container( - height: 100, - width: double.infinity, - color: Colors.grey, - ); - }, - separatorBuilder: (cxt, index) => 8.height, - itemCount: isLoading ? 6 : list.length); + return isServiceRequest + ? ServiceRequestItemView(list[index]) + : isGasRefill + ? GasRefillItemView(list[index]) + : isPPMs + ? PpmItemView(list[index]) + : isAssetTransfer + ? AssetItemView(list[index]) + : Container( + height: 100, + width: double.infinity, + color: Colors.grey, + ); + }, + separatorBuilder: (cxt, index) => 8.height, + itemCount: isLoading ? 6 : list.length); } } diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index dbff8e47..2649cd5c 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -152,9 +152,7 @@ class _SingleDevicePickerState extends State { children: [ Expanded( child: _searchableList.isEmpty - ? NoItemFound( - message: context.translation.noDeviceFound, - ) + ? NoItemFound(message: context.translation.noDeviceFound) : LazyLoading( nextPage: _devicesProvider.nextPage, onLazyLoad: () async { From c8dd3bff4686532663b74993c6d4c959a447b47d Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Nov 2023 15:39:49 +0300 Subject: [PATCH 7/7] logic improve for request list in my requests. --- .../pages/land_page/widgets/request_item_view_list.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart index a0930fc4..684aec10 100644 --- a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart +++ b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart @@ -17,7 +17,7 @@ class RequestItemViewList extends StatelessWidget { @override Widget build(BuildContext context) { - return (list?.isEmpty ?? true) + return (list.isEmpty && !isLoading) ? NoItemFound(message: context.translation.noDataFound) : ListView.separated( padding: const EdgeInsets.all(16),