null seafty bug fixes

design_3.0_demo_module
muhammad.abbasi 2 years ago
parent a9ef3a827c
commit 1ce6f0f72c

@ -59,7 +59,7 @@ class BaseStep extends StatelessWidget {
child: CustomMultiChildLayout( child: CustomMultiChildLayout(
delegate: BaseStepDelegate( delegate: BaseStepDelegate(
stepRadius: radius, stepRadius: radius,
topTitle: step.topTitle, topTitle: step.topTitle??false,
direction: Axis.horizontal), direction: Axis.horizontal),
children: [ children: [
LayoutId( LayoutId(
@ -134,10 +134,10 @@ class BaseStep extends StatelessWidget {
child: step.customStep ?? child: step.customStep ??
Icon( Icon(
isActive && step.activeIcon != null isActive && step.activeIcon != null
? step.activeIcon.icon ? step.activeIcon!.icon
: isFinished && step.finishIcon != null : isFinished && step.finishIcon != null
? step.finishIcon.icon ? step.finishIcon!.icon
: step.icon.icon, : step.icon!.icon,
size: radius * 0.9, size: radius * 0.9,
color: Colors.white, color: Colors.white,
), ),
@ -147,25 +147,25 @@ class BaseStep extends StatelessWidget {
} }
class StepModel { class StepModel {
final Icon icon; final Icon ?icon;
final Icon finishIcon; final Icon ?finishIcon;
final Icon activeIcon; final Icon ?activeIcon;
final Widget? customStep; final Widget? customStep;
final String title; final String ?title;
final Widget customTitle; final Widget ?customTitle;
final String lineText; final String ?lineText;
final Widget customLineWidget; final Widget ?customLineWidget;
final bool topTitle; final bool? topTitle;
final bool enabled; final bool? enabled;
const StepModel({ const StepModel({
required this.icon, this.icon,
required this.finishIcon, this.finishIcon,
required this.activeIcon, this.activeIcon,
required this.title, this.title,
required this.lineText, this.lineText,
this.customStep, this.customStep,
required this.customTitle, this.customTitle,
required this.customLineWidget, this.customLineWidget,
this.topTitle = false, this.topTitle = false,
this.enabled = true, this.enabled = true,
}); });

@ -96,7 +96,7 @@ class _CustomStepperState extends State<CustomStepper> {
_scrollController = ScrollController(); _scrollController = ScrollController();
_padding = const EdgeInsetsDirectional.all(10); _padding = const EdgeInsetsDirectional.all(10);
if (widget.steps.any((element) => element.topTitle)) { if (widget.steps.any((element) => element.topTitle??false)) {
_padding = _padding!.add(const EdgeInsetsDirectional.only(top: 45)); _padding = _padding!.add(const EdgeInsetsDirectional.only(top: 45));
} }
if (widget.titlesAreLargerThanSteps) { if (widget.titlesAreLargerThanSteps) {
@ -189,7 +189,7 @@ class _CustomStepperState extends State<CustomStepper> {
stepRadius: widget.stepBorderRadius??10, stepRadius: widget.stepBorderRadius??10,
showStepBorder: widget.showStepBorder, showStepBorder: widget.showStepBorder,
lineLength: lineStyle!.lineLength, lineLength: lineStyle!.lineLength,
enabled: widget.steps[index].enabled, enabled: widget.steps[index].enabled??false,
); );
} }
@ -238,14 +238,13 @@ class _CustomStepperState extends State<CustomStepper> {
), ),
child: _buildBaseLine(index, axis), child: _buildBaseLine(index, axis),
), ),
if (axis == Axis.horizontal && if (axis == Axis.horizontal) ...[
widget.steps[index].lineText != null) ...[
const SizedBox(height: 5), const SizedBox(height: 5),
SizedBox( SizedBox(
width: lineStyle!.lineLength, width: lineStyle!.lineLength,
child: widget.steps[index].customLineWidget ?? child: widget.steps[index].customLineWidget ??
Text( Text(
widget.steps[index].lineText, widget.steps[index].lineText??'',
maxLines: 3, maxLines: 3,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: Theme.of(context).textTheme.labelSmall, style: Theme.of(context).textTheme.labelSmall,

@ -106,7 +106,7 @@ class DashBoardProvider extends ChangeNotifier {
isDetailLoading = false; isDetailLoading = false;
notifyListeners(); notifyListeners();
} else { } else {
requestDetailList!.data!.addAll(DD.DashboardDetail.fromJson(json.decode(response.body)['data']); requestDetailList!.data!.addAll(DD.DashboardDetail.fromJson(json.decode(response.body)["data"][0]).data??[]);
isDetailLoading = false; isDetailLoading = false;
notifyListeners(); notifyListeners();
} }

@ -20,7 +20,7 @@ class RequestDetailProvider extends ChangeNotifier {
} }
DateTime timerStartTime = DateTime(0, 0, 0, 0, 0, 0); // Start from 00:00:00 DateTime timerStartTime = DateTime(0, 0, 0, 0, 0, 0); // Start from 00:00:00
Timer timer; Timer? timer;
bool isTimerRunning = false; bool isTimerRunning = false;
void startTimer() { void startTimer() {
@ -56,65 +56,65 @@ class RequestDetailProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
WorkOrderDetail _currentWorkOrder; WorkOrderDetail ?_currentWorkOrder;
FixRemotely _fixRemotelyModel; FixRemotely ?_fixRemotelyModel=FixRemotely();
NeedVisit _needVisitModel; NeedVisit ?_needVisitModel=NeedVisit();
MarkAsFixed _markAsFixed; MarkAsFixed ?_markAsFixed=MarkAsFixed();
ActivitySparePartModel _activitySparePartModel; ActivitySparePartModel ?_activitySparePartModel= ActivitySparePartModel();
ActivitySparePartModel get activitySparePartModel => _activitySparePartModel; ActivitySparePartModel ?get activitySparePartModel => _activitySparePartModel;
set activitySparePartModel(ActivitySparePartModel value) { set activitySparePartModel(ActivitySparePartModel ? value) {
_activitySparePartModel = value; _activitySparePartModel = value;
notifyListeners(); notifyListeners();
} }
MarkAsFixed get markAsFixed => _markAsFixed; MarkAsFixed ? get markAsFixed => _markAsFixed;
set markAsFixed(MarkAsFixed value) { set markAsFixed(MarkAsFixed ? value) {
_markAsFixed = value; _markAsFixed = value;
notifyListeners(); notifyListeners();
} }
NurseActionModel _nurseActionModel; NurseActionModel ?_nurseActionModel;
NurseActionModel get nurseActionModel => _nurseActionModel; NurseActionModel? get nurseActionModel => _nurseActionModel;
set nurseActionModel(NurseActionModel value) { set nurseActionModel(NurseActionModel? value) {
_nurseActionModel = value; _nurseActionModel = value;
notifyListeners(); notifyListeners();
} }
NeedVisit get needVisitModel => _needVisitModel; NeedVisit ?get needVisitModel => _needVisitModel;
set needVisitModel(NeedVisit value) { set needVisitModel(NeedVisit? value) {
_needVisitModel = value; _needVisitModel = value;
notifyListeners(); notifyListeners();
} }
FixRemotely get fixRemotelyModel => _fixRemotelyModel; FixRemotely ?get fixRemotelyModel => _fixRemotelyModel;
set fixRemotelyModel(FixRemotely value) { set fixRemotelyModel(FixRemotely? value) {
_fixRemotelyModel = value; _fixRemotelyModel = value;
notifyListeners(); notifyListeners();
} }
WorkOrderDetail get currentWorkOrder => _currentWorkOrder; WorkOrderDetail ?get currentWorkOrder => _currentWorkOrder;
set currentWorkOrder(WorkOrderDetail value) { set currentWorkOrder(WorkOrderDetail? value) {
_currentWorkOrder = value; _currentWorkOrder = value;
notifyListeners(); notifyListeners();
} }
int stateCode; int ?stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool nextPage = true; bool nextPage = true;
TimeOfDay _selectedTime ; TimeOfDay? _selectedTime ;
TimeOfDay get selectedTime => _selectedTime; TimeOfDay? get selectedTime => _selectedTime;
set selectedTime(TimeOfDay value) { set selectedTime(TimeOfDay? value) {
_selectedTime = value; _selectedTime = value;
notifyListeners(); notifyListeners();
} // list of user requests } // list of user requests
@ -127,7 +127,7 @@ class RequestDetailProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
//getWorkOrderById...... //getWorkOrderById......
Future<WorkOrderDetail> getWorkOrderById({@required String id}) async { Future<WorkOrderDetail?> getWorkOrderById({required String id}) async {
try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl+"?workOrderId=$id"); final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl+"?workOrderId=$id");
@ -150,7 +150,7 @@ class RequestDetailProvider extends ChangeNotifier {
} }
} }
//engineerAcceptWorkOrder...... //engineerAcceptWorkOrder......
Future<CommonResponseModel> engineerAcceptWorkOrder({@required String id}) async { Future<CommonResponseModel> engineerAcceptWorkOrder({required String id}) async {
try { try {
final body = { final body = {
"workOrderId": id, "workOrderId": id,
@ -177,11 +177,11 @@ class RequestDetailProvider extends ChangeNotifier {
} }
} }
//engineerRejectWorkOrder...... //engineerRejectWorkOrder......
Future<CommonResponseModel> engineerRejectWorkOrder({@required String id,String feedBack}) async { Future<CommonResponseModel> engineerRejectWorkOrder({required String id,String? feedBack}) async {
try { try {
final body = { final body = {
"workOrderId": id, "workOrderId": id,
"feedback": feedBack, "feedback": feedBack??'',
}; };
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.engineerRejectUrl,body: body); final response = await ApiManager.instance.post(URLs.engineerRejectUrl,body: body);
@ -208,7 +208,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> engineerFixRemotely() async { Future<CommonResponseModel> engineerFixRemotely() async {
try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl,body: fixRemotelyModel.toJson()); final response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl,body: fixRemotelyModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -232,7 +232,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> engineerNeedVisit() async { Future<CommonResponseModel> engineerNeedVisit() async {
try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl,body: needVisitModel.toJson()); final response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl,body: needVisitModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -256,7 +256,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> engineerMarkAsFixed() async { Future<CommonResponseModel> engineerMarkAsFixed() async {
try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl,body: markAsFixed.toJson()); final response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl,body: markAsFixed!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -277,7 +277,7 @@ class RequestDetailProvider extends ChangeNotifier {
} }
} }
//assignEngineerToWorkOrder...... //assignEngineerToWorkOrder......
Future<CommonResponseModel> assignEngineerWorkOrder({@required String workOrderId,@required String engineerId}) async { Future<CommonResponseModel> assignEngineerWorkOrder({required String workOrderId,required String engineerId}) async {
try { try {
final body = { final body = {
"workOrderId": workOrderId, "workOrderId": workOrderId,
@ -308,7 +308,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> nurseReopen() async { Future<CommonResponseModel> nurseReopen() async {
try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.nurseConfirmReopenUrl,body: nurseActionModel.toJson()); final response = await ApiManager.instance.post(URLs.nurseConfirmReopenUrl,body: nurseActionModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -332,7 +332,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> nurseClose() async { Future<CommonResponseModel> nurseClose() async {
try { try {
isLoading = true; isLoading = true;
final response = await ApiManager.instance.post(URLs.nurseConfirmCloseUrl,body: nurseActionModel.toJson()); final response = await ApiManager.instance.post(URLs.nurseConfirmCloseUrl,body: nurseActionModel!.toJson());
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -354,7 +354,7 @@ class RequestDetailProvider extends ChangeNotifier {
} }
Future<int> updateActivitySparePart({@required ActivitySparePartModel activitySparePartModel}) async { Future<int> updateActivitySparePart({required ActivitySparePartModel activitySparePartModel}) async {
isLoading = true; isLoading = true;
try { try {
final response = await ApiManager.instance.put( final response = await ApiManager.instance.put(
@ -375,7 +375,7 @@ class RequestDetailProvider extends ChangeNotifier {
return -1; return -1;
} }
} }
Future<int> deleteActivitySparePart({@required int id,@required int workOrderId}) async { Future<int> deleteActivitySparePart({required int id,required int workOrderId}) async {
isLoading = true; isLoading = true;
var body = { var body = {
'id':id, 'id':id,
@ -400,7 +400,7 @@ class RequestDetailProvider extends ChangeNotifier {
return -1; return -1;
} }
} }
Future<int> createActivitySparePart({@required ActivitySparePartModel activitySparePartModel}) async { Future<int> createActivitySparePart({required ActivitySparePartModel activitySparePartModel}) async {
isLoading = true; isLoading = true;
try { try {
final response = await ApiManager.instance.put( final response = await ApiManager.instance.put(

@ -25,7 +25,7 @@ import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/app_text_form_field.dart'; import '../../../../new_views/common_widgets/app_text_form_field.dart';
class ServiceRequestBottomSheet { class ServiceRequestBottomSheet {
static Future fixRemotelyBottomSheet({@required BuildContext context}) { static Future fixRemotelyBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
@ -60,7 +60,7 @@ class ServiceRequestBottomSheet {
hideShadow: true, hideShadow: true,
height: 80.toScreenHeight, height: 80.toScreenHeight,
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.startDate ?? ""), date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
@ -77,17 +77,16 @@ class ServiceRequestBottomSheet {
selectedTime.hour, selectedTime.hour,
selectedTime.minute, selectedTime.minute,
); );
if (selectedDateTime != null) { //serviceRequestProvider.currentSelectedRequest?.date
if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest.date))) { if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) {
"Visit Date time must be greater then request date".showToast; "Visit Date time must be greater then request date".showToast;
return; return;
} }
setState(() { setState(() {
serviceRequestProvider.currentSelectedRequest.startDate = selectedDateTime?.toIso8601String(); serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime.toIso8601String();
}); });
print('start date i got is ${serviceRequestProvider.currentSelectedRequest.startDate}'); print('start date i got is ${serviceRequestProvider.currentSelectedRequest?.startDate}');
}
} }
}); });
} }
@ -123,10 +122,10 @@ class ServiceRequestBottomSheet {
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100,
alignLabelWithHint: true, alignLabelWithHint: true,
onChange: (text) { onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
onSaved: (text) { onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
), ),
16.height, 16.height,
@ -169,7 +168,7 @@ class ServiceRequestBottomSheet {
})); }));
} }
static Future initialVisitBottomSheet({@required BuildContext context}) { static Future initialVisitBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
@ -194,7 +193,7 @@ class ServiceRequestBottomSheet {
hideShadow: true, hideShadow: true,
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
height: 70.toScreenHeight, height: 70.toScreenHeight,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.visitDate ?? ""), date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
@ -211,25 +210,23 @@ class ServiceRequestBottomSheet {
selectedTime.hour, selectedTime.hour,
selectedTime.minute, selectedTime.minute,
); );
if (selectedDateTime != null) { if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) {
if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest.date))) {
"Visit Date time must be greater then request date".showToast; "Visit Date time must be greater then request date".showToast;
return; return;
} }
serviceRequestProvider.currentSelectedRequest.visitDate = selectedDateTime?.toIso8601String(); serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String();
}
} }
}); });
} }
}, },
), ),
if (serviceRequestProvider.currentSelectedRequest.firstAction?.id == 404 && Provider.of<SettingProvider>(context, listen: false).assetGroup.id == 1) ...[ if (serviceRequestProvider.currentSelectedRequest?.firstAction?.id == 404 && Provider.of<SettingProvider>(context, listen: false).assetGroup?.id == 1) ...[
8.height, 8.height,
Row( Row(
children: [ children: [
ADatePicker( ADatePicker(
label: context.translation.startDate, label: context.translation.startDate,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.startDate ?? ""), date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
@ -247,7 +244,7 @@ class ServiceRequestBottomSheet {
selectedTime.minute, selectedTime.minute,
); );
if (selectedDateTime != null) { if (selectedDateTime != null) {
serviceRequestProvider.currentSelectedRequest.startDate = selectedDateTime?.toIso8601String(); serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime?.toIso8601String();
} }
} }
}); });
@ -257,7 +254,7 @@ class ServiceRequestBottomSheet {
8.width, 8.width,
ADatePicker( ADatePicker(
label: context.translation.endDate, label: context.translation.endDate,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.endDate ?? ""), date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.endDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
@ -275,9 +272,9 @@ class ServiceRequestBottomSheet {
selectedTime.minute, selectedTime.minute,
); );
if (selectedDateTime != null) { if (selectedDateTime != null) {
serviceRequestProvider.currentSelectedRequest.endDate = selectedDateTime?.toIso8601String(); serviceRequestProvider.currentSelectedRequest?.endDate = selectedDateTime?.toIso8601String();
serviceRequestProvider.currentSelectedRequest.workingHours = (((DateTime.parse(serviceRequestProvider.currentSelectedRequest.endDate) serviceRequestProvider.currentSelectedRequest?.workingHours = (((DateTime.parse(serviceRequestProvider.currentSelectedRequest!.endDate!)
.difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest.startDate)) .difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.startDate!))
.inSeconds ?? .inSeconds ??
0) / 0) /
60) / 60) /
@ -300,10 +297,10 @@ class ServiceRequestBottomSheet {
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
alignLabelWithHint: true, alignLabelWithHint: true,
onChange: (text) { onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
onSaved: (text) { onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
), ),
12.height, 12.height,
@ -313,7 +310,7 @@ class ServiceRequestBottomSheet {
loading: serviceRequestProvider.isLoading ?? false, loading: serviceRequestProvider.isLoading ?? false,
onPressed: () async { onPressed: () async {
_formKey.currentState.save(); _formKey.currentState?.save();
// await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest); // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest);
// Navigator.pop(context, true); // Navigator.pop(context, true);
@ -328,7 +325,7 @@ class ServiceRequestBottomSheet {
})); }));
} }
static Future rejectRequestBottomSheet({@required BuildContext context}) { static Future rejectRequestBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
@ -352,11 +349,11 @@ class ServiceRequestBottomSheet {
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
height: 70.toScreenHeight, height: 70.toScreenHeight,
title: context.translation.rejectionReason, title: context.translation.rejectionReason,
initialValue: serviceRequestProvider.currentSelectedRequest.firstAction, //_serviceRequest.firstAction, initialValue: serviceRequestProvider.currentSelectedRequest?.firstAction, //_serviceRequest.firstAction,
onSelect: (value) { onSelect: (value) {
serviceRequestProvider.currentSelectedRequest.firstAction = value; serviceRequestProvider.currentSelectedRequest?.firstAction = value;
if (serviceRequestProvider.currentSelectedRequest.firstAction.value != 2) { if (serviceRequestProvider.currentSelectedRequest?.firstAction?.value != 2) {
serviceRequestProvider.currentSelectedRequest.visitDate = null; serviceRequestProvider.currentSelectedRequest?.visitDate = null;
} }
}, },
), ),
@ -367,10 +364,10 @@ class ServiceRequestBottomSheet {
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
alignLabelWithHint: true, alignLabelWithHint: true,
onChange: (text) { onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
onSaved: (text) { onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
), ),
16.height, 16.height,
@ -383,7 +380,7 @@ class ServiceRequestBottomSheet {
showBorder: true, showBorder: true,
loading: snapshot.isLoading ?? false, loading: snapshot.isLoading ?? false,
onPressed: () async { onPressed: () async {
_formKey.currentState.save(); _formKey.currentState?.save();
//Todo implement backend logic.. //Todo implement backend logic..
// serviceRequestProvider.serviceRequest.device = asset; // serviceRequestProvider.serviceRequest.device = asset;
// await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.currentSelectedRequest); // await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.currentSelectedRequest);
@ -399,12 +396,12 @@ class ServiceRequestBottomSheet {
})); }));
} }
static Future activityTypeBottomSheet({@required BuildContext context}) { static Future activityTypeBottomSheet({required BuildContext context}) {
final List<Map<String, String>> items = [ final List<Map<String, String>> items = [
{'heading': context.translation.sparePartRequest, 'subHeading': context.translation.sparePartRequestDetail, 'icon': AppAsset.sparePartIcon}, {'heading': context.translation.sparePartRequest, 'subHeading': context.translation.sparePartRequestDetail, 'icon': AppAsset.sparePartIcon},
{'heading': context.translation.maintenanceRequest, 'subHeading': context.translation.sparePartRequestDetail, 'icon': AppAsset.maintenanceIcon}, {'heading': context.translation.maintenanceRequest, 'subHeading': context.translation.sparePartRequestDetail, 'icon': AppAsset.maintenanceIcon},
]; ];
Widget listItem({@required BuildContext context, @required String icon, @required String heading, @required String subHeading, @required VoidCallback onTap}) { Widget listItem({required BuildContext context, required String icon, required String heading, required String subHeading, required VoidCallback onTap}) {
return Card( return Card(
color: AppColor.neutral80, color: AppColor.neutral80,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
@ -430,7 +427,7 @@ class ServiceRequestBottomSheet {
); );
} }
void onItemTap({@required int index, @required ServiceRequest serviceRequest, @required BuildContext context}) { void onItemTap({required int index, required ServiceRequest serviceRequest, required BuildContext context}) {
switch (index) { switch (index) {
case 0: case 0:
Navigator.of(context).push(MaterialPageRoute(builder: (_) => const SparePartRequest())); Navigator.of(context).push(MaterialPageRoute(builder: (_) => const SparePartRequest()));
@ -493,12 +490,12 @@ class ServiceRequestBottomSheet {
itemBuilder: (context, index) { itemBuilder: (context, index) {
final item = items[index]; final item = items[index];
return listItem( return listItem(
icon: item['icon'], icon: item['icon']!,
heading: item['heading'], heading: item['heading']!,
subHeading: item['subHeading'], subHeading: item['subHeading']!,
context: context, context: context,
onTap: () { onTap: () {
onItemTap(serviceRequest: serviceRequestProvider.currentSelectedRequest, index: index, context: context); onItemTap(serviceRequest: serviceRequestProvider.currentSelectedRequest!, index: index, context: context);
}); });
}, },
), ),
@ -508,7 +505,7 @@ class ServiceRequestBottomSheet {
})); }));
} }
static Future actionBottomSheet({@required BuildContext context, @required String title, String button1Text, String button2Text, VoidCallback button1Tap, VoidCallback button2Tap}) { static Future actionBottomSheet({required BuildContext context, required String title, String? button1Text, String ?button2Text, VoidCallback ?button1Tap, VoidCallback ?button2Tap}) {
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
useSafeArea: true, useSafeArea: true,
@ -562,7 +559,7 @@ class ServiceRequestBottomSheet {
); );
})); }));
} }
static Future feedBackBottomSheet({@required BuildContext context}) { static Future feedBackBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
@ -599,10 +596,10 @@ class ServiceRequestBottomSheet {
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100,
alignLabelWithHint: true, alignLabelWithHint: true,
onChange: (text) { onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
onSaved: (text) { onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
), ),
16.height, 16.height,
@ -620,7 +617,7 @@ class ServiceRequestBottomSheet {
); );
})); }));
} }
static Future nurseTakeActionBottomSheet({@required BuildContext context}) { static Future nurseTakeActionBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,
@ -633,7 +630,7 @@ class ServiceRequestBottomSheet {
child: SingleChildScrollView( child: SingleChildScrollView(
child: StatefulBuilder(builder: (context, setState) { child: StatefulBuilder(builder: (context, setState) {
bool acknowledge = false; bool acknowledge = false;
Uint8List newSignature; Uint8List ?newSignature;
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
@ -647,11 +644,11 @@ class ServiceRequestBottomSheet {
Row( Row(
children: [ children: [
Checkbox( Checkbox(
value: serviceRequestProvider.ackhnowledge, value: acknowledge,
activeColor: AppColor.blueStatus(context), activeColor: AppColor.blueStatus(context),
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
acknowledge = !value; acknowledge = !value!;
}); });
print('acknowledge value is $acknowledge'); print('acknowledge value is $acknowledge');
@ -663,7 +660,7 @@ class ServiceRequestBottomSheet {
ESignature( ESignature(
title: '', title: '',
oldSignature: '', oldSignature: '',
newSignature: newSignature, newSignature: newSignature,
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
showShadow: false, showShadow: false,
onSaved: (signature) { onSaved: (signature) {

@ -27,18 +27,17 @@ import '../../../../../../new_views/common_widgets/default_app_bar.dart';
class AssetRetired extends StatefulWidget { class AssetRetired extends StatefulWidget {
static const String id = "/asset-tobe-retired"; static const String id = "/asset-tobe-retired";
const AssetRetired({Key key}) : super(key: key); const AssetRetired({Key? key}) : super(key: key);
@override @override
_AssetRetiredState createState() => _AssetRetiredState(); _AssetRetiredState createState() => _AssetRetiredState();
} }
class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMixin { class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMixin {
UserProvider _userProvider;
SettingProvider _settingProvider; ServiceRequestsProvider? _serviceRequestsProvider;
ServiceRequestsProvider _serviceRequestsProvider; ServiceStatusProvider ?_assetTypeProvider;
ServiceStatusProvider _assetTypeProvider; ServiceReport ?_serviceReport;
ServiceReport _serviceReport;
bool _isLoading = false; bool _isLoading = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -56,38 +55,34 @@ class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMix
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset(); Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).reset(); Provider.of<ReasonProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest.id; Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest?.id;
} }
// _isLoading = true; // _isLoading = true;
} }
Asset loanAvailabilityAsset;
void getRequestForWorkOrder() async { void getRequestForWorkOrder() async {
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
_serviceReport.callRequest = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: serviceRequestsProvider.currentSelectedRequest.id); _serviceReport?.callRequest = await _serviceRequestsProvider?.getCallRequestForWorkOrder(callId: serviceRequestsProvider.currentSelectedRequest?.id??'0');
await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); await _assetTypeProvider?.getTypes();
_serviceReport.assignedEmployee = _serviceReport.callRequest?.assignedEmployee; _serviceReport?.assignedEmployee = _serviceReport?.callRequest?.assignedEmployee;
_serviceReport.equipmentStatus = _serviceReport.callRequest?.defectType; _serviceReport?.equipmentStatus = _serviceReport?.callRequest?.defectType;
_serviceReport.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web _serviceReport?.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context); _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
if (_serviceReport.callRequest == null) { if (_serviceReport?.callRequest == null) {
getRequestForWorkOrder(); getRequestForWorkOrder();
} }
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport?.assetType = _assetTypeProvider?.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport?.callRequest?.assetType,
orElse: () => null, orElse: () => Lookup(),
); );
final List<File> _files = []; final List<File> _files = [];
@ -131,10 +126,10 @@ class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMix
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100,
alignLabelWithHint: true, alignLabelWithHint: true,
onChange: (text) { onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
onSaved: (text) { onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text; serviceRequestProvider.currentSelectedRequest?.comments = text;
}, },
), ),
23.height, 23.height,

@ -27,23 +27,22 @@ import '../../../../../../new_views/common_widgets/default_app_bar.dart';
class VerifyAssetDetails extends StatefulWidget { class VerifyAssetDetails extends StatefulWidget {
static const String id = "/verify-asset-detail"; static const String id = "/verify-asset-detail";
const VerifyAssetDetails({Key key}) : super(key: key); const VerifyAssetDetails({Key? key}) : super(key: key);
@override @override
_VerifyAssetDetailsState createState() => _VerifyAssetDetailsState(); _VerifyAssetDetailsState createState() => _VerifyAssetDetailsState();
} }
class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProviderStateMixin { class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProviderStateMixin {
UserProvider _userProvider;
SettingProvider _settingProvider; ServiceRequestsProvider? _serviceRequestsProvider;
ServiceRequestsProvider _serviceRequestsProvider; ServiceStatusProvider ?_assetTypeProvider;
ServiceStatusProvider _assetTypeProvider; ServiceReport? _serviceReport;
PartsProvider _partsProvider;
ServiceReport _serviceReport;
bool _isLoading = false; bool _isLoading = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
int _selectedValue = 1; int _selectedValue = 1;
var loanAvailabilityAsset;
@override @override
void initState() { void initState() {
@ -58,39 +57,34 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset(); Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).reset(); Provider.of<ReasonProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest.id; Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest?.id;
} }
// _isLoading = true; // _isLoading = true;
} }
Asset loanAvailabilityAsset;
void getRequestForWorkOrder() async { void getRequestForWorkOrder() async {
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
_serviceReport.callRequest = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: serviceRequestsProvider.currentSelectedRequest.id); _serviceReport?.callRequest = await _serviceRequestsProvider?.getCallRequestForWorkOrder(callId: serviceRequestsProvider.currentSelectedRequest?.id??'0');
await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); await _assetTypeProvider?.getTypes();
_serviceReport.assignedEmployee = _serviceReport.callRequest?.assignedEmployee; _serviceReport?.assignedEmployee = _serviceReport?.callRequest?.assignedEmployee;
_serviceReport.equipmentStatus = _serviceReport.callRequest?.defectType; _serviceReport?.equipmentStatus = _serviceReport?.callRequest?.defectType;
_serviceReport.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web _serviceReport?.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context); _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
_partsProvider = Provider.of<PartsProvider>(context); if (_serviceReport?.callRequest == null) {
if (_serviceReport.callRequest == null) {
getRequestForWorkOrder(); getRequestForWorkOrder();
} }
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport?.assetType = _assetTypeProvider?.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport?.callRequest?.assetType,
orElse: () => null, orElse: () => Lookup(),
); );
return Scaffold( return Scaffold(
@ -121,7 +115,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
hideShadow: true, hideShadow: true,
height: 70.toScreenHeight, height: 70.toScreenHeight,
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.startDate ?? ""), date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
@ -131,7 +125,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
).then((selectedTime) { ).then((selectedTime) {
// Handle the selected date and time here. // Handle the selected date and time here.
if (selectedTime != null) { if (selectedTime != null) {
DateTime selectedDateTime = DateTime( DateTime? selectedDateTime = DateTime(
selectedDate.year, selectedDate.year,
selectedDate.month, selectedDate.month,
selectedDate.day, selectedDate.day,
@ -139,15 +133,15 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
selectedTime.minute, selectedTime.minute,
); );
if (selectedDateTime != null) { if (selectedDateTime != null) {
if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest.date))) { if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) {
"Visit Date time must be greater then request date".showToast; "Visit Date time must be greater then request date".showToast;
return; return;
} }
setState(() { setState(() {
serviceRequestProvider.currentSelectedRequest.startDate = selectedDateTime?.toIso8601String(); serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime.toIso8601String();
}); });
print('start date i got is ${serviceRequestProvider.currentSelectedRequest.startDate}'); print('start date i got is ${serviceRequestProvider.currentSelectedRequest?.startDate}');
} }
} }
}); });
@ -162,10 +156,10 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
onSelect: (status) { onSelect: (status) {
if (status != null) { if (status != null) {
setState(() { setState(() {
_serviceReport.loanAvailablity = status; _serviceReport?.loanAvailablity = status;
if (_serviceReport.loanAvailablity.value != 1) { if (_serviceReport?.loanAvailablity?.value != 1) {
loanAvailabilityAsset = null; // loanAvailabilityAsset = null;
_serviceReport.assetLoan = null; _serviceReport?.assetLoan = null;
} }
}); });
} }
@ -177,7 +171,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
device: loanAvailabilityAsset, // ?? _serviceReport.device, device: loanAvailabilityAsset, // ?? _serviceReport.device,
onPickAsset: (asset) { onPickAsset: (asset) {
if (asset != null) { if (asset != null) {
_serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson()); _serviceReport?.assetLoan = AssetInfo.fromJson(asset.toJson());
setState(() { setState(() {
loanAvailabilityAsset = asset; loanAvailabilityAsset = asset;
}); });
@ -252,7 +246,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
); );
} }
Widget radioButtonWidget({@required String label, @required dynamic value}) { Widget radioButtonWidget({required String label, required dynamic value}) {
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -264,9 +258,9 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
activeColor: AppColor.primary10, activeColor: AppColor.primary10,
value: value, value: value,
groupValue: _selectedValue, groupValue: _selectedValue,
onChanged: (int value) { onChanged: (int ?value) {
setState(() { setState(() {
_selectedValue = value; _selectedValue = value!;
}); });
}, },
), ),

@ -29,24 +29,23 @@ import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart'
class ExternalMaintenanceRequest extends StatefulWidget { class ExternalMaintenanceRequest extends StatefulWidget {
static const String id = "/add-external-activity"; static const String id = "/add-external-activity";
const ExternalMaintenanceRequest({Key key}) : super(key: key); const ExternalMaintenanceRequest({Key? key}) : super(key: key);
@override @override
_ExternalMaintenanceRequestState createState() => _ExternalMaintenanceRequestState(); _ExternalMaintenanceRequestState createState() => _ExternalMaintenanceRequestState();
} }
class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest> with TickerProviderStateMixin { class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest> with TickerProviderStateMixin {
UserProvider _userProvider;
SettingProvider _settingProvider; ServiceRequest? _request;
ServiceRequest _request; ServiceRequestsProvider ?_serviceRequestsProvider;
ServiceRequestsProvider _serviceRequestsProvider; ServiceStatusProvider? _assetTypeProvider;
ServiceStatusProvider _assetTypeProvider; ServiceReport ?_serviceReport;
ServiceReport _serviceReport;
bool _isLoading = false; bool _isLoading = false;
TimeOfDay _startTime; TimeOfDay ?_startTime;
int _selectedValue = 1; int _selectedValue = 1;
TimeOfDay _endTime; TimeOfDay ?_endTime;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController _faultController = TextEditingController(); final TextEditingController _faultController = TextEditingController();
@ -67,13 +66,11 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
_request = Provider.of<ServiceRequestsProvider>(context, listen: false).currentSelectedRequest; _request = Provider.of<ServiceRequestsProvider>(context, listen: false).currentSelectedRequest;
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset(); Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).reset(); Provider.of<ReasonProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = _request.id; Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = _request?.id;
} }
// _isLoading = true; // _isLoading = true;
} }
Asset loanAvailabilityAsset;
@override @override
void dispose() { void dispose() {
_faultController.dispose(); _faultController.dispose();
@ -85,27 +82,25 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
void getRequestForWorkOrder() async { void getRequestForWorkOrder() async {
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
_serviceReport.callRequest = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: _request.id); _serviceReport?.callRequest = await _serviceRequestsProvider?.getCallRequestForWorkOrder(callId: _request?.id??'0');
await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); await _assetTypeProvider?.getTypes();
_serviceReport.assignedEmployee = _serviceReport.callRequest?.assignedEmployee; _serviceReport?.assignedEmployee = _serviceReport?.callRequest?.assignedEmployee;
_serviceReport.equipmentStatus = _serviceReport.callRequest?.defectType; _serviceReport?.equipmentStatus = _serviceReport?.callRequest?.defectType;
_serviceReport.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web _serviceReport?.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context); _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
if (_serviceReport.callRequest == null) { if (_serviceReport?.callRequest == null) {
getRequestForWorkOrder(); getRequestForWorkOrder();
} }
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport?.assetType = _assetTypeProvider?.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport?.callRequest?.assetType,
orElse: () => null, orElse: () => Lookup(),
); );
return LoadingManager( return LoadingManager(
@ -131,7 +126,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
staticData: Provider.of<ServiceReportLastCallsProvider>(context).calls, staticData: Provider.of<ServiceReportLastCallsProvider>(context).calls,
initialValue: _serviceReport?.calllastSituation, initialValue: _serviceReport?.calllastSituation,
onSelect: (status) { onSelect: (status) {
_serviceReport.calllastSituation = status; _serviceReport?.calllastSituation = status;
}, },
), ),
// Container( // Container(
@ -248,7 +243,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
); );
} }
Widget radioButtonWidget({@required String label, @required dynamic value}) { Widget radioButtonWidget({required String label, required dynamic value}) {
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -260,9 +255,9 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
activeColor: AppColor.primary10, activeColor: AppColor.primary10,
value: value, value: value,
groupValue: _selectedValue, groupValue: _selectedValue,
onChanged: (int value) { onChanged: (int? value) {
setState(() { setState(() {
_selectedValue = value; _selectedValue = value!;
}); });
}, },
), ),

