code and logic improvements.

design_3.0_latest
Sikander Saleem 1 year ago
parent 40a96bad7c
commit 690b3822f5

@ -4,7 +4,6 @@ import 'package:shimmer/shimmer.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../new_views/app_style/app_color.dart';
@ -32,7 +31,10 @@ extension WidgetExtensions on Widget {
flushbarPosition: FlushbarPosition.TOP,
backgroundColor: backgroundColor ?? AppColor.green70,
title: title,
messageText: Text(message,style: AppTextStyles.heading6.copyWith(color: AppColor.white10),),
messageText: Text(
message,
style: AppTextStyles.heading6.copyWith(color: AppColor.white10),
),
duration: Duration(seconds: duration ?? 3),
flushbarStyle: FlushbarStyle.GROUNDED,
reverseAnimationCurve: Curves.easeInOut,
@ -79,9 +81,9 @@ extension WidgetExtensions on Widget {
).toShadowContainer(context)
: this;
Widget toShadowContainer(BuildContext context, {bool showShadow = true,bool withoutShadow = true,Color? backgroundColor, double padding = 16,EdgeInsets ?paddingValue}) => showShadow
Widget toShadowContainer(BuildContext context, {bool showShadow = true, bool withShadow = true, Color? backgroundColor, double padding = 16, EdgeInsets? paddingObject}) => withShadow
? Container(
padding:paddingValue?? EdgeInsets.all(padding),
padding: paddingObject ?? EdgeInsets.all(padding),
width: double.infinity,
decoration: ShapeDecoration(
color: backgroundColor ?? AppColor.background(context),

@ -89,13 +89,12 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
@override
Widget build(BuildContext context) {
provider = Provider.of<X>(widget.context, listen: true);
final isEmpty = (X == NullableLoadingProvider ? widget.staticData : provider?.items)?.isEmpty ?? true;
return AppLoadingManager(
isLoading: widget.loading ?? ((X == NullableLoadingProvider) ? false : provider?.loading ?? false),
// Provide default value if null
isFailedLoading: (X == NullableLoadingProvider) ? false : provider?.items == null,
stateCode: (X == NullableLoadingProvider) ? 200 : provider?.stateCode ?? 0,
stateCode: (X == NullableLoadingProvider) ? 200 : provider?.stateCode,
onRefresh: () async {
if (X != NullableLoadingProvider) {
provider?.reset();

@ -76,7 +76,7 @@ class AssetItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: AssetTransfer(id: requestData!.id!))));
});
}
@ -134,7 +134,7 @@ class AssetItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: AssetTransfer(id: requestDetails!.id!))));
});
}

@ -68,7 +68,7 @@ class GasRefillItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => GasRefillDetailsPage(
@ -127,7 +127,7 @@ class GasRefillItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => GasRefillDetailsPage(

@ -67,7 +67,7 @@ class PpmItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request)));
});
}
@ -117,7 +117,7 @@ class PpmItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: requestDetails!)));
});
}

@ -69,7 +69,7 @@ class ServiceRequestItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => RequestDetailMain(requestId: requestData!.id!)));
});
}
@ -120,7 +120,7 @@ class ServiceRequestItemView extends StatelessWidget {
],
),
],
).toShadowContainer(context, withoutShadow: showShadow).onPress(() {
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => RequestDetailMain(requestId: requestDetails!.id!)));
});
}

@ -550,7 +550,7 @@ class ServiceRequestBottomSheet {
);
break;
case 1:
Navigator.push(
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const MaintenanceRequestForm()),
);

