Aidra Driver 1.3.5+68
Aidra Driver - Your path to green energy
Loading...
Searching...
No Matches
collection_request_information.dart
Go to the documentation of this file.
1import 'package:aidra_drive/core/router/routes.dart';
2import 'package:aidra_drive/core/ui/widgets/custom_scaffold.dart';
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';
8
9import '../../../../../core/common/entities/collection_entity.dart';
10import '../../../../../core/common/models/confirmation_param_model.dart';
11// import '../../../../../core/constants/factors.dart';
12import '../../../../../core/ui/theme/color_palette.dart';
13import '../../../../../core/ui/widgets/custom_slider.dart';
14import '../../../../../core/ui/widgets/custom_snackbar.dart';
15import '../../../../auth/presentation/bloc/authentication_bloc/authentication_bloc.dart';
16import '../../bloc/collections_information_bloc/collections_information_bloc.dart';
17import 'widgets/barcodes_scan.dart';
18import '../widgets/collection_request_details_header.dart';
19import 'widgets/details_card/details_card.dart';
20import 'widgets/note_field.dart';
21
22class CollectionRequestInformationScreen extends StatefulWidget {
23 final GoRouterState state;
24
26 super.key,
27 required this.state,
28 });
29
30 @override
31 State<CollectionRequestInformationScreen> createState() => _CollectionRequestInformationScreenState();
32}
33
34class _CollectionRequestInformationScreenState extends State<CollectionRequestInformationScreen> {
35 bool isLoading = false;
41
42 @override
43 void initState() {
44 _collectionEntity = widget.state.extra as CollectionEntity?;
46 super.initState();
47 }
48
49 @override
50 Widget build(BuildContext context) {
51 final CollectionEntity collection = _collectionEntity ?? widget.state.extra as CollectionEntity;
52
53 return PopScope(
54 canPop: false,
55 onPopInvokedWithResult: (didPop, _) {
56 if (didPop) return;
57 ScaffoldMessenger.of(context).showSnackBar(
58 const SnackBar(
59 content: Text('You cannot go back'),
60 backgroundColor: ColorPalette.red,
61 duration: Duration(seconds: 2),
62 ),
63 );
64 },
65 child: BlocListener<CollectionsInformationBloc, CollectionsInformationState>(
66 listenWhen: (previous, current) => current is CollectionsInformationLoading || current is CollectionsInformationLoaded || current is CollectionsInformationError,
67 listener: (context, state) {
68 if (state is CollectionsInformationError) {
69 setState(() {isLoading = false;});
70 CustomSnackBar.display(context, ColorPalette.red, state.failure.message);
71 } else if (state is CollectionsInformationLoaded) {
72 setState(() {isLoading = false;});
73 context.push(
74 Routes.collectionRequestConfirmationScreen.route,
76 collectionEntity: collection,
77 resCollectionInformationEntity: state.confirmation
78 ),
79 );
80 } else if (state is CollectionsInformationLoading) {
81 setState(() {isLoading = true;});
82 }
83 },
84 child: CustomScaffold(
86 title: 'information.title'.tr(),
87 isLeadingVisible: false,
88 backgroundColor: ColorPalette.antiFlashWhite,
89 body: SingleChildScrollView(
91 children: [
92 CollectionRequestDetailsHeader(
93 margin: EdgeInsets.all(16.sp),
94 name: collection.restaurant ?? '--',
95 address: collection.address ?? '--',
96 stepNumber: 1,
97 ),
98 DetailsCard(
99 cvReference: collection.reference ?? '--',
100 volumeDeclared: collection.volume ?? 0,
101 volumeCollected: collection.volume ?? 0,
102 onVolumeCollectedChanged: (value) {
103 _currentVolumeCollected = double.parse(value);
104 },
105 ),
106 BarCodesScan(
107 onScannedValuesChanged: (recoveredCodes, depositedCodes) {
108 _recoveredDrums = recoveredCodes;
109 _depositedDrums = depositedCodes;
110 },
111 ),
112 NoteField(
113 onChanged: (value) {
114 _note = value;
115 },
116 ),
117 Padding(
118 padding: EdgeInsets.all(16.sp),
119 child: CustomSlider(
120 text: '> > ${'information.confirmation'.tr()}',
121 action: (controller) {
122 // final maxAllowed = collection.volume! * Factors.maxCollectedQuantity;
123 // final minAllowed = collection.volume! * Factors.minCollectedQuantity;
124 // if (_currentVolumeCollected < minAllowed || _currentVolumeCollected > maxAllowed) {
125 // CustomSnackBar.display(
126 // context,
127 // ColorPalette.orange,
128 // "information.correct_quantity_message".tr(),
129 // );
130 // return;
131 // }
132 final authState = context.read<AuthenticationBloc>().state;
133 if (authState is AuthenticatedState) {
134 context.read<CollectionsInformationBloc>().add(
135 SendCollectionInformationEvent(
136 id: collection.id.toString(),
137 collectionRequest: 'manual',
138 volumeDeclared: collection.volume.toString(),
139 volumeCollected: _currentVolumeCollected.toString(),
140 recoveredDrum: _recoveredDrums,
141 depositedDrum: _depositedDrums,
142 userId: authState.session.uid.toString(),
143 reference: collection.reference ?? '',
144 address: collection.address ?? '',
145 restaurant: collection.restaurant ?? '',
146 restaurantId: collection.restaurantId ?? 0,
147 note: _note,
148 ),
149 );
150 }
151 },
152 ),
153 )
154 ],
155 ),
156 ),
157 ),
158 ),
159 );
160 }
161}
override void initState()
class App extends StatefulWidget build(BuildContext context)
Definition app.dart:31
AuthGuard _()
bool isLoading
static const red
static const antiFlashWhite
static ScaffoldFeatureController< SnackBar, SnackBarClosedReason > display(final BuildContext context, final Color color, final String message,)
override State< CollectionRequestInformationScreen > createState()
const CollectionRequestInformationScreen({ super.key, required this.state, })
CollectionEntity _collectionEntity
double _currentVolumeCollected
final String volumeDeclared
final String volumeCollected
const CollectionsInformationLoaded({required this.confirmation})
final Widget child
final EdgeInsets padding
class Partner String
final String address
Routes
Definition routes.dart:30
final String title
class SearchWeeklyCollectionsEvent extends WeeklyCollectionsEvent collection
style Text( '${ 'scheduling.reference'.tr()}:${collection.internalCode}', style:Theme.of(context).textTheme.bodySmall,)
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,),),),],)