@ -28,25 +28,23 @@ import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart'
class InternalMaintenanceRequest extends StatefulWidget { class InternalMaintenanceRequest extends StatefulWidget {
static const String id = "/add-internal-activity"; static const String id = "/add-internal-activity";
const InternalMaintenanceRequest({Key key}) : super(key: key); const InternalMaintenanceRequest({Key ?key}) : super(key: key);
@override @override
_InternalMaintenanceRequestState createState() => _InternalMaintenanceRequestState(); _InternalMaintenanceRequestState createState() => _InternalMaintenanceRequestState();
} }
class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest> with TickerProviderStateMixin { class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest> with TickerProviderStateMixin {
UserProvider _userProvider;
SettingProvider _settingProvider; ServiceRequest? _request;
ServiceRequest _request; ServiceRequestsProvider ?_serviceRequestsProvider;
ServiceRequestsProvider _serviceRequestsProvider; ServiceStatusProvider? _assetTypeProvider;
ServiceStatusProvider _assetTypeProvider; ServiceReport ?_serviceReport;
PartsProvider _partsProvider;
ServiceReport _serviceReport;
bool _isLoading = false; bool _isLoading = false;
TimeOfDay _startTime; TimeOfDay ?_startTime;
int _selectedValue = 1; int _selectedValue = 1;
TimeOfDay _endTime; TimeOfDay ?_endTime;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController _faultController = TextEditingController(); final TextEditingController _faultController = TextEditingController();
@ -67,13 +65,11 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
_request = Provider.of<ServiceRequestsProvider>(context, listen: false).currentSelectedRequest; _request = Provider.of<ServiceRequestsProvider>(context, listen: false).currentSelectedRequest;
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset(); Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).reset(); Provider.of<ReasonProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = _request.id; Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = _request?.id??'0';
} }
// _isLoading = true; // _isLoading = true;
} }
Asset loanAvailabilityAsset;
@override @override
void dispose() { void dispose() {
_faultController.dispose(); _faultController.dispose();
@ -85,28 +81,25 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
void getRequestForWorkOrder() async { void getRequestForWorkOrder() async {
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
_serviceReport.callRequest = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: _request.id); _serviceReport?.callRequest = await _serviceRequestsProvider?.getCallRequestForWorkOrder(callId: _request?.id??'0');
await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); await _assetTypeProvider?.getTypes();
_serviceReport.assignedEmployee = _serviceReport.callRequest?.assignedEmployee; _serviceReport?.assignedEmployee = _serviceReport?.callRequest?.assignedEmployee;
_serviceReport.equipmentStatus = _serviceReport.callRequest?.defectType; _serviceReport?.equipmentStatus = _serviceReport?.callRequest?.defectType;
_serviceReport.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web _serviceReport?.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context); _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
_partsProvider = Provider.of<PartsProvider>(context); if (_serviceReport?.callRequest == null) {
if (_serviceReport.callRequest == null) {
getRequestForWorkOrder(); getRequestForWorkOrder();
} }
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport?.assetType = _assetTypeProvider?.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport?.callRequest?.assetType,
orElse: () => null, orElse: () => Lookup(),
); );
return LoadingManager( return LoadingManager(
@ -132,7 +125,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
staticData: Provider.of<ServiceReportLastCallsProvider>(context).calls, staticData: Provider.of<ServiceReportLastCallsProvider>(context).calls,
initialValue: _serviceReport?.calllastSituation, initialValue: _serviceReport?.calllastSituation,
onSelect: (status) { onSelect: (status) {
_serviceReport.calllastSituation = status; _serviceReport?.calllastSituation = status;
}, },
), ),
8.height, 8.height,
@ -212,7 +205,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
contentPadding: EdgeInsets.symmetric(vertical: 18.toScreenHeight, horizontal: 16.toScreenWidth), contentPadding: EdgeInsets.symmetric(vertical: 18.toScreenHeight, horizontal: 16.toScreenWidth),
showShadow: false, showShadow: false,
onSaved: (value) { onSaved: (value) {
_serviceReport.travelingHours = double.tryParse(value) ?? 0.0; _serviceReport?.travelingHours = double.tryParse(value) ?? 0.0;
}, },
), ),
16.height, 16.height,
@ -239,7 +232,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
alignLabelWithHint: true, alignLabelWithHint: true,
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
onSaved: (value) { onSaved: (value) {
_serviceReport.comment = value; _serviceReport?.comment = value;
}, },
), ),
], ],
@ -272,7 +265,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
); );
} }
Widget radioButtonWidget({@required String label, @required dynamic value}) { Widget radioButtonWidget({required String label, required dynamic value}) {
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -284,9 +277,9 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
activeColor: AppColor.primary10, activeColor: AppColor.primary10,
value: value, value: value,
groupValue: _selectedValue, groupValue: _selectedValue,
onChanged: (int value) { onChanged: (int ?value) {
setState(() { setState(() {
_selectedValue = value; _selectedValue = value!;
}); });
}, },
), ),

