15 required this.collectionId,
16 required this.onReasonSelected,
20 State<CancellationBottomSheet>
createState() => _CancellationBottomSheetState();
23class _CancellationBottomSheetState
extends State<CancellationBottomSheet> {
26 context.read<CollectionsBloc>().add(LoadCancellationReasonsEvent());
31 Widget
build(BuildContext context) {
32 return BlocBuilder<CollectionsBloc, CollectionsState>(
33 buildWhen: (previous, current) => current is CancellationReasonsLoading || current is
CancellationReasonsLoaded || current is CancellationReasonsError,
34 builder: (context, state) {
35 if (state is CancellationReasonsLoading) {
37 height: MediaQuery.sizeOf(context).height * 0.4,
38 decoration:
const BoxDecoration(
40 borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
47 constraints: BoxConstraints(
48 maxHeight: MediaQuery.sizeOf(context).height * 0.7,
50 decoration:
const BoxDecoration(
52 borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
55 mainAxisSize: MainAxisSize.min,
58 margin: EdgeInsets.only(top: 12.sp),
61 decoration: BoxDecoration(
62 color: Colors.grey[300],
63 borderRadius: BorderRadius.circular(2),
71 'Select Cancellation Reason',
72 style: Theme.of(context).textTheme.titleMedium?.copyWith(
73 fontWeight: FontWeight.bold,
77 Divider(
color: Colors.grey[300]),
82 child: ListView.builder(
84 physics:
const BouncingScrollPhysics(),
85 itemCount: state.reasons.length,
86 itemBuilder: (context, index) {
87 final reason = state.reasons[index];
89 color: Colors.transparent,
91 onTap: () => widget.onReasonSelected(reason.id ?? 0),
93 padding: const EdgeInsets.symmetric(
100 padding: const EdgeInsets.all(8),
101 decoration: BoxDecoration(
102 color: Colors.red[50],
103 borderRadius: BorderRadius.circular(8),
106 FluentIcons.shield_error_16_regular,
107 color: ColorPalette.red
110 const SizedBox(width: 16),
114 style: Theme.of(context).textTheme.displaySmall,
119 color: Colors.grey[400],
135 height: MediaQuery.sizeOf(context).height * 0.4,
136 decoration:
const BoxDecoration(
138 borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
style Column(crossAxisAlignment:CrossAxisAlignment.end, children:[Container(padding:EdgeInsets.symmetric(horizontal:8.w, vertical:4.h), decoration:BoxDecoration(color:ColorPalette.tiffanyBlue.withValues(alpha:0.1), borderRadius:BorderRadius.circular(12),), child:Text(collection.type ?? '', style:Theme.of(context).textTheme.bodySmall?.copyWith(color:ColorPalette.tiffanyBlue, fontWeight:FontWeight.bold,),),),],)