3import 'package:easy_localization/easy_localization.dart';
4import 'package:flutter_screenutil/flutter_screenutil.dart';
5import 'package:flutter_bloc/flutter_bloc.dart';
6import 'package:go_router/go_router.dart';
7import 'package:signature/signature.dart';
8import 'package:flutter/material.dart';
10import '../../../../../core/router/routes.dart';
11import '../../../../auth/presentation/bloc/authentication_bloc/authentication_bloc.dart';
12import '../../bloc/collections_information_bloc/collections_information_bloc.dart';
13import '../../../domain/entities/res/res_collection_confirmation_entity.dart';
14import '../../../../../core/ui/widgets/custom_scaffold.dart';
15import '../../../../../core/ui/widgets/custom_snackbar.dart';
16import '../../../../../core/ui/widgets/custom_slider.dart';
17import '../widgets/collection_request_details_header.dart';
18import '../../../../../core/ui/theme/color_palette.dart';
19import 'widgets/payment_method_section.dart';
20import 'widgets/volume_info_section.dart';
21import 'widgets/signature_section.dart';
22import 'widgets/contact_selector.dart';
23import 'widgets/rating_dialog.dart';
26 final GoRouterState state;
30 State<CollectionRequestPaymentScreen>
createState() => _CollectionRequestPaymentScreenState();
33class _CollectionRequestPaymentScreenState
extends State<CollectionRequestPaymentScreen> {
39 penColor: Colors.black,
40 exportBackgroundColor: Colors.white,
52 context.read<CollectionsInformationBloc>().add(
55 context.read<CollectionsInformationBloc>().add(
66 'full_fill_collection.required_signature_text'.tr(),
77 final authState = context.read<AuthenticationBloc>().state;
79 if (authState is AuthenticatedState) {
80 userId = authState.session.uid;
84 context.read<CollectionsInformationBloc>().add(
101 barrierDismissible:
false,
102 builder: (context) => BlocProvider.value(
103 value: context.read<CollectionsInformationBloc>(),
106 onRatingSuccess: () {
107 context.push(
Routes.collectionRequestSuccessScreen.route);
121 Widget
build(BuildContext context) {
125 onPopInvokedWithResult: (didPop,
_) {
127 ScaffoldMessenger.of(context).showSnackBar(
129 content:
Text(
'You cannot go back'),
131 duration: Duration(seconds: 2),
135 child: BlocListener<CollectionsInformationBloc, CollectionsInformationState>(
136 listenWhen: (previous, current) => current is CollectionPaymentLoading || current is
CollectionPaymentLoaded || current is CollectionPaymentError,
137 listener: (context, state) {
138 if (state is CollectionPaymentLoading) setState(() {
isLoading =
true;});
144 'Payment successful',
148 if (state is CollectionPaymentError) {
153 state.failure.message,
157 child: CustomScaffold(
158 isLeadingVisible:
false,
161 title:
"Full-fill Collection",
162 body: SingleChildScrollView(
164 ?
const NeverScrollableScrollPhysics()
165 :
const AlwaysScrollableScrollPhysics(),
168 CollectionRequestDetailsHeader(
169 margin: EdgeInsets.all(16.sp),
176 declaredVolume:
"${confirmation.volumeDeclared ?? "0
"}",
177 collectedVolume:
"${confirmation.volumeCollected ?? "0
"}",
181 padding: EdgeInsets.symmetric(horizontal: 16.sp),
184 PaymentMethodSection(
187 onChanged: (
String? newValue) {
189 selectedPaymentMethod = newValue!;
196 onChanged: (
int? newValue) {
211 text:
'full_fill_collection.full_fill_collection_action'.tr(),
212 action: (controller) {
override void initState()
class App extends StatefulWidget build(BuildContext context)
sealed class CheckInOutEvent extends Equatable userId
static const antiFlashWhite
static ScaffoldFeatureController< SnackBar, SnackBarClosedReason > display(final BuildContext context, final Color color, final String message,)
void _showRatingDialog(String id)
String selectedPaymentMethod
ResCollectionConfirmationEntity collectionConfirmation
final SignatureController _signatureController
Future< void > _handleSignatureComplete(int? contactId, String confirmationId) async
class UpdateCollectionStatusEvent extends CollectionsEvent collectionId
PaymentMode paymentModeId
style Text( '${ 'scheduling.reference'.tr()}:${collection.internalCode}', style:Theme.of(context).textTheme.bodySmall,)
style SizedBox(height:2.h)
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,),),),],)