@ -4,46 +4,25 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.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/new_views/common_widgets/default_app_bar.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/external_request.dart'; import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/external_request.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/internal_request.dart'; import 'package:test_sa/service_request_latest/views/forms/maintenance_request/components/internal_request.dart';
class MaintenanceRequestForm extends StatefulWidget { class MaintenanceRequestForm extends StatefulWidget {
const MaintenanceRequestForm({Key key}) : super(key: key); const MaintenanceRequestForm({Key? key}) : super(key: key);
@override @override
_MaintenanceRequestFormState createState() => _MaintenanceRequestFormState(); _MaintenanceRequestFormState createState() => _MaintenanceRequestFormState();
} }
class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with SingleTickerProviderStateMixin { class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with SingleTickerProviderStateMixin {
TabController _tabController;
int initialIndex = 0; int initialIndex = 0;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// _tabController = TabController(length: 2, vsync: this);
// print('tab controller i got is ${_tabController.length}');
// _tabController.addListener(() {
// print('add listner called..');
// setState(() {
// print('index i got is ${_tabController.index}');
// if (_tabController.index == 0) {
// _buttonLabel = 'abc';
// } else if (_tabController.index == 1) {
// _buttonLabel = 'def';
// }
// });
// });
} }
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -31,19 +31,19 @@ import '../../../../controllers/validator/validator.dart';
class SparePartRequest extends StatefulWidget { class SparePartRequest extends StatefulWidget {
static const String id = "/spare-part-request"; static const String id = "/spare-part-request";
const SparePartRequest({Key key}) : super(key: key); const SparePartRequest({Key ?key}) : super(key: key);
@override @override
_SparePartRequestState createState() => _SparePartRequestState(); _SparePartRequestState createState() => _SparePartRequestState();
} }
class _SparePartRequestState extends State<SparePartRequest> with TickerProviderStateMixin { class _SparePartRequestState extends State<SparePartRequest> with TickerProviderStateMixin {
UserProvider _userProvider; UserProvider? _userProvider;
SettingProvider _settingProvider; SettingProvider ?_settingProvider;
ServiceRequestsProvider _serviceRequestsProvider; ServiceRequestsProvider? _serviceRequestsProvider;
ServiceStatusProvider _assetTypeProvider; ServiceStatusProvider? _assetTypeProvider;
PartsProvider _partsProvider; PartsProvider? _partsProvider;
ServiceReport _serviceReport; ServiceReport? _serviceReport;
bool _isLoading = false; bool _isLoading = false;
List<SparePart> _spareParts = []; List<SparePart> _spareParts = [];
@ -66,12 +66,11 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset(); Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).reset(); Provider.of<ReasonProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest.id; Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest!.id;
} }
// _isLoading = true; // _isLoading = true;
} }
Asset loanAvailabilityAsset;
@override @override
void dispose() { void dispose() {
@ -84,12 +83,12 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
_serviceReport.callRequest = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: serviceRequestsProvider.currentSelectedRequest.id); _serviceReport?.callRequest = await _serviceRequestsProvider?.getCallRequestForWorkOrder(callId: serviceRequestsProvider!.currentSelectedRequest!.id!);
await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); await _assetTypeProvider?.getTypes();
_serviceReport.assignedEmployee = _serviceReport.callRequest?.assignedEmployee; _serviceReport?.assignedEmployee = _serviceReport?.callRequest?.assignedEmployee;
_serviceReport.equipmentStatus = _serviceReport.callRequest?.defectType; _serviceReport?.equipmentStatus = _serviceReport?.callRequest?.defectType;
_serviceReport.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web _serviceReport?.serviceType = Lookup(id: 65, name: "Interval", value: 1); // default value in service type as in web
_spareParts = await _partsProvider.getPartsList(assetId: serviceRequestsProvider.currentSelectedRequest.deviceId); _spareParts = await _partsProvider!.getPartsList(assetId: serviceRequestsProvider.currentSelectedRequest!.deviceId);
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
} }
@ -101,12 +100,12 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context); _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
_partsProvider = Provider.of<PartsProvider>(context); _partsProvider = Provider.of<PartsProvider>(context);
if (_serviceReport.callRequest == null) { if (_serviceReport?.callRequest == null) {
getRequestForWorkOrder(); getRequestForWorkOrder();
} }
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere( _serviceReport?.assetType = _assetTypeProvider?.statuses?.firstWhere(
(element) => element.value == _serviceReport.callRequest?.assetType, (element) => element.value == _serviceReport?.callRequest?.assetType,
orElse: () => null, orElse: () => Lookup(),
); );
return Scaffold( return Scaffold(
@ -142,7 +141,6 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
initialValue: serviceRequestProvider.initialSelectedSparePart.sparePart, initialValue: serviceRequestProvider.initialSelectedSparePart.sparePart,
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
onSelect: (part) { onSelect: (part) {
print('part i got is ${part.id}');
serviceRequestProvider.initialSelectedSparePart = SparePartsWorkOrders(id: 0, sparePart: part, qty: 0); serviceRequestProvider.initialSelectedSparePart = SparePartsWorkOrders(id: 0, sparePart: part, qty: 0);
}, },
), ),
@ -192,7 +190,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
showWithoutDecoration: true, showWithoutDecoration: true,
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
onSaved: (value) { onSaved: (value) {
_serviceReport.comment = value; _serviceReport?.comment = value;
}, },
), ),
15.height, 15.height,

