Merge branch 'refs/heads/design_3.0_eng_role_module' into design_3.0_demo_module

design_3.0_demo_module
Sikander Saleem 19 hours ago
commit 619c643367

@ -177,6 +177,9 @@ class URLs {
static get updateTaskByEngineerUrl => '$_baseUrl/TaskJobs/UpdateByEngineer';
static get taskJobsAssignEngineerToHimself => "$_baseUrl/TaskJobs/AssignEngineerToHimself"; // get
static get taskJobsEngineerReject => "$_baseUrl/TaskJobs/EngineerReject"; // get
// Task LookUps
static get taskJobTypeOfAlert => "$_baseUrl/Lookups/GetLookup?lookupEnum=1260";
@ -301,6 +304,8 @@ class URLs {
static get getGasRefill => "$_baseUrl/GazRefill/GetGazRefills"; // get
// static get getGasRefillById => "$_baseUrl/GazRefill/GetGazRefillById"; // get older endpoint..
static get getGasRefillById => "$_baseUrl/GasRefill/GetGasRefillById"; // get
static get gasRefillAssignEngineerToHimself => "$_baseUrl/GasRefill/AssignEngineerToHimself"; // get
static get gasRefillEngineerReject => "$_baseUrl/GasRefill/EngineerReject"; // get
static get getGazRefillComments => "$_baseUrl/GazRefill/GetHistoryComments"; // get
static get addGazRefillComment => "$_baseUrl/GazRefill/AddHistoryComment"; // add
static get updateGasRefillByEngineer => "$_baseUrl/GasRefill/UpdateGasRefillByEngineer"; // update
@ -316,6 +321,8 @@ class URLs {
static get getAssetTransferById => "$_baseUrl/AssetTransfer/GetAssetTransferNewById"; // get
static get createAssetTransferRequest => "$_baseUrl/AssetTransfer/AddAssetTransferMobileNew"; // post
static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateEngineerAssetTransferNew"; // get
static get assetTransferAssignEngineerToHimself => "$_baseUrl/AssetTransfer/AssignEngineerToHimself"; // get
static get assetTransferEngineerReject => "$_baseUrl/AssetTransfer/EngineerReject"; // get
// employee
static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get

@ -222,4 +222,51 @@ class DeviceTransferProvider extends ChangeNotifier {
return -1;
}
}
Future<DeviceTransfer?> assignEngineerToHimselfInternal(num id, String empId) async {
try {
Map<String, dynamic> body = {"assetTransferId": id, "senderAssignEmployeeId": empId, "receiverAssignEmployeeId": empId};
Response response = await ApiManager.instance.post(URLs.assetTransferAssignEngineerToHimself, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
return DeviceTransfer.fromJson(json.decode(response.body)["data"]);
} else {
return null;
}
} catch (error) {
return null;
}
}
Future<DeviceTransfer?> assignEngineerToHimselfExternal(num id, bool isSender, String empId) async {
try {
Map<String, dynamic> body = {"assetTransferId": id};
if (isSender) {
body["senderAssignEmployeeId"] = empId;
} else {
body["receiverAssignEmployeeId"] = empId;
}
Response response = await ApiManager.instance.post(URLs.assetTransferAssignEngineerToHimself, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
return DeviceTransfer.fromJson(json.decode(response.body)["data"]);
} else {
return null;
}
} catch (error) {
return null;
}
}
Future<DeviceTransfer?> engineerReject(Map<String, dynamic> body) async {
try {
Response response = await ApiManager.instance.post(URLs.assetTransferEngineerReject, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
// gasRefillModel = DeviceTransfer.fromJson(json.decode(response.body)["data"]);
return DeviceTransfer.fromJson(json.decode(response.body)["data"]);
} else {
return null;
}
} catch (error) {
return null;
}
}
}

@ -48,7 +48,10 @@ class GasRefillProvider extends ChangeNotifier {
GasRefillModel? gasRefillModel;
Future<GasRefillModel?> getGasRefillObjectById(num id) async {
Future<GasRefillModel?> getGasRefillObjectById(num id, {bool refresh = false}) async {
if (refresh) {
return gasRefillModel;
}
try {
gasRefillModel = null;
Response response = await ApiManager.instance.get(URLs.getGasRefillById + "?gasRefillId=$id");
@ -64,6 +67,34 @@ class GasRefillProvider extends ChangeNotifier {
}
}
Future<GasRefillModel?> assignEngineerToHimself(num id) async {
try {
Response response = await ApiManager.instance.post(URLs.gasRefillAssignEngineerToHimself, body: {"gasRefillId": id});
if (response.statusCode >= 200 && response.statusCode < 300) {
gasRefillModel = GasRefillModel.fromJson(json.decode(response.body)["data"]);
return gasRefillModel;
} else {
return null;
}
} catch (error) {
return null;
}
}
Future<GasRefillModel?> engineerReject(Map<String, dynamic> body) async {
try {
Response response = await ApiManager.instance.post(URLs.gasRefillEngineerReject, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
gasRefillModel = GasRefillModel.fromJson(json.decode(response.body)["data"]);
return gasRefillModel;
} else {
return null;
}
} catch (error) {
return null;
}
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403

@ -303,6 +303,7 @@ class DashBoardProvider extends ChangeNotifier {
if (status != null && status == 0) {
body["date"] = date ?? upcomingFilterSelectedDate.toIso8601String();
} else if (status == 1 && tabId == 1) {
} else {
body["statusValue"] = status;
}

@ -8,8 +8,11 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/modules/cx_module/chat/chat_widget.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/bottom_sheets/rejection_reason_bottom_sheet.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
@ -191,7 +194,15 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
_internalRequestDetailsCard() {
bool isCurrentEngineerEligibleForEdit = _model?.senderAssignedEmployeeId == _userProvider!.user?.userID;
bool isCurrentRequestEditAble = (!(_model?.senderMachineStatusValue == 3));
bool isCurrentRequestEditAble = (!(_model?.senderMachineStatusValue == 5));
bool isCurrentRequestInProgress = (_model?.senderMachineStatusValue == 1);
// bool isCurrentRequestClosed = isSender ? ((_model?.senderMachineStatusValue == 3)) : ((_model?.receiverMachineStatusValue == 3));
bool isCurrentRequestOpen = _model?.senderMachineStatusValue == 4;
bool engineerCanAssignToHimself = (_userProvider!.user?.type == UsersTypes.engineer) && isCurrentRequestOpen && context.settingProvider.isUserFlowMedical;
bool engineerCanCancel = (_userProvider!.user?.type == UsersTypes.engineer) && isCurrentRequestInProgress && isCurrentEngineerEligibleForEdit && context.settingProvider.isUserFlowMedical;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -257,6 +268,42 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
_buildTextWidget(_model?.senderComment ?? ''),
],
if (engineerCanAssignToHimself) ...[
16.height,
AppFilledButton(
onPressed: () async {
Utils.showLoading(context);
await Provider.of<DeviceTransferProvider>(context, listen: false).assignEngineerToHimselfInternal(_model!.id!.toInt(), context.userProvider.user!.userID!);
Utils.hideLoading(context);
setState(() {});
},
label: 'Assign To Me',
),
] else if (engineerCanCancel) ...[
16.height,
AppFilledButton(
label: context.translation.cancel,
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
context.showBottomSheet(
RejectionReasonBottomSheet(
onRejectPressed: (int reasonId, String comment) async {
await Future.delayed(const Duration(milliseconds: 500));
var data = await Provider.of<DeviceTransferProvider>(context, listen: false)
.engineerReject({"assetTransferId": _model!.id!.toInt(), "rejectReasonId": reasonId, "rejectComment": comment});
return data != null;
},
onRefreshed: () {
setState(() {});
},
),
title: "Rejection Reason".addTranslation);
},
)
]
],
).toShadowContainer(context);
@ -267,6 +314,13 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
bool isCurrentEngineerEligibleForEdit = isSender ? _model?.senderAssignedEmployeeId == _userProvider!.user?.userID : _model?.receiverAssignedEmployeeId == _userProvider!.user?.userID;
bool isCurrentRequestClosed = isSender ? ((_model?.senderMachineStatusValue == 3)) : ((_model?.receiverMachineStatusValue == 3));
bool isCurrentRequestOpen = isSender ? ((_model?.senderMachineStatusValue == 4)) : ((_model?.receiverMachineStatusValue == 4));
bool isCurrentRequestInProgress = isSender ? ((_model?.senderMachineStatusValue == 1)) : ((_model?.receiverMachineStatusValue == 1));
bool engineerCanAssignToHimself = (_userProvider!.user?.type == UsersTypes.engineer) && isCurrentRequestOpen && context.settingProvider.isUserFlowMedical;
bool engineerCanCancel = (_userProvider!.user?.type == UsersTypes.engineer) && isCurrentRequestInProgress && context.settingProvider.isUserFlowMedical;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -287,7 +341,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
isShow: context.settingProvider.isUserFlowMedical && (isSender ? _deviceTransfer.senderMachineStatusValue! : _deviceTransfer.receiverMachineStatusValue!) != 0,
isReadOnly: (isSender ? _deviceTransfer.senderMachineStatusValue! : _deviceTransfer.receiverMachineStatusValue) != 1,
requestId: widget.model.id!.toInt(),
assigneeEmployeeNumber: isSender ? _deviceTransfer.senderAssignedEmployeeNumber! : _deviceTransfer.receiverAssignedEmployeeNumber!,
assigneeEmployeeNumber: isSender ? _deviceTransfer.senderAssignedEmployeeNumber : _deviceTransfer.receiverAssignedEmployeeNumber,
myLoginUserID: context.userProvider.user!.employeeId ?? context.userProvider.user!.username!,
contactEmployeeINumber: _model!.assetTransferContactPersons!.first.employeeNumber ?? _deviceTransfer.assetTransferContactPersons!.first.employeeNumber,
),
@ -319,6 +373,41 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
_buildTextWidget(comment),
],
if (engineerCanAssignToHimself) ...[
16.height,
AppFilledButton(
onPressed: () async {
Utils.showLoading(context);
await Provider.of<DeviceTransferProvider>(context, listen: false).assignEngineerToHimselfExternal(_model!.id!.toInt(), isSender, context.userProvider.user!.userID!);
Utils.hideLoading(context);
setState(() {});
},
label: 'Assign To Me',
),
] else if (engineerCanCancel) ...[
16.height,
AppFilledButton(
label: context.translation.cancel,
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
context.showBottomSheet(
RejectionReasonBottomSheet(
onRejectPressed: (int reasonId, String comment) async {
await Future.delayed(const Duration(milliseconds: 500));
var data = await Provider.of<DeviceTransferProvider>(context, listen: false)
.engineerReject({"assetTransferId": _model!.id!.toInt(), "rejectReasonId": reasonId, "rejectComment": comment});
return data != null;
},
onRefreshed: () {
setState(() {});
},
),
title: "Rejection Reason".addTranslation);
},
)
]
],
).toShadowContainer(context);

