cancel a selection from bottom sheet dropdown added.

design_3.0_task_module_new
Sikander Saleem 4 months ago
parent 62dd395a73
commit 4d13105b91

@ -63,11 +63,11 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.supplier,
showAsBottomSheet: true,
showShadow: false,
showCancel: true,
onSelect: (supplier) {
if (supplier != null) {
if (supplier != requestDetailProvider.activityMaintenanceHelperModel?.supplier) {
requestDetailProvider.activityMaintenanceHelperModel?.supplier = supplier;
// _subWorkOrders.supplier = supplier;
// log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString());
requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = null;
setState(() {});
}
},
@ -79,6 +79,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
context: context,
backgroundColor: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100,
title: context.translation.supplierEngineer,
showShadow: false,
enabled: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons?.isNotEmpty ?? false,
staticData: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons,
showAsBottomSheet: true,
@ -86,7 +87,6 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
? null
: SuppPersons.fromJson(requestDetailProvider.activityMaintenanceHelperModel?.supEngineer?.toJson()),
onSelect: (suppPerson) {
print(suppPerson?.toJson());
if (suppPerson != null) {
requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = SuppEngineerWorkOrders.fromJson(suppPerson.toJson());
requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel);
@ -109,7 +109,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
decoration: BoxDecoration(
color: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100,
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
//boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Icon(Icons.add, color: context.isDark ? null : AppColor.neutral60),
).onPress(requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null

@ -149,12 +149,12 @@ class _ExternalDetailItemState extends State<ExternalDetailItem> {
backgroundColor: AppColor.neutral100,
showAsBottomSheet: true,
showShadow: false,
showCancel: true,
onSelect: (supplier) {
if (supplier != null) {
setState(() {
widget.model.supplier = supplier;
});
}
setState(() {
widget.model.supplier = supplier;
widget.model.suppPerson = null;
});
},
),
8.height,

@ -23,6 +23,7 @@ class SingleItemDropDownMenu<T extends Base, X extends LoadingListNotifier> exte
final String title;
final double? height;
final bool showShadow;
final bool showCancel;
final Color? backgroundColor; // Now nullable
final bool? loading; // Now nullable
@ -40,6 +41,7 @@ class SingleItemDropDownMenu<T extends Base, X extends LoadingListNotifier> exte
this.showAsFullScreenDialog = false,
this.staticData, // Provide a default empty list
this.showShadow = true,
this.showCancel = false,
this.backgroundColor,
this.loading,
}) : super(key: key);
@ -167,34 +169,44 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
? () {
openDialog();
}
:widget.enabled? (widget.showAsBottomSheet
? () async {
final selectedT = await showModalBottomSheet<T?>(
// Specify return type
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(20),
),
),
clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => SelectionBottomSheet<T>(
// Specify generic type
items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List<T>) ?? [], // Provide default empty list if null
selectedItem: _selectedItem,
title: widget.title,
builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name
),
);
if (selectedT != null) {
setState(() {
_selectedItem = selectedT;
});
widget.onSelect!(selectedT); // Non-null assertion after null check
}
}
: null):null),
: widget.enabled
? (widget.showAsBottomSheet
? () async {
final selectedT = await showModalBottomSheet<T?>(
// Specify return type
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(20),
),
),
clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => SelectionBottomSheet<T>(
// Specify generic type
items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List<T>) ?? [],
// Provide default empty list if null
selectedItem: _selectedItem,
title: widget.title,
showCancel: widget.showCancel,
onSelect: (selectedT) {
setState(() {
_selectedItem = selectedT;
});
widget.onSelect!(selectedT);
},
builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name
),
);
// if (selectedT != null) {
// setState(() {
// _selectedItem = selectedT;
// });
// widget.onSelect!(selectedT); // Non-null assertion after null check
// }
}
: null)
: null),
],
),
],

@ -1,7 +1,8 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/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';
@ -12,8 +13,10 @@ class SelectionBottomSheet<T> extends StatefulWidget {
final T? selectedItem; // Now nullable
final String title;
final SelectionBuilderString builderString;
final bool showCancel;
final Function(T?) onSelect;
const SelectionBottomSheet({Key? key, this.items, this.selectedItem, this.title = "", required this.builderString}) : super(key: key);
const SelectionBottomSheet({Key? key, this.items, this.selectedItem, this.title = "", required this.builderString, this.showCancel = false,required this.onSelect}) : super(key: key);
@override
_SelectionBottomSheetState createState() => _SelectionBottomSheetState<T>();
@ -48,7 +51,38 @@ class _SelectionBottomSheetState<T> extends State<SelectionBottomSheet<T>> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.title.heading5(context),
Row(
children: [
widget.title.heading5(context).expanded,
if (widget.showCancel)
AnimatedOpacity(
opacity: _selectedValue != null ? 1 : 0,
duration: const Duration(milliseconds: 250),
child: Container(
height: 30,
decoration: BoxDecoration(color: const Color(0xffF63939).withOpacity(.75), borderRadius: BorderRadius.circular(30)),
padding: const EdgeInsets.only(left: 8, right: 12, top: 4, bottom: 4),
alignment: Alignment.center,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.clear, color: Colors.white, size: 16),
4.width,
const Text(
"Clear",
style: TextStyle(fontSize: 14, color: Colors.white),
)
],
),
).onPress(_selectedValue != null
? () {
Navigator.pop(context);
widget.onSelect(null);
}
: null),
),
],
),
16.height,
TextField(
onChanged: (queryString) {
@ -103,7 +137,8 @@ class _SelectionBottomSheetState<T> extends State<SelectionBottomSheet<T>> {
label: context.translation.select,
maxWidth: true,
onPressed: () {
Navigator.pop(context, _selectedValue);
Navigator.pop(context);
widget.onSelect(_selectedValue);
},
),
],

@ -3,8 +3,6 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/base.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart';
import '../../../models/new_models/assistant_employee.dart';
@ -20,7 +18,8 @@ class AssistantEmployeeMenu extends StatefulWidget {
final bool showAsBottomSheet;
final bool hideShadow;
AssistantEmployeeMenu({Key? key, required this.statuses, this.title, this.showAsBottomSheet = false,this.hideShadow = false, required this.onSelect, this.initialStatus, this.backgroundColor, this.enable = true})
AssistantEmployeeMenu(
{Key? key, required this.statuses, this.title, this.showAsBottomSheet = false, this.hideShadow = false, required this.onSelect, this.initialStatus, this.backgroundColor, this.enable = true})
: super(key: key);
@override
@ -146,15 +145,22 @@ class _SingleAssistantEmployeeMenuState extends State<AssistantEmployeeMenu> {
items: widget.statuses,
selectedItem: _selectedStatus,
title: "Select",
showCancel: true,
onSelect: (selectedT) {
setState(() {
_selectedStatus = selectedT;
});
widget.onSelect(selectedT);
},
builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name
),
);
if (selectedT != null) {
setState(() {
_selectedStatus = selectedT;
});
widget.onSelect(selectedT); // Non-null assertion after null check
}
// if (selectedT != null) {
// setState(() {
// _selectedStatus = selectedT;
// });
// widget.onSelect(selectedT); // Non-null assertion after null check
// }
}
: null),
],

Loading…
Cancel
Save