@ -1,9 +1,6 @@
import 'package:expansion_tile_card/expansion_tile_card.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/dashboard_latest/widgets/app_bar_widget.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,7 +13,6 @@ import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart';
class AssistantEmployeeCard extends StatefulWidget {
const AssistantEmployeeCard({super.key});
@override
@ -37,31 +33,30 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
super.initState();
}
Future<void> getInitialData() async {
Future<void> getInitialData() async {}
}
@override
@override
void dispose() {
// TODO: implement dispose
_workingHoursController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Consumer<RequestDetailProvider>(builder: (context, requestDetailProvider, child) {
return ExpansionTileCard(
key: cardA,
initialElevation: 0,
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.circular(10),
expandedTextColor: AppColor.black20,
shadowColor: AppColor.white10,
baseColor: AppColor.white10,
contentPadding: EdgeInsets.zero,
contentPadding: const EdgeInsets.only(left: 16,right: 16),
expandedColor: AppColor.white10,
duration: Duration.zero,
duration: Duration.zero,
elevation: 0,
title:context.translation.assistantEmployee.bodyText(context).custom(color: AppColor.black20),
title: context.translation.assistantEmployee.bodyText(context).custom(color: AppColor.black20),
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
@ -136,14 +131,13 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
selectedTime.hour,
selectedTime.minute,
);
if (requestDetailProvider.activityMaintenanceHelperModel!.startTime!=null&&selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.startTime!)) {
if (requestDetailProvider.activityMaintenanceHelperModel!.startTime != null && selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.startTime!)) {
"End Date time must be greater then start date".showToast;
return;
}
requestDetailProvider.activityMaintenanceHelperModel?.endTime = selectedDateTime;
requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
assignWorkingHours(requestDetailProvider: requestDetailProvider);
}
});
},
@ -172,7 +166,7 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
labelStyle: AppTextStyles.textFieldLabelStyle,
alignLabelWithHint: true,
textInputType: TextInputType.multiline,
onChange: (value){
onChange: (value) {
requestDetailProvider.activityMaintenanceHelperModel?.technicalComment = value;
},
onSaved: (value) {
@ -185,28 +179,29 @@ class _AssistantEmployeeCardState extends State<AssistantEmployeeCard> {
);
});
}
int calculateWorkingHours(DateTime? startTime, DateTime? endTime) {
if(startTime!=null&&endTime!=null){
if (startTime != null && endTime != null) {
Duration difference = endTime.difference(startTime);
int hours = difference.inHours;
int minutes = difference.inMinutes % 60;
return hours;
}else{
} else {
return -1;
}
}
assignWorkingHours({required RequestDetailProvider requestDetailProvider}){
int hours = calculateWorkingHours(requestDetailProvider.activityMaintenanceHelperModel!.startTime,requestDetailProvider.activityMaintenanceHelperModel!.endTime);
if(hours!=-1){
assignWorkingHours({required RequestDetailProvider requestDetailProvider}) {
int hours = calculateWorkingHours(requestDetailProvider.activityMaintenanceHelperModel!.startTime, requestDetailProvider.activityMaintenanceHelperModel!.endTime);
if (hours != -1) {
_workingHoursController.text = hours.toString();
requestDetailProvider.activityMaintenanceHelperModel!.workingHour=hours;
requestDetailProvider.activityMaintenanceHelperModel!.workingHour = hours;
}
}
final ButtonStyle flatButtonStyle = TextButton.styleFrom(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(4.0)),
),
);
}
final ButtonStyle flatButtonStyle = TextButton.styleFrom(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(4.0)),
),
);
}