@ -10,9 +10,11 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/modules/cx_module/chat/chat_widget.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/bottom_sheets/rejection_reason_bottom_sheet.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -43,6 +45,7 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
List<File> _attachments = [];
bool isDataUpdated = false;
@override
void initState() {
@ -80,14 +83,14 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
),
key: _scaffoldKey,
body: FutureBuilder(
future: gasRefillProvider.getGasRefillObjectById(widget.model.id!),
future: gasRefillProvider.getGasRefillObjectById(widget.model.id!, refresh: isDataUpdated),
builder: (context, snap) {
if (snap.connectionState == ConnectionState.waiting) {
return const ALoading();
} else if (snap.hasData) {
_model = snap.data as GasRefillModel;
_attachments = _model.gasRefillAttachments?.map((e) => File(e.attachmentName ?? '')).toList() ?? [];
isDataUpdated = false;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -95,15 +98,64 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
padding: const EdgeInsets.all(16),
child: informationCard(_model),
).expanded,
if (_userProvider.user!.type == UsersTypes.engineer && (_model.status!.value! != 2)) ...[
if (context.settingProvider.isUserFlowMedical && _userProvider.user!.type == UsersTypes.engineer && (_model.status!.value! == 0))
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(
onPressed: () async {
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateGasRefillRequest(gasRefillModel: _model)));
// getVisitData();
Utils.showLoading(context);
await gasRefillProvider.assignEngineerToHimself(_model.id!.toInt());
isDataUpdated = true;
Utils.hideLoading(context);
setState(() {});
},
label: context.translation.updateRequest,
label: 'Assign To Me',
),
)
else if (_userProvider.user!.type == UsersTypes.engineer && (_model.status!.value! == 1)) ...[
FooterActionButton.footerContainer(
context: context,
child: Row(
children: [
AppFilledButton(
label: context.translation.cancel,
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
context.showBottomSheet(
RejectionReasonBottomSheet(
onRejectPressed: (int reasonId, String comment) async {
await Future.delayed(const Duration(milliseconds: 500));
var data = await gasRefillProvider.engineerReject({"gasRefillId": _model.id!.toInt(), "rejectReasonId": reasonId, "rejectComment": comment});
isDataUpdated = data != null;
return isDataUpdated;
},
onRefreshed: () {
setState(() {});
},
),
title: "Rejection Reason".addTranslation);
},
).expanded,
16.width,
AppFilledButton(
onPressed: () async {
bool? isRefresh = await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateGasRefillRequest(gasRefillModel: _model)));;
if (isRefresh != null && isRefresh) {
Utils.showLoading(context);
await gasRefillProvider.getGasRefillObjectById(widget.model.id!);
isDataUpdated = true;
Utils.hideLoading(context);
setState(() {});
// isDataUpdated = true;
// setState(() {});
}
// getVisitData();
},
label: context.translation.updateRequest,
).expanded,
],
),
)
]

