null seafty bug fixes

design_3.0_latest
muhammad.abbasi 1 year ago
parent a9ef3a827c
commit 1ce6f0f72c

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

@ -96,7 +96,7 @@ class _CustomStepperState extends State<CustomStepper> {
_scrollController = ScrollController();
_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));
}
if (widget.titlesAreLargerThanSteps) {
@ -189,7 +189,7 @@ class _CustomStepperState extends State<CustomStepper> {
stepRadius: widget.stepBorderRadius??10,
showStepBorder: widget.showStepBorder,
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),
),
if (axis == Axis.horizontal &&
widget.steps[index].lineText != null) ...[
if (axis == Axis.horizontal) ...[
const SizedBox(height: 5),
SizedBox(
width: lineStyle!.lineLength,
child: widget.steps[index].customLineWidget ??
Text(
widget.steps[index].lineText,
widget.steps[index].lineText??'',
maxLines: 3,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.labelSmall,

@ -106,7 +106,7 @@ class DashBoardProvider extends ChangeNotifier {
isDetailLoading = false;
notifyListeners();
} 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;
notifyListeners();
}

@ -20,7 +20,7 @@ class RequestDetailProvider extends ChangeNotifier {
}
DateTime timerStartTime = DateTime(0, 0, 0, 0, 0, 0); // Start from 00:00:00
Timer timer;
Timer? timer;
bool isTimerRunning = false;
void startTimer() {
@ -56,65 +56,65 @@ class RequestDetailProvider extends ChangeNotifier {
notifyListeners();
}
WorkOrderDetail _currentWorkOrder;
FixRemotely _fixRemotelyModel;
NeedVisit _needVisitModel;
MarkAsFixed _markAsFixed;
ActivitySparePartModel _activitySparePartModel;
WorkOrderDetail ?_currentWorkOrder;
FixRemotely ?_fixRemotelyModel=FixRemotely();
NeedVisit ?_needVisitModel=NeedVisit();
MarkAsFixed ?_markAsFixed=MarkAsFixed();
ActivitySparePartModel ?_activitySparePartModel= ActivitySparePartModel();
ActivitySparePartModel get activitySparePartModel => _activitySparePartModel;
ActivitySparePartModel ?get activitySparePartModel => _activitySparePartModel;
set activitySparePartModel(ActivitySparePartModel value) {
set activitySparePartModel(ActivitySparePartModel ? value) {
_activitySparePartModel = value;
notifyListeners();
}
MarkAsFixed get markAsFixed => _markAsFixed;
MarkAsFixed ? get markAsFixed => _markAsFixed;
set markAsFixed(MarkAsFixed value) {
set markAsFixed(MarkAsFixed ? value) {
_markAsFixed = value;
notifyListeners();
}
NurseActionModel _nurseActionModel;
NurseActionModel ?_nurseActionModel;
NurseActionModel get nurseActionModel => _nurseActionModel;
NurseActionModel? get nurseActionModel => _nurseActionModel;
set nurseActionModel(NurseActionModel value) {
set nurseActionModel(NurseActionModel? value) {
_nurseActionModel = value;
notifyListeners();
}
NeedVisit get needVisitModel => _needVisitModel;
NeedVisit ?get needVisitModel => _needVisitModel;
set needVisitModel(NeedVisit value) {
set needVisitModel(NeedVisit? value) {
_needVisitModel = value;
notifyListeners();
}
FixRemotely get fixRemotelyModel => _fixRemotelyModel;
FixRemotely ?get fixRemotelyModel => _fixRemotelyModel;
set fixRemotelyModel(FixRemotely value) {
set fixRemotelyModel(FixRemotely? value) {
_fixRemotelyModel = value;
notifyListeners();
}
WorkOrderDetail get currentWorkOrder => _currentWorkOrder;
WorkOrderDetail ?get currentWorkOrder => _currentWorkOrder;
set currentWorkOrder(WorkOrderDetail value) {
set currentWorkOrder(WorkOrderDetail? value) {
_currentWorkOrder = value;
notifyListeners();
}
int stateCode;
int ?stateCode;
// true if there is next page in product list and false if not
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;
notifyListeners();
} // list of user requests
@ -127,7 +127,7 @@ class RequestDetailProvider extends ChangeNotifier {
notifyListeners();
}
//getWorkOrderById......
Future<WorkOrderDetail> getWorkOrderById({@required String id}) async {
Future<WorkOrderDetail?> getWorkOrderById({required String id}) async {
try {
isLoading = true;
final response = await ApiManager.instance.get(URLs.getWorkOrderByIdUrl+"?workOrderId=$id");
@ -150,7 +150,7 @@ class RequestDetailProvider extends ChangeNotifier {
}
}
//engineerAcceptWorkOrder......
Future<CommonResponseModel> engineerAcceptWorkOrder({@required String id}) async {
Future<CommonResponseModel> engineerAcceptWorkOrder({required String id}) async {
try {
final body = {
"workOrderId": id,
@ -177,11 +177,11 @@ class RequestDetailProvider extends ChangeNotifier {
}
}
//engineerRejectWorkOrder......
Future<CommonResponseModel> engineerRejectWorkOrder({@required String id,String feedBack}) async {
Future<CommonResponseModel> engineerRejectWorkOrder({required String id,String? feedBack}) async {
try {
final body = {
"workOrderId": id,
"feedback": feedBack,
"feedback": feedBack??'',
};
isLoading = true;
final response = await ApiManager.instance.post(URLs.engineerRejectUrl,body: body);
@ -208,7 +208,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> engineerFixRemotely() async {
try {
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;
if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -232,7 +232,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> engineerNeedVisit() async {
try {
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;
if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -256,7 +256,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> engineerMarkAsFixed() async {
try {
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;
if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -277,7 +277,7 @@ class RequestDetailProvider extends ChangeNotifier {
}
}
//assignEngineerToWorkOrder......
Future<CommonResponseModel> assignEngineerWorkOrder({@required String workOrderId,@required String engineerId}) async {
Future<CommonResponseModel> assignEngineerWorkOrder({required String workOrderId,required String engineerId}) async {
try {
final body = {
"workOrderId": workOrderId,
@ -308,7 +308,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> nurseReopen() async {
try {
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;
if (response.statusCode >= 200 && response.statusCode < 300) {
CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body));
@ -332,7 +332,7 @@ class RequestDetailProvider extends ChangeNotifier {
Future<CommonResponseModel> nurseClose() async {
try {
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;
if (response.statusCode >= 200 && response.statusCode < 300) {
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;
try {
final response = await ApiManager.instance.put(
@ -375,7 +375,7 @@ class RequestDetailProvider extends ChangeNotifier {
return -1;
}
}
Future<int> deleteActivitySparePart({@required int id,@required int workOrderId}) async {
Future<int> deleteActivitySparePart({required int id,required int workOrderId}) async {
isLoading = true;
var body = {
'id':id,
@ -400,7 +400,7 @@ class RequestDetailProvider extends ChangeNotifier {
return -1;
}
}
Future<int> createActivitySparePart({@required ActivitySparePartModel activitySparePartModel}) async {
Future<int> createActivitySparePart({required ActivitySparePartModel activitySparePartModel}) async {
isLoading = true;
try {
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';
class ServiceRequestBottomSheet {
static Future fixRemotelyBottomSheet({@required BuildContext context}) {
static Future fixRemotelyBottomSheet({required BuildContext context}) {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return showModalBottomSheet(
context: context,
@ -60,7 +60,7 @@ class ServiceRequestBottomSheet {
hideShadow: true,
height: 80.toScreenHeight,
backgroundColor: AppColor.neutral100,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.startDate ?? ""),
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
if (selectedDate != null) {
@ -77,17 +77,16 @@ class ServiceRequestBottomSheet {
selectedTime.hour,
selectedTime.minute,
);
if (selectedDateTime != null) {
if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest.date))) {
//serviceRequestProvider.currentSelectedRequest?.date
if (selectedDateTime.isBefore(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.date!))) {
"Visit Date time must be greater then request date".showToast;
return;
}
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,
alignLabelWithHint: true,
onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
),
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>();
return showModalBottomSheet(
context: context,
@ -194,7 +193,7 @@ class ServiceRequestBottomSheet {
hideShadow: true,
backgroundColor: AppColor.neutral100,
height: 70.toScreenHeight,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.visitDate ?? ""),
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
if (selectedDate != null) {
@ -211,25 +210,23 @@ class ServiceRequestBottomSheet {
selectedTime.hour,
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;
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,
Row(
children: [
ADatePicker(
label: context.translation.startDate,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.startDate ?? ""),
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.startDate ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
if (selectedDate != null) {
@ -247,7 +244,7 @@ class ServiceRequestBottomSheet {
selectedTime.minute,
);
if (selectedDateTime != null) {
serviceRequestProvider.currentSelectedRequest.startDate = selectedDateTime?.toIso8601String();
serviceRequestProvider.currentSelectedRequest?.startDate = selectedDateTime?.toIso8601String();
}
}
});
@ -257,7 +254,7 @@ class ServiceRequestBottomSheet {
8.width,
ADatePicker(
label: context.translation.endDate,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.endDate ?? ""),
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.endDate ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
if (selectedDate != null) {
@ -275,9 +272,9 @@ class ServiceRequestBottomSheet {
selectedTime.minute,
);
if (selectedDateTime != null) {
serviceRequestProvider.currentSelectedRequest.endDate = selectedDateTime?.toIso8601String();
serviceRequestProvider.currentSelectedRequest.workingHours = (((DateTime.parse(serviceRequestProvider.currentSelectedRequest.endDate)
.difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest.startDate))
serviceRequestProvider.currentSelectedRequest?.endDate = selectedDateTime?.toIso8601String();
serviceRequestProvider.currentSelectedRequest?.workingHours = (((DateTime.parse(serviceRequestProvider.currentSelectedRequest!.endDate!)
.difference(DateTime.parse(serviceRequestProvider.currentSelectedRequest!.startDate!))
.inSeconds ??
0) /
60) /
@ -300,10 +297,10 @@ class ServiceRequestBottomSheet {
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
),
12.height,
@ -313,7 +310,7 @@ class ServiceRequestBottomSheet {
loading: serviceRequestProvider.isLoading ?? false,
onPressed: () async {
_formKey.currentState.save();
_formKey.currentState?.save();
// await snapshot.updateRequest(user: userProvider.user, request: serviceRequestProvider.serviceRequest);
// 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>();
return showModalBottomSheet(
context: context,
@ -352,11 +349,11 @@ class ServiceRequestBottomSheet {
backgroundColor: AppColor.neutral100,
height: 70.toScreenHeight,
title: context.translation.rejectionReason,
initialValue: serviceRequestProvider.currentSelectedRequest.firstAction, //_serviceRequest.firstAction,
initialValue: serviceRequestProvider.currentSelectedRequest?.firstAction, //_serviceRequest.firstAction,
onSelect: (value) {
serviceRequestProvider.currentSelectedRequest.firstAction = value;
if (serviceRequestProvider.currentSelectedRequest.firstAction.value != 2) {
serviceRequestProvider.currentSelectedRequest.visitDate = null;
serviceRequestProvider.currentSelectedRequest?.firstAction = value;
if (serviceRequestProvider.currentSelectedRequest?.firstAction?.value != 2) {
serviceRequestProvider.currentSelectedRequest?.visitDate = null;
}
},
),
@ -367,10 +364,10 @@ class ServiceRequestBottomSheet {
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
),
16.height,
@ -383,7 +380,7 @@ class ServiceRequestBottomSheet {
showBorder: true,
loading: snapshot.isLoading ?? false,
onPressed: () async {
_formKey.currentState.save();
_formKey.currentState?.save();
//Todo implement backend logic..
// serviceRequestProvider.serviceRequest.device = asset;
// 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 = [
{'heading': context.translation.sparePartRequest, 'subHeading': context.translation.sparePartRequestDetail, 'icon': AppAsset.sparePartIcon},
{'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(
color: AppColor.neutral80,
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) {
case 0:
Navigator.of(context).push(MaterialPageRoute(builder: (_) => const SparePartRequest()));
@ -493,12 +490,12 @@ class ServiceRequestBottomSheet {
itemBuilder: (context, index) {
final item = items[index];
return listItem(
icon: item['icon'],
heading: item['heading'],
subHeading: item['subHeading'],
icon: item['icon']!,
heading: item['heading']!,
subHeading: item['subHeading']!,
context: context,
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(
context: context,
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>();
return showModalBottomSheet(
context: context,
@ -599,10 +596,10 @@ class ServiceRequestBottomSheet {
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral100,
alignLabelWithHint: true,
onChange: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
onSaved: (text) {
serviceRequestProvider.currentSelectedRequest.comments = text;
serviceRequestProvider.currentSelectedRequest?.comments = text;
},
),
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>();
return showModalBottomSheet(
context: context,
@ -633,7 +630,7 @@ class ServiceRequestBottomSheet {
child: SingleChildScrollView(
child: StatefulBuilder(builder: (context, setState) {
bool acknowledge = false;
Uint8List newSignature;
Uint8List ?newSignature;
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
@ -647,11 +644,11 @@ class ServiceRequestBottomSheet {
Row(
children: [
Checkbox(
value: serviceRequestProvider.ackhnowledge,
value: acknowledge,
activeColor: AppColor.blueStatus(context),
onChanged: (value) {
setState(() {
acknowledge = !value;
acknowledge = !value!;
});
print('acknowledge value is $acknowledge');
@ -663,7 +660,7 @@ class ServiceRequestBottomSheet {
ESignature(
title: '',
oldSignature: '',
newSignature: newSignature,
newSignature: newSignature,
backgroundColor: AppColor.neutral100,
showShadow: false,
onSaved: (signature) {

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

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

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

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

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

@ -1,4 +1,3 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.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_types_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/int_extensions.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/wo_call_request.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/providers/loading_list_notifier.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 {
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
State<AssetConditionView> createState() => _AssetConditionViewState();
@ -40,22 +37,22 @@ class AssetConditionView extends StatefulWidget {
class _AssetConditionViewState extends State<AssetConditionView> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
SearchWorkOrder _subWorkOrders;
ServiceReport _serviceReport;
PartsProvider _partsProvider;
SearchWorkOrder? _subWorkOrders;
ServiceReport ?_serviceReport;
PartsProvider ?_partsProvider;
List<SparePart> _spareParts = [];
bool _isLoading = false;
bool _showVendorFields = false;
SuppEngineerWorkOrders engineer;
SupplierDetails initialSupplier;
SuppEngineerWorkOrders ?engineer;
SupplierDetails ?initialSupplier;
final TextEditingController _workPreformedController = TextEditingController();
final TextEditingController _partQtyController = TextEditingController();
@override
void initState() {
_subWorkOrders = SearchWorkOrder(
assignedEmployee: widget?.workOrder?.callRequest?.assignedEmployee,
callRequest: CallRequest(id: widget?.workOrder?.callRequest?.id),
assignedEmployee: widget.workOrder?.callRequest?.assignedEmployee,
callRequest: CallRequest(id: widget.workOrder?.callRequest?.id),
currentSituation: null,
supplier: null,
// parentWOId: widget.workOrder.id,
@ -71,18 +68,18 @@ class _AssetConditionViewState extends State<AssetConditionView> {
// }
}
ServiceStatusProvider assetTypesProvider;
CallRequest _callRequestForWorkOrder;
ServiceStatusProvider? assetTypesProvider;
CallRequest ?_callRequestForWorkOrder;
void getData() async {
ReasonProvider reasonProvider = Provider.of<ReasonProvider>(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;
// Provider.of<RequestedThroughProvider>(context).getDate();
// Provider.of<TypeOfRequestProvider>(context).getDate();
reasonProvider.serviceRequestId = serviceRequestsProvider.currentSelectedRequest.id;
reasonProvider.serviceRequestId = serviceRequestsProvider.currentSelectedRequest?.id;
reasonProvider.getDate();
// Provider.of<PriorityProvider>(context).getDate();
// Provider.of<EquipmentStatusProvider>(context).getDate();
@ -92,36 +89,36 @@ class _AssetConditionViewState extends State<AssetConditionView> {
final serviceRequestProvider = Provider.of<ServiceRequestsProvider>(context);
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
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) {
final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders?.parentWOId.toString());
_subWorkOrders.copyDetails(subWoDetails);
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus;
_serviceReport.reason = subWoDetails.reason;
initialSupplier = subWoDetails.supplier;
_serviceReport.faultDescription = subWoDetails.faultDescription;
_subWorkOrders.visitDate = subWoDetails.visitDate;
_subWorkOrders.sparePartsWorkOrders = subWoDetails.sparePartsWorkOrders;
final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders!.parentWOId.toString());
_subWorkOrders?.copyDetails(subWoDetails!);
_serviceReport!.equipmentStatus = subWoDetails?.equipmentStatus;
_serviceReport?.reason = subWoDetails?.reason;
initialSupplier = subWoDetails?.supplier;
_serviceReport?.faultDescription = subWoDetails?.faultDescription;
_subWorkOrders?.visitDate = subWoDetails?.visitDate;
_subWorkOrders?.sparePartsWorkOrders = subWoDetails?.sparePartsWorkOrders;
}
await assetTypesProvider.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere(
await assetTypesProvider?.getTypes();
_subWorkOrders?.assetType = assetTypesProvider?.statuses?.firstWhere(
(element) => element.value == _callRequestForWorkOrder?.assetType,
orElse: () => null,
orElse: () => Lookup(),
);
if (checkVendorFieldsVisibility(_subWorkOrders.calllastSituation)) {
if (_subWorkOrders.suppEngineerWorkOrders?.isNotEmpty ?? false) {
engineer = _subWorkOrders.suppEngineerWorkOrders?.last;
if (checkVendorFieldsVisibility(_subWorkOrders!.calllastSituation!)) {
if (_subWorkOrders?.suppEngineerWorkOrders?.isNotEmpty ?? false) {
engineer = _subWorkOrders?.suppEngineerWorkOrders?.last;
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(() {
_isLoading = false;
});
}
Asset loanAvailabilityAsset;
Asset ?loanAvailabilityAsset;
@override
void dispose() {
@ -143,7 +140,6 @@ class _AssetConditionViewState extends State<AssetConditionView> {
// // getAssetType();
// }
bool disablePart = _subWorkOrders.calllastSituation?.value == 12;
return Consumer<ServiceRequestsProvider>(
builder: (context, serviceRequestProvider,child) {
@ -163,10 +159,10 @@ class _AssetConditionViewState extends State<AssetConditionView> {
SingleItemDropDownMenu<Lookup, ReasonProvider>(
context: context,
title: context.translation.reason,
initialValue: _subWorkOrders.reason,
initialValue: _subWorkOrders?.reason,
onSelect: (value) {
if (value != null) {
_subWorkOrders.reason = value;
_subWorkOrders?.reason = value;
}
},
),
@ -174,10 +170,10 @@ class _AssetConditionViewState extends State<AssetConditionView> {
SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
context: context,
title: context.translation.equipmentStatus,
initialValue: _subWorkOrders.equipmentStatus,
initialValue: _subWorkOrders?.equipmentStatus,
onSelect: (value) {
if (value != null) {
_subWorkOrders.equipmentStatus = value;
_subWorkOrders?.equipmentStatus = value;
}
},
),
@ -233,22 +229,22 @@ class _AssetConditionViewState extends State<AssetConditionView> {
}
Future<bool> validate() async {
if (_subWorkOrders.reason == null) {
if (_subWorkOrders?.reason == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.reason}");
return false;
} else if (_subWorkOrders.equipmentStatus == null) {
} else if (_subWorkOrders?.equipmentStatus == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.equipmentStatus}");
return false;
} else if (_subWorkOrders.calllastSituation == null) {
} else if (_subWorkOrders?.calllastSituation == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
return false;
} else if (_showVendorFields && _subWorkOrders.suppEngineerWorkOrders == null) {
} else if (_showVendorFields && _subWorkOrders?.suppEngineerWorkOrders == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.supplierEngineer}");
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}");
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}");
return false;
} 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';
class AttachmentView extends StatelessWidget {
const AttachmentView({Key key}) : super(key: key);
const AttachmentView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -16,7 +16,7 @@ class AttachmentView extends StatelessWidget {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final List<File> _files = [];
return Consumer<ServiceRequestsProvider>(builder: (context, serviceRequestProvider, child) {
serviceRequestProvider.currentSelectedRequest.visitDate = '';
serviceRequestProvider.currentSelectedRequest?.visitDate = '';
return Form(
key: _formKey,
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';
class TimeDurationView extends StatelessWidget {
const TimeDurationView({Key key}) : super(key: key);
const TimeDurationView({Key ?key}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -21,7 +21,7 @@ class TimeDurationView extends StatelessWidget {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
return Consumer<ServiceRequestsProvider>(
builder: (context, serviceRequestProvider,child) {
serviceRequestProvider.currentSelectedRequest.visitDate = '';
serviceRequestProvider.currentSelectedRequest?.visitDate = '';
return Form(
key: _formKey,
child: SingleChildScrollView(
@ -33,7 +33,7 @@ class TimeDurationView extends StatelessWidget {
withIcon: false,
hint: context.translation.select,
height: 70.toScreenHeight,
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest.visitDate ?? ""),
date: DateTime.tryParse(serviceRequestProvider.currentSelectedRequest?.visitDate ?? ""),
formatDateWithTime: true,
onDatePicker: (selectedDate) {
if (selectedDate != null) {
@ -43,16 +43,14 @@ class TimeDurationView extends StatelessWidget {
).then((selectedTime) {
// Handle the selected date and time here.
if (selectedTime != null) {
DateTime selectedDateTime = DateTime(
DateTime ? selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
selectedTime.hour,
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 {
const WorkOrderFormView({Key key}) : super(key: key);
const WorkOrderFormView({Key? key}) : super(key: key);
@override
_WorkOrderFormViewState createState() => _WorkOrderFormViewState();
@ -191,7 +191,7 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
// Your onPressed code
Widget customStepWidget({@required int index, @required int stepIndex}) {
Widget customStepWidget({required int index, required int stepIndex}) {
return CircleAvatar(
backgroundColor: activeStep >= index ? AppColor.primary10 : AppColor.background(context),
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(
children: [
Text(
@ -230,11 +230,11 @@ class _WorkOrderFormViewState extends State<WorkOrderFormView> {
Widget getStepWidget() {
switch (activeStep) {
case 0:
return const TimeDurationView();
return const TimeDurationView();
case 1:
return const AssetConditionView();
return AssetConditionView();
case 2:
return const AttachmentView();
return AttachmentView();
default:
return const SizedBox();
}

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

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

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

Loading…
Cancel
Save