@ -14,10 +14,12 @@ import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/service_request/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_details.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/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
@ -120,6 +122,20 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
//TODO replace with correct component..
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
context: context,
title: context.translation.supplier,
initialValue: null,
showAsBottomSheet: true,
onSelect: (supplier) {
if (supplier != null) {
// _subWorkOrders.supplier = supplier;
// log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString());
setState(() {});
}
},
),
SingleItemDropDownMenu<Lookup, NullableLoadingProvider>(
context: context,
height: 56.toScreenHeight,

@ -1,32 +1,26 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/parts_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_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/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/helper_data_models/maintenance_request/activity_maintenance_model.dart';
import 'package:test_sa/models/service_request/service_report.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/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/work_order/activity_status_provider.dart';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/assistant_employee_card.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../../controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import '../../../../../models/lookup.dart';
import '../../../../../new_views/common_widgets/app_text_form_field.dart';
@ -49,7 +43,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
ActivityStatusProvider? _activityStatusProvider;
ServiceReport? _serviceReport;
bool _isLoading = false;
bool isCurrentUserIsAssignedEmployee=false;
bool isCurrentUserIsAssignedEmployee = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController _workingHoursController = TextEditingController();
@ -67,7 +61,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
_requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
WidgetsBinding.instance.addPostFrameCallback((_) {
getInitialData();
});
// _isLoading = true;
@ -81,13 +75,13 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
}
Future<void> getInitialData() async {
_activityStatusProvider?.getDate();
Provider.of<ServiceReportRepairLocationProvider>(context,listen: false).getTypes();
final user = Provider.of<UserProvider>(context).user!;
isCurrentUserIsAssignedEmployee = (user.userID != _requestDetailProvider?.currentWorkOrder?.data?.assignedEmployee?.userId);
if (isCurrentUserIsAssignedEmployee) {
// _subWorkOrders.assistantEmployees = [widget.workOrder.assistantEmployees?.first?.copyWith(id: 0)];
}
_activityStatusProvider?.getDate();
Provider.of<ServiceReportRepairLocationProvider>(context, listen: false).getTypes();
final user = Provider.of<UserProvider>(context).user!;
isCurrentUserIsAssignedEmployee = (user.userID != _requestDetailProvider?.currentWorkOrder?.data?.assignedEmployee?.userId);
if (isCurrentUserIsAssignedEmployee) {
// _subWorkOrders.assistantEmployees = [widget.workOrder.assistantEmployees?.first?.copyWith(id: 0)];
}
}
void getRequestForWorkOrder() async {
@ -104,7 +98,6 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
@override
Widget build(BuildContext context) {
return Consumer<RequestDetailProvider>(builder: (context, requestDetailProvider, child) {
return LoadingManager(
isLoading: _isLoading,
@ -177,13 +170,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
).then((selectedTime) {
// Handle the selected date and time here.
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
selectedTime.minute,
);
DateTime selectedDateTime = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);
if (requestDetailProvider.activityMaintenanceHelperModel!.startTime != null &&
selectedDateTime.isBefore(requestDetailProvider.activityMaintenanceHelperModel!.startTime!)) {
"End Date time must be greater then start date".showToast;
@ -229,7 +216,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
},
),
16.height,
repairLocationWidget(context,requestDetailProvider),
repairLocationWidget(context, requestDetailProvider),
16.height,
AppTextFormField(
labelText: context.translation.assignedEmployee,
@ -260,7 +247,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
],
),
).toShadowContainer(context).paddingOnly(start: 13, end: 14, top: 12),
const AssistantEmployeeCard().toShadowContainer(context, paddingValue: const EdgeInsets.symmetric(horizontal: 16)).paddingOnly(start: 13, end: 14, top: 12),
const AssistantEmployeeCard().paddingOnly(start: 13, end: 14, top: 12),
100.height,
],
),
@ -280,7 +267,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
});
}
Widget repairLocationWidget(BuildContext context,RequestDetailProvider requestDetailProvider) {
Widget repairLocationWidget(BuildContext context, RequestDetailProvider requestDetailProvider) {
return Consumer<ServiceReportRepairLocationProvider>(builder: (cxt, snapshot, _) {
try {
requestDetailProvider.activityMaintenanceHelperModel?.repairLocation ??= snapshot.reasons?.first;
@ -298,7 +285,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
runSpacing: 8,
spacing: 8,
children: [
for (var element in snapshot.reasons??[])
for (var element in snapshot.reasons ?? [])
Row(
mainAxisSize: MainAxisSize.min,
children: [
@ -309,7 +296,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
value: element,
activeColor: Colors.red,
fillColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) return AppColor.primary10;
if (states.contains(WidgetState.selected)) return AppColor.primary10;
return AppColor.neutral130;
}),
groupValue: requestDetailProvider.activityMaintenanceHelperModel?.repairLocation,
@ -320,7 +307,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
}),
),
8.width,
Text(element.name??'', style: AppTextStyles.tinyFont.copyWith(color:AppColor.neutral120)),
Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120)),
],
)
],
@ -348,8 +335,9 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
requestDetailProvider.activityMaintenanceHelperModel!.workingHour = hours;
}
}
Future<bool> validate({required ActivityMaintenanceHelperModel model }) async {
if (model.activityStatus == null) {
Future<bool> validate({required ActivityMaintenanceHelperModel model}) async {
if (model.activityStatus == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.activityStatus}");
return false;
} else if (model.startTime == null) {
@ -358,16 +346,15 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
} else if (model.endTime == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.endTime}");
return false;
} else if (model.travelHours==null) {
} else if (model.travelHours == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.travelingHours}");
return false;
}else if (model.repairLocation == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.repairLocation}");
return false;
}
//write all other missing conditions..
} else if (model.repairLocation == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.repairLocation}");
return false;
}
//write all other missing conditions..
return true;
}
}

@ -168,8 +168,8 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
color: context.isDark ? AppColor.neutral50 : AppColor.neutral30,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20),
bottomLeft: Radius.circular(14),
bottomRight: Radius.circular(14),
),
),
),

Loading…
Cancel
Save