@ -193,8 +193,12 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
// when click complete then this request remove from the list and status changes to closed..
_gasRefillProvider?.reset();
allRequestsProvider.getAllRequests(context, typeTransaction: 2);
// Navigator.pop(context);
Navigator.pop(context,true);
}else{
Navigator.pop(context,false);
}
Navigator.pop(context);
}
});
}

@ -7,6 +7,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/new_models/task_request/task_request_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -15,6 +16,7 @@ import 'package:test_sa/modules/cx_module/chat/chat_widget.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/working_time_tile.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart';
import 'package:test_sa/views/widgets/bottom_sheets/rejection_reason_bottom_sheet.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
@ -111,9 +113,9 @@ class _TaskRequestDetailsViewState extends State<TaskRequestDetailsView> {
),
8.width,
StatusLabel(
label: widget.requestDetails?.status!,
textColor: AppColor.getRequestStatusTextColorByName(context, widget.requestDetails?.status!),
backgroundColor: AppColor.getRequestStatusColorByName(context, widget.requestDetails?.status!),
label: taskModel?.taskJobStatus?.name ?? widget.requestDetails?.status!,
textColor: AppColor.getRequestStatusTextColorByName(context, taskModel?.taskJobStatus?.name ?? widget.requestDetails?.status!),
backgroundColor: AppColor.getRequestStatusColorByName(context, taskModel?.taskJobStatus?.name ?? widget.requestDetails?.status!),
),
1.width.expanded,
Text(
@ -175,21 +177,54 @@ class _TaskRequestDetailsViewState extends State<TaskRequestDetailsView> {
],
).toShadowContainer(context).paddingAll(16),
).expanded,
if (userProvider!.user!.type == UsersTypes.engineer && (taskModel?.taskJobStatus?.value != 4 && taskModel?.taskJobStatus?.value != 3))
if (context.settingProvider.isUserFlowMedical && userProvider!.user!.type == UsersTypes.engineer && (taskModel?.taskJobStatus?.value == 1))
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(
onPressed: () async {
if (taskProvider.taskRequestModel?.taskType?.isInstallation == true) {
taskProvider.getSiteData(siteId: taskProvider.taskRequestModel?.asset?.siteId);
}
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateTaskRequest(
taskId: widget.taskId,
createdDate: widget.requestDetails?.date,
)));
Utils.showLoading(context);
await taskProvider.assignEngineerToHimself(widget.taskId);
Utils.hideLoading(context);
},
label: context.translation.updateRequest,
label: 'Assign To Me',
),
)
else if (userProvider!.user!.type == UsersTypes.engineer && taskModel?.taskJobStatus?.value == 5)
...[]
else if (userProvider!.user!.type == UsersTypes.engineer && (taskModel?.taskJobStatus?.value != 4 && taskModel?.taskJobStatus?.value != 3))
FooterActionButton.footerContainer(
context: context,
child: Row(
children: [
AppFilledButton(
label: context.translation.cancel,
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
context.showBottomSheet(RejectionReasonBottomSheet(
onRejectPressed: (int reasonId, String comment) async {
await Future.delayed(const Duration(milliseconds: 500));
return await taskProvider.engineerReject({"taskJobId": widget.taskId, "rejectReasonId": reasonId, "rejectComment": comment});
},
), title: "Rejection Reason".addTranslation);
},
).expanded,
16.width,
AppFilledButton(
onPressed: () async {
if (taskProvider.taskRequestModel?.taskType?.isInstallation == true) {
taskProvider.getSiteData(siteId: taskProvider.taskRequestModel?.asset?.siteId);
}
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateTaskRequest(
taskId: widget.taskId,
createdDate: widget.requestDetails?.date,
)));
},
label: context.translation.updateRequest,
).expanded,
],
),
)
]);