@ -1,4 +1,3 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -8,7 +7,6 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/device/asset.dart';
@ -20,7 +18,6 @@ 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/models/service_request/supplier_details.dart';
import 'package:test_sa/models/service_request/wo_call_request.dart'; import 'package:test_sa/models/service_request/wo_call_request.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
@ -30,9 +27,9 @@ import 'package:test_sa/views/widgets/loaders/app_loading.dart';
class AssetConditionView extends StatefulWidget { class AssetConditionView extends StatefulWidget {
static const id = "/CreateSubWorkOrder"; static const id = "/CreateSubWorkOrder";
final SearchWorkOrder workOrder; final SearchWorkOrder ?workOrder;
const AssetConditionView({this.workOrder, Key key}) : super(key: key); const AssetConditionView({this.workOrder, Key? key}) : super(key: key);
@override @override
State<AssetConditionView> createState() => _AssetConditionViewState(); State<AssetConditionView> createState() => _AssetConditionViewState();
@ -40,22 +37,22 @@ class AssetConditionView extends StatefulWidget {
class _AssetConditionViewState extends State<AssetConditionView> { class _AssetConditionViewState extends State<AssetConditionView> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
SearchWorkOrder _subWorkOrders; SearchWorkOrder? _subWorkOrders;
ServiceReport _serviceReport; ServiceReport ?_serviceReport;
PartsProvider _partsProvider; PartsProvider ?_partsProvider;
List<SparePart> _spareParts = []; List<SparePart> _spareParts = [];
bool _isLoading = false; bool _isLoading = false;
bool _showVendorFields = false; bool _showVendorFields = false;
SuppEngineerWorkOrders engineer; SuppEngineerWorkOrders ?engineer;
SupplierDetails initialSupplier; SupplierDetails ?initialSupplier;
final TextEditingController _workPreformedController = TextEditingController(); final TextEditingController _workPreformedController = TextEditingController();
final TextEditingController _partQtyController = TextEditingController(); final TextEditingController _partQtyController = TextEditingController();
@override @override
void initState() { void initState() {
_subWorkOrders = SearchWorkOrder( _subWorkOrders = SearchWorkOrder(
assignedEmployee: widget?.workOrder?.callRequest?.assignedEmployee, assignedEmployee: widget.workOrder?.callRequest?.assignedEmployee,
callRequest: CallRequest(id: widget?.workOrder?.callRequest?.id), callRequest: CallRequest(id: widget.workOrder?.callRequest?.id),
currentSituation: null, currentSituation: null,
supplier: null, supplier: null,
// parentWOId: widget.workOrder.id, // parentWOId: widget.workOrder.id,
@ -71,18 +68,18 @@ class _AssetConditionViewState extends State<AssetConditionView> {
// } // }
} }
ServiceStatusProvider assetTypesProvider; ServiceStatusProvider? assetTypesProvider;
CallRequest _callRequestForWorkOrder; CallRequest ?_callRequestForWorkOrder;
void getData() async { void getData() async {
ReasonProvider reasonProvider = Provider.of<ReasonProvider>(context,listen: false); ReasonProvider reasonProvider = Provider.of<ReasonProvider>(context,listen: false);
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context,listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context,listen: false);
_spareParts = await Provider.of<PartsProvider>(context,listen: false).getPartsList(assetId: serviceRequestsProvider.currentSelectedRequest.deviceId); _spareParts = await Provider.of<PartsProvider>(context,listen: false).getPartsList(assetId: serviceRequestsProvider.currentSelectedRequest?.deviceId);
// _serviceReport = serviceRequestsProvider.currentSelectedRequest; // _serviceReport = serviceRequestsProvider.currentSelectedRequest;
// Provider.of<RequestedThroughProvider>(context).getDate(); // Provider.of<RequestedThroughProvider>(context).getDate();
// Provider.of<TypeOfRequestProvider>(context).getDate(); // Provider.of<TypeOfRequestProvider>(context).getDate();
reasonProvider.serviceRequestId = serviceRequestsProvider.currentSelectedRequest.id; reasonProvider.serviceRequestId = serviceRequestsProvider.currentSelectedRequest?.id;
reasonProvider.getDate(); reasonProvider.getDate();
// Provider.of<PriorityProvider>(context).getDate(); // Provider.of<PriorityProvider>(context).getDate();
// Provider.of<EquipmentStatusProvider>(context).getDate(); // Provider.of<EquipmentStatusProvider>(context).getDate();
@ -92,36 +89,36 @@ class _AssetConditionViewState extends State<AssetConditionView> {
final serviceRequestProvider = Provider.of<ServiceRequestsProvider>(context); final serviceRequestProvider = Provider.of<ServiceRequestsProvider>(context);
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset(); Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false); assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false);
_callRequestForWorkOrder = await serviceRequestProvider.getCallRequestForWorkOrder(callId: widget.workOrder?.callRequest?.id?.toString()); _callRequestForWorkOrder = await serviceRequestProvider.getCallRequestForWorkOrder(callId: widget.workOrder!.callRequest!.id!.toString());
if (_subWorkOrders?.parentWOId != null) { if (_subWorkOrders?.parentWOId != null) {
final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders?.parentWOId.toString()); final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders!.parentWOId.toString());
_subWorkOrders.copyDetails(subWoDetails); _subWorkOrders?.copyDetails(subWoDetails!);
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus; _serviceReport!.equipmentStatus = subWoDetails?.equipmentStatus;
_serviceReport.reason = subWoDetails.reason; _serviceReport?.reason = subWoDetails?.reason;
initialSupplier = subWoDetails.supplier; initialSupplier = subWoDetails?.supplier;
_serviceReport.faultDescription = subWoDetails.faultDescription; _serviceReport?.faultDescription = subWoDetails?.faultDescription;
_subWorkOrders.visitDate = subWoDetails.visitDate; _subWorkOrders?.visitDate = subWoDetails?.visitDate;
_subWorkOrders.sparePartsWorkOrders = subWoDetails.sparePartsWorkOrders; _subWorkOrders?.sparePartsWorkOrders = subWoDetails?.sparePartsWorkOrders;
} }
await assetTypesProvider.getTypes(); await assetTypesProvider?.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere( _subWorkOrders?.assetType = assetTypesProvider?.statuses?.firstWhere(
(element) => element.value == _callRequestForWorkOrder?.assetType, (element) => element.value == _callRequestForWorkOrder?.assetType,
orElse: () => null, orElse: () => Lookup(),
); );
if (checkVendorFieldsVisibility(_subWorkOrders.calllastSituation)) { if (checkVendorFieldsVisibility(_subWorkOrders!.calllastSituation!)) {
if (_subWorkOrders.suppEngineerWorkOrders?.isNotEmpty ?? false) { if (_subWorkOrders?.suppEngineerWorkOrders?.isNotEmpty ?? false) {
engineer = _subWorkOrders.suppEngineerWorkOrders?.last; engineer = _subWorkOrders?.suppEngineerWorkOrders?.last;
engineer?.id = engineer?.supplierContactId; engineer?.id = engineer?.supplierContactId;
} }
_subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id); _subWorkOrders?.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id);
} }
_spareParts = await _partsProvider.getPartsList(assetId: widget.workOrder?.callRequest?.asset?.id); _spareParts = await _partsProvider!.getPartsList(assetId: widget.workOrder?.callRequest?.asset?.id);
setState(() { setState(() {
_isLoading = false; _isLoading = false;
}); });
} }
Asset loanAvailabilityAsset; Asset ?loanAvailabilityAsset;
@override @override
void dispose() { void dispose() {
@ -143,7 +140,6 @@ class _AssetConditionViewState extends State<AssetConditionView> {
// // getAssetType(); // // getAssetType();
// } // }
bool disablePart = _subWorkOrders.calllastSituation?.value == 12;
return Consumer<ServiceRequestsProvider>( return Consumer<ServiceRequestsProvider>(
builder: (context, serviceRequestProvider,child) { builder: (context, serviceRequestProvider,child) {
@ -163,10 +159,10 @@ class _AssetConditionViewState extends State<AssetConditionView> {
SingleItemDropDownMenu<Lookup, ReasonProvider>( SingleItemDropDownMenu<Lookup, ReasonProvider>(
context: context, context: context,
title: context.translation.reason, title: context.translation.reason,
initialValue: _subWorkOrders.reason, initialValue: _subWorkOrders?.reason,
onSelect: (value) { onSelect: (value) {
if (value != null) { if (value != null) {
_subWorkOrders.reason = value; _subWorkOrders?.reason = value;
} }
}, },
), ),
@ -174,10 +170,10 @@ class _AssetConditionViewState extends State<AssetConditionView> {
SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>( SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
context: context, context: context,
title: context.translation.equipmentStatus, title: context.translation.equipmentStatus,
initialValue: _subWorkOrders.equipmentStatus, initialValue: _subWorkOrders?.equipmentStatus,
onSelect: (value) { onSelect: (value) {
if (value != null) { if (value != null) {
_subWorkOrders.equipmentStatus = value; _subWorkOrders?.equipmentStatus = value;
} }
}, },
), ),
@ -233,22 +229,22 @@ class _AssetConditionViewState extends State<AssetConditionView> {
} }
Future<bool> validate() async { Future<bool> validate() async {
if (_subWorkOrders.reason == null) { if (_subWorkOrders?.reason == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.reason}"); Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.reason}");
return false; return false;
} else if (_subWorkOrders.equipmentStatus == null) { } else if (_subWorkOrders?.equipmentStatus == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.equipmentStatus}"); Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.equipmentStatus}");
return false; return false;
} else if (_subWorkOrders.calllastSituation == null) { } else if (_subWorkOrders?.calllastSituation == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}"); Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
return false; return false;
} else if (_showVendorFields && _subWorkOrders.suppEngineerWorkOrders == null) { } else if (_showVendorFields && _subWorkOrders?.suppEngineerWorkOrders == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplierEngineer}"); Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplierEngineer}");
return false; return false;
} else if (_showVendorFields && (_subWorkOrders.supplier.suppliername == null || _subWorkOrders.supplier.suppliername.isEmpty)) { } else if (_showVendorFields && (_subWorkOrders?.supplier?.suppliername == null || _subWorkOrders!.supplier!.suppliername!.isEmpty)) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplier}"); Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplier}");
return false; return false;
} else if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) { } else if (_subWorkOrders?.calllastSituation?.value == 12 && (_subWorkOrders?.sparePartsWorkOrders == null || _subWorkOrders!.sparePartsWorkOrders!.isEmpty)) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}"); Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}");
return false; return false;
} else if (_subWorkOrders?.timer?.startAt == null) { } else if (_subWorkOrders?.timer?.startAt == null) {

@ -8,7 +8,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
class AttachmentView extends StatelessWidget { class AttachmentView extends StatelessWidget {
const AttachmentView({Key key}) : super(key: key); const AttachmentView({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -16,7 +16,7 @@ class AttachmentView extends StatelessWidget {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final List<File> _files = []; final List<File> _files = [];
return Consumer<ServiceRequestsProvider>(builder: (context, serviceRequestProvider, child) { return Consumer<ServiceRequestsProvider>(builder: (context, serviceRequestProvider, child) {
serviceRequestProvider.currentSelectedRequest.visitDate = ''; serviceRequestProvider.currentSelectedRequest?.visitDate = '';
return Form( return Form(
key: _formKey, key: _formKey,
child: SingleChildScrollView( child: SingleChildScrollView(

@ -13,7 +13,7 @@ import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
class TimeDurationView extends StatelessWidget { class TimeDurationView extends StatelessWidget {
const TimeDurationView({Key key}) : super(key: key); const TimeDurationView({Key ?key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -21,7 +21,7 @@ class TimeDurationView extends StatelessWidget {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return Consumer<ServiceRequestsProvider>( return Consumer<ServiceRequestsProvider>(
builder: (context, serviceRequestProvider,child) { builder: (context, serviceRequestProvider,child) {
serviceRequestProvider.currentSelectedRequest.visitDate = ''; serviceRequestProvider.currentSelectedRequest?.visitDate = '';
return Form( return Form(
key: _formKey, key: _formKey,
child: SingleChildScrollView( child: SingleChildScrollView(
@ -33,7 +33,7 @@ class TimeDurationView extends StatelessWidget {
withIcon: false, withIcon: false,
hint: context.translation.select, hint: context.translation.select,
height: 70.toScreenHeight, height: 70.toScreenHeight,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.visitDate ?? ""), date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""),
formatDateWithTime: true, formatDateWithTime: true,
onDatePicker: (selectedDate) { onDatePicker: (selectedDate) {
if (selectedDate != null) { if (selectedDate != null) {
@ -43,16 +43,14 @@ class TimeDurationView extends StatelessWidget {
).then((selectedTime) { ).then((selectedTime) {
// Handle the selected date and time here. // Handle the selected date and time here.
if (selectedTime != null) { if (selectedTime != null) {
DateTime selectedDateTime = DateTime( DateTime ? selectedDateTime = DateTime(
selectedDate.year, selectedDate.year,
selectedDate.month, selectedDate.month,
selectedDate.day, selectedDate.day,
selectedTime.hour, selectedTime.hour,
selectedTime.minute, selectedTime.minute,
); );
if (selectedDateTime != null) { serviceRequestProvider.currentSelectedRequest?.visitDate = selectedDateTime?.toIso8601String();
serviceRequestProvider.currentSelectedRequest.visitDate = selectedDateTime?.toIso8601String();
}
} }
}); });
} }

@ -16,7 +16,7 @@ import 'package:test_sa/service_request_latest/views/forms/work_order/components
class WorkOrderFormView extends StatefulWidget { class WorkOrderFormView extends StatefulWidget {
const WorkOrderFormView({Key key}) : super(key: key); const WorkOrderFormView({Key? key}) : super(key: key);
@override @override
_WorkOrderFormViewState createState() => _WorkOrderFormViewState(); _WorkOrderFormViewState createState() => _WorkOrderFormViewState();
@ -191,7 +191,7 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
// Your onPressed code // Your onPressed code
Widget customStepWidget({@required int index, @required int stepIndex}) { Widget customStepWidget({required int index, required int stepIndex}) {
return CircleAvatar( return CircleAvatar(
backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context), backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context),
child: activeStep > index child: activeStep > index
@ -213,7 +213,7 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
); );
} }
Widget customStepLabel({@required String label, @required int index}) { Widget customStepLabel({required String label, required int index}) {
return Column( return Column(
children: [ children: [
Text( Text(
@ -230,11 +230,11 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
Widget getStepWidget() { Widget getStepWidget() {
switch (activeStep) { switch (activeStep) {
case 0: case 0:
return const TimeDurationView(); return const TimeDurationView();
case 1: case 1:
return const AssetConditionView(); return AssetConditionView();
case 2: case 2:
return const AttachmentView(); return AttachmentView();
default: default:
return const SizedBox(); return const SizedBox();
} }

@ -26,7 +26,7 @@ import '../../../../../../new_views/common_widgets/default_app_bar.dart';
class CreateNewRequest extends StatefulWidget { class CreateNewRequest extends StatefulWidget {
static const String id = "/create-new-request"; static const String id = "/create-new-request";
const CreateNewRequest({Key key}) : super(key: key); const CreateNewRequest({Key ?key}) : super(key: key);
@override @override
_CreateNewRequestState createState() => _CreateNewRequestState(); _CreateNewRequestState createState() => _CreateNewRequestState();
@ -34,11 +34,11 @@ class CreateNewRequest extends StatefulWidget {
class _CreateNewRequestState extends State<CreateNewRequest> with TickerProviderStateMixin { class _CreateNewRequestState extends State<CreateNewRequest> with TickerProviderStateMixin {
AssetProvider _devicesProvider; AssetProvider? _devicesProvider;
bool _isLoading = false; bool _isLoading = false;
int _selectedEStatus = 1; int _selectedEStatus = 1;
bool _isHighPrority = false; bool _isHighPriority = false;
String text; String text='';
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -49,20 +49,20 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
if (context.mounted) { if (context.mounted) {
ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); ServiceRequestsProvider serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset(); Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
_devicesProvider = Provider.of<AssetProvider>(context, listen: false);
Provider.of<ReasonProvider>(context, listen: false).reset(); Provider.of<ReasonProvider>(context, listen: false).reset();
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest.id; Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = serviceRequestsProvider.currentSelectedRequest?.id;
} }
// _isLoading = true; // _isLoading = true;
} }
_getDevice(String result, {bool isQr = false}) async { _getDevice(String? result, {bool isQr = false}) async {
if (result == null) return; if (result == null) return;
_devicesProvider.reset(); _devicesProvider!.reset();
await _devicesProvider.getAssets( await _devicesProvider!.getAssets(
search: AssetSearch(assetNo: result, assetSerialNumber: ""), search: AssetSearch(assetNo: result, assetSerialNumber: ""),
isQr: isQr, isQr: isQr,
); );
} }
Asset loanAvailabilityAsset;
@override @override
@ -91,8 +91,8 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
children: [ children: [
AppFilledButton( AppFilledButton(
label: context.translation.scanOrPickAsset, label: context.translation.scanOrPickAsset,
showIcon: true, // showIcon: true,
icon: "scan_asset".toSvgAsset(height: 20, fit: BoxFit.contain, color: Theme.of(context).scaffoldBackgroundColor), // icon: "scan_asset".toSvgAsset(height: 20, fit: BoxFit.contain, color: Theme.of(context).scaffoldBackgroundColor),
buttonColor: AppColor.neutral50, buttonColor: AppColor.neutral50,
onPressed: () async { onPressed: () async {
String result = await Navigator.of(context).push( String result = await Navigator.of(context).push(
@ -107,12 +107,12 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
children: [ children: [
context.translation.highPriority.bodyText(context).custom(color: AppColor.black20), context.translation.highPriority.bodyText(context).custom(color: AppColor.black20),
CupertinoSwitch( CupertinoSwitch(
value: _isHighPrority, value: _isHighPriority,
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
// listingVm.listing[listingVm.listingParameter]['bayut'] = value; // listingVm.listing[listingVm.listingParameter]['bayut'] = value;
_isHighPrority = value; _isHighPriority = value;
}); });
}, },
thumbColor: AppColor.red70, thumbColor: AppColor.red70,
@ -142,8 +142,8 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField, validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField,
textInputType: TextInputType.multiline, textInputType: TextInputType.multiline,
suffixIcon: "comment_send".toSvgAsset().paddingOnly(end: 16).onPress(() { suffixIcon: "comment_send".toSvgAsset().paddingOnly(end: 16).onPress(() {
if (_formKey.currentState.validate()) { if (_formKey.currentState!.validate()) {
_formKey.currentState.save(); _formKey.currentState!.save();
// final comment = Comment(id: 0, callRequestId: num.tryParse(widget.requestId ?? ""), comment: text); // final comment = Comment(id: 0, callRequestId: num.tryParse(widget.requestId ?? ""), comment: text);
// commentsProvider.addComment(context, comment: comment); // commentsProvider.addComment(context, comment: comment);
} }
@ -184,7 +184,7 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
); );
} }
Widget radioButtonWidget({@required String label, @required dynamic value}) { Widget radioButtonWidget({required String label, required dynamic value}) {
return Row( return Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -196,9 +196,9 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
activeColor: AppColor.primary10, activeColor: AppColor.primary10,
value: value, value: value,
groupValue: _selectedEStatus, groupValue: _selectedEStatus,
onChanged: (int value) { onChanged: (int? value) {
setState(() { setState(() {
_selectedEStatus = value; _selectedEStatus = value!;
}); });
}, },
), ),

@ -16,6 +16,7 @@ class ADatePicker extends StatelessWidget {
final Function(DateTime)? onDatePicker; // Nullable final Function(DateTime)? onDatePicker; // Nullable
final bool enable; final bool enable;
final bool withBorder; final bool withBorder;
final bool ?withIcon;
final Color? backgroundColor; // Nullable final Color? backgroundColor; // Nullable
final bool formatDateWithTime; final bool formatDateWithTime;
final double? height; // Nullable final double? height; // Nullable
@ -29,6 +30,7 @@ class ADatePicker extends StatelessWidget {
this.hideShadow = false, this.hideShadow = false,
this.hint, this.hint,
this.date, this.date,
this.withIcon = false,
this.formatDateWithTime = false, this.formatDateWithTime = false,
this.onDatePicker, this.onDatePicker,
this.from, this.from,
@ -62,13 +64,14 @@ class ADatePicker extends StatelessWidget {
(date == null (date == null
? hint ?? context.translation.pickADate ? hint ?? context.translation.pickADate
: (formatDateWithTime : (formatDateWithTime
? date?.toIso8601String()?.toFirstActionFormat // Use null-aware operator ? date?.toIso8601String().toFirstActionFormat // Use null-aware operator
: (date?.toIso8601String()?.split("T")?.first ?? context.translation.pickADate)))! : (date?.toIso8601String().split("T").first ?? context.translation.pickADate)))!
.bodyText(context) .bodyText(context)
.custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), .custom(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
], ],
).expanded, ).expanded,
enable ? 16.width : const Spacer(), enable ? 16.width : const Spacer(),
"calender".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null), "calender".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null),
], ],
), ),

@ -14,10 +14,12 @@ class ESignature extends StatefulWidget {
final String? oldSignature; final String? oldSignature;
final Uint8List? newSignature; final Uint8List? newSignature;
final Function(Uint8List?)? onSaved; final Function(Uint8List?)? onSaved;
final Color? backgroundColor;
final Function(Uint8List)? onChange; final Function(Uint8List)? onChange;
final bool showShadow;
final String title; final String title;
const ESignature({Key? key, required this.title, required this.oldSignature, this.onSaved, this.onChange, required this.newSignature}) : super(key: key); const ESignature({Key? key, required this.title, required this.oldSignature, this.backgroundColor, this.onSaved, this.onChange, this.showShadow=true, required this.newSignature}) : super(key: key);
@override @override
State<ESignature> createState() => _ESignatureState(); State<ESignature> createState() => _ESignatureState();
@ -53,7 +55,6 @@ class _ESignatureState extends State<ESignature> {
penColor: context.isDark ? Colors.white : Colors.black, penColor: context.isDark ? Colors.white : Colors.black,
exportBackgroundColor: AppColor.background(context), exportBackgroundColor: AppColor.background(context),
); );
print(widget.oldSignature);
return FormField<String>(onSaved: (_) async { return FormField<String>(onSaved: (_) async {
if (widget.onSaved != null) widget.onSaved!(signature); if (widget.onSaved != null) widget.onSaved!(signature);
}, builder: (FormFieldState<String> state) { }, builder: (FormFieldState<String> state) {
@ -63,9 +64,9 @@ class _ESignatureState extends State<ESignature> {
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
decoration: BoxDecoration( decoration: BoxDecoration(
color: context.isDark ? AppColor.background(context) : Colors.white, color: widget.backgroundColor ?? (context.isDark ? AppColor.background(context) : Colors.white),
borderRadius: _editable ? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10)) : BorderRadius.circular(10), borderRadius: _editable ? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10)) : 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: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@ -76,15 +77,15 @@ class _ESignatureState extends State<ESignature> {
children: [ children: [
widget.title.tinyFont(context).paddingOnly(top: 8), widget.title.tinyFont(context).paddingOnly(top: 8),
(!_editable (!_editable
? "edit".toSvgAsset(width: 48).paddingOnly(top: 8) ? "edit".toSvgAsset(width: 48).paddingOnly(top: 8)
: Container( : Container(
width: 48.toScreenWidth, width: 48.toScreenWidth,
height: 48.toScreenWidth, height: 48.toScreenWidth,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(100), border: Border.all(color: AppColor.neutral30)), decoration: BoxDecoration(borderRadius: BorderRadius.circular(100), border: Border.all(color: AppColor.neutral30)),
padding: const EdgeInsets.all(11), padding: const EdgeInsets.all(11),
margin: const EdgeInsets.only(top: 8), margin: const EdgeInsets.only(top: 8),
child: "done".toSvgAsset(width: 26), child: "done".toSvgAsset(width: 26),
)) ))
.onPress(() async { .onPress(() async {
if (_editable) { if (_editable) {
signature = await _controller!.toPngBytes(); signature = await _controller!.toPngBytes();
@ -99,20 +100,20 @@ class _ESignatureState extends State<ESignature> {
), ),
((widget.oldSignature != null || signature != null) && !_editable) ((widget.oldSignature != null || signature != null) && !_editable)
? Container( ? Container(
height: 135.toScreenHeight, height: 135.toScreenHeight,
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: const EdgeInsets.only(bottom: 8), padding: const EdgeInsets.only(bottom: 8),
child: signature != null ? Image.memory(signature!) : ImageLoader(boxFit: BoxFit.contain, url: URLs.getFileUrl(widget.oldSignature)!), child: signature != null ? Image.memory(signature!) : ImageLoader(boxFit: BoxFit.contain, url: URLs.getFileUrl(widget.oldSignature)!),
) )
: AbsorbPointer( : AbsorbPointer(
absorbing: !_editable, absorbing: !_editable,
child: Signature( child: Signature(
controller: _controller!, controller: _controller!,
height: 135.toScreenHeight, height: 135.toScreenHeight,
width: MediaQuery.of(context).size.width - 64.toScreenWidth, width: MediaQuery.of(context).size.width - 64.toScreenWidth,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
), ),
), ),
], ],
), ),
), ),

Loading…
Cancel
Save