3import 'package:easy_localization/easy_localization.dart';
4import 'package:flutter/material.dart';
5import 'package:flutter_bloc/flutter_bloc.dart';
6import 'package:flutter_screenutil/flutter_screenutil.dart';
7import 'package:go_router/go_router.dart';
8import 'package:image_picker/image_picker.dart';
10import '../../../../../core/common/models/confirmation_param_model.dart';
11import '../../../../../core/router/routes.dart';
12import '../../../../../core/services/image_service.dart';
13import '../../../../../core/ui/theme/color_palette.dart';
14import '../../../../../core/ui/widgets/custom_scaffold.dart';
15import '../../../../../core/ui/widgets/custom_slider.dart';
16import '../../../../../core/ui/widgets/custom_snackbar.dart';
17import '../../../../auth/presentation/bloc/authentication_bloc/authentication_bloc.dart';
18import '../../bloc/collections_information_bloc/collections_information_bloc.dart';
19import '../widgets/collection_request_details_header.dart';
20import 'widgets/pictures_sections.dart';
21import 'widgets/scanned_drums_section.dart';
22import 'widgets/status_card_section.dart';
29 State<CollectionRequestConfirmationScreen>
createState() => _CollectionRequestConfirmationScreenState();
32class _CollectionRequestConfirmationScreenState
extends State<CollectionRequestConfirmationScreen> {
34 final ImagePicker
_picker = ImagePicker();
49 final XFile? image = await
_picker.pickImage(
50 source: ImageSource.camera,
57 if (imageBase64 == null)
return;
71 ScaffoldMessenger.of(context).showSnackBar(
72 SnackBar(content:
Text(
'Error capturing image: $e')),
79 Widget
build(BuildContext context) {
83 onPopInvokedWithResult: (didPop,
_) {
85 ScaffoldMessenger.of(context).showSnackBar(
87 content:
Text(
'You cannot go back'),
89 duration: Duration(seconds: 2),
93 child: BlocListener<CollectionsInformationBloc, CollectionsInformationState>(
94 listenWhen: (previous, current) => current is CollectionConfirmationLoading || current is
CollectionConfirmationLoaded || current is CollectionConfirmationError,
95 listener: (context, state) {
96 if (state is CollectionConfirmationError) {
105 context.push(
Routes.collectionRequestPaymentScreen.route, extra: state.confirmation);
106 }
else if (state is CollectionConfirmationLoading) {
112 child: CustomScaffold(
113 isLeadingVisible:
false,
115 title:
'confirmation.title'.tr(),
121 child: SingleChildScrollView(
122 padding: EdgeInsets.all(20.sp),
124 crossAxisAlignment: CrossAxisAlignment.start,
126 CollectionRequestDetailsHeader(
147 onDeletePicture: (picture) {
161 text:
"> > ${'confirmation.confirm_collection'.tr()}",
164 confirmationParamModel: confirmationParamModel,
187 final authState = context.read<AuthenticationBloc>().state;
189 if (authState is AuthenticatedState) {
190 userId = authState.session.uid;
194 context.read<CollectionsInformationBloc>().add(
195 SendCollectionConfirmationEvent(
198 id: confirmationParamModel.resCollectionInformationEntity.id.toString(),
201 address: confirmationParamModel.collectionEntity.address ??
'',
202 reference: confirmationParamModel.collectionEntity.reference ??
'',
203 restaurant: confirmationParamModel.collectionEntity.restaurant ??
'',
204 restaurantId: confirmationParamModel.collectionEntity.restaurantId,
205 volumeCollected: confirmationParamModel.collectionEntity.volumeCollected ?? 0,
206 volumeDeclared: confirmationParamModel.collectionEntity.volume ?? 0,
override void initState()
class App extends StatefulWidget build(BuildContext context)
List< DrumScan > depositedDrums
class BarCodesScan extends StatefulWidget recoveredDrums
sealed class CheckInOutEvent extends Equatable userId
static const antiFlashWhite
final ResCollectionInformationEntity resCollectionInformationEntity
static ScaffoldFeatureController< SnackBar, SnackBarClosedReason > display(final BuildContext context, final Color color, final String message,)
static final ImageService instance
Future< String?> processImage(XFile? image) async
Future< void > _submitData({ required ConfirmationParamModel confirmationParamModel, }) async
class CollectionRequestConfirmationScreen extends StatefulWidget confirmationParam
final ImagePicker _picker
Future< void > _takePhoto(bool isVoucher) async
String voucherImageBase64
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,),),),],)