@ -134,4 +134,34 @@ class TaskRequestProvider extends ChangeNotifier {
}
notifyListeners();
}
Future<TaskData?> assignEngineerToHimself(num id) async {
try {
Response response = await ApiManager.instance.post(URLs.taskJobsAssignEngineerToHimself, body: {"taskJobId": id});
if (response.statusCode >= 200 && response.statusCode < 300) {
taskRequestModel = TaskData.fromJson(json.decode(response.body)["data"]);
notifyListeners();
return taskRequestModel;
} else {
return null;
}
} catch (error) {
return null;
}
}
Future<bool> engineerReject(Map<String, dynamic> body) async {
try {
Response response = await ApiManager.instance.post(URLs.taskJobsEngineerReject, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
taskRequestModel = TaskData.fromJson(json.decode(response.body)["data"]);
notifyListeners();
return true;
} else {
return false;
}
} catch (error) {
return false;
}
}
}

@ -0,0 +1,101 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/lookup.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/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart';
class RejectionReasonBottomSheet extends StatefulWidget {
final Future<bool> Function(int reasonId, String comment) onRejectPressed;
final VoidCallback? onRefreshed;
const RejectionReasonBottomSheet({Key? key, this.onRefreshed, required this.onRejectPressed}) : super(key: key);
@override
State<RejectionReasonBottomSheet> createState() => _RejectionReasonBottomSheetState();
}
class _RejectionReasonBottomSheetState extends State<RejectionReasonBottomSheet> {
late TextEditingController _commentController;
late GlobalKey<FormState> _formKey;
Lookup? selectedReason;
@override
void initState() {
super.initState();
_commentController = TextEditingController();
_formKey = GlobalKey<FormState>();
}
@override
void dispose() {
_commentController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
SingleItemDropDownMenu<Lookup, RejectReasonProvider>(
context: context,
title: context.translation.reason,
backgroundColor: AppColor.fieldBgColor(context),
showShadow: false,
showAsBottomSheet: true,
validator: (value) {
if (value == null) return "Mandatory";
return null;
},
onSelect: (value) {
selectedReason = value;
},
),
12.height,
AppTextFormField(
backgroundColor: AppColor.fieldBgColor(context),
labelText: context.translation.comments,
controller: _commentController,
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
showSpeechToText: true,
showShadow: false,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)),
labelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff767676)),
floatingLabelStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: context.isTablet() ? 16 : 12, color: context.isDark ? Colors.white : const Color(0xff3B3D4A)),
validator: (value) {
if ((value ?? "").isEmpty) return "Mandatory";
return null;
},
),
16.height,
AppFilledButton(
label: context.translation.reject,
buttonColor: AppColor.red30,
onPressed: () async {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
Utils.showLoading(context);
bool isSuccess = await widget.onRejectPressed(selectedReason!.id!, _commentController.text);
Utils.hideLoading(context);
if (isSuccess) {
Navigator.of(context).pop();
widget.onRefreshed?.call();
}
}
},
),
16.height,
],
),
);
}
}

@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
class ALoading extends StatelessWidget {
const ALoading({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Center(
child: CircularProgressIndicator(),
);
return const CircularProgressIndicator(color: AppColor.primary10).center;
}
}

Loading…
Cancel
Save