Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
collection_details_viewer.dart
Go to the documentation of this file.
1// ignore_for_file: unused_field
2import 'package:connect/core/localization/app_localizations.dart';
3import 'package:connect/core/router/routes.dart';
4import 'package:go_router/go_router.dart';
5
6import '../../../../../../../../core/utils/number_conversion.dart';
7import '/core/ui/widgets/custom_action_slider.dart';
8import '/core/ui/widgets/custom_card.dart';
9import '/features/collections/domain/entities/collection_entity.dart';
10import '/features/collections/domain/enums/collection_status_enum.dart';
11import '/features/collections/presentation/screens/transaction_history_screen/views/pending_transactions_view/collection_progress_tracker.dart';
12import 'package:flutter/material.dart';
13
14import 'package:flutter_screenutil/flutter_screenutil.dart';
15
16import 'package:hugeicons/hugeicons.dart';
17import 'package:intl/intl.dart';
18import 'package:lottie/lottie.dart';
19
20class CollectionDetailsViewer extends StatefulWidget {
22 super.key,
23 required this.collection,
24 });
25
27
28 @override
29 State<CollectionDetailsViewer> createState() =>
30 _CollectionDetailsViewerState();
31}
32
33class _CollectionDetailsViewerState extends State<CollectionDetailsViewer> {
34 final animations = [
35 'assets/lotties/process_animations.json',
36 'assets/lotties/animation002.json',
37 'assets/lotties/done_animation.json',
38 ];
39
41 switch (status) {
42 case CollectionStatusEnum.draft:
43 case CollectionStatusEnum.notStarted:
44 return 0;
45 case CollectionStatusEnum.onTheWay:
46 return 1;
47 case CollectionStatusEnum.arrived:
48 case CollectionStatusEnum.cancelled:
49 case CollectionStatusEnum.done:
50 case CollectionStatusEnum.defaultStatus:
51 return 2;
52 }
53 }
54
55 @override
56 Widget build(BuildContext context) {
57 final titles = [
58 AppLocalizations.of(context).translate('Your request has been received'),
59 AppLocalizations.of(context)
60 .translate('Your collection will be scheduled'),
61 AppLocalizations.of(context)
62 .translate('Your collection will be scheduled')
63 ];
64 return ListView(
65 padding: EdgeInsets.symmetric(
66 horizontal: 15.sp,
67 vertical: 15.sp,
68 ),
69 children: [
70 Container(
71 decoration: BoxDecoration(
72 borderRadius: BorderRadius.circular(10),
73 color: Theme.of(context).colorScheme.primary,
74 ),
75 child: Stack(
76 children: [
77 Positioned(
78 right: -30,
79 bottom: -50,
80 child: Lottie.asset(
82 CollectionStatusEnumFromJson(
83 widget.collection.status ??
84 AppLocalizations.of(context).translate('draft'),
85 ),
86 )],
87 height: 180.sp,
88 ),
89 ),
90 Positioned(
91 top: 0,
92 left: 0,
93 right: 0,
94 bottom: 0,
95 child: Container(
96 decoration: BoxDecoration(
97 borderRadius: BorderRadius.circular(10),
98 gradient: LinearGradient(
99 colors: [
100 Theme.of(context).colorScheme.primary.withOpacity(0.11),
101 Theme.of(context).colorScheme.primary.withOpacity(0.8),
102 ],
103 ),
104 ),
105 ),
106 ),
107 Padding(
108 padding: EdgeInsets.only(
109 top: 12.sp, bottom: 12.sp, left: 12.sp, right: 80.sp),
111 widget.collection.status ??
112 AppLocalizations.of(context).translate('draft'),
113 titles,
114 ),
115 ),
116 ],
117 ),
118 ),
119 SizedBox(height: 10.sp),
121 padding: EdgeInsets.all(15.sp),
123 stepNumber: CollectionStatusNumberFromEnum(
124 CollectionStatusEnumFromJson(
125 widget.collection.status ??
126 AppLocalizations.of(context).translate('draft'),
127 ),
128 ),
129 ),
130 ),
131 SizedBox(height: 10.sp),
133 padding: EdgeInsets.all(13.sp),
134 child: Column(
135 crossAxisAlignment: CrossAxisAlignment.start,
136 children: [
138 context: context,
139 icon: HugeIcons.strokeRoundedBinaryCode,
140 label: AppLocalizations.of(context).translate('CR Reference'),
141 info: widget.collection.name,
142 ),
143 SizedBox(height: 25.sp),
144 Row(
145 children: [
146 Expanded(
148 context: context,
149 icon: HugeIcons.strokeRoundedCalendar01,
150 label:
151 AppLocalizations.of(context).translate('Order Date'),
152 info: widget.collection.dateOrder != null
153 ? DateFormat('yyyy-MM-dd')
154 .format(widget.collection.dateOrder!)
155 : AppLocalizations.of(context)
156 .translate('No date available'),
157 ),
158 ),
159 Expanded(
161 context: context,
162 icon: HugeIcons.strokeRoundedClock01,
163 label: AppLocalizations.of(context)
164 .translate('Picking Time'),
165 info: widget.collection.proposedTime?.name,
166 ),
167 ),
168 ],
169 ),
170 SizedBox(height: 25.sp),
172 context: context,
173 icon: HugeIcons.strokeRoundedWeightScale01,
174 label: AppLocalizations.of(context).translate('Quantity'),
176 widget.collection.orderLines?.first.productQty,
177 ),
178 // info:
179 // '${NumberFormat.compact().format(widget.collection.orderLines?.first.productQty)} ${extractKg(widget.collection.orderLines?.first.productUom?.name)}',
180 ),
181 SizedBox(height: 25.sp),
183 context: context,
184 icon: HugeIcons.strokeRoundedEqualSignCircle,
185 label: AppLocalizations.of(context).translate('Instructions'),
186 info: widget.collection.instruction,
187 ),
188 SizedBox(height: 22.sp),
189 Visibility(
190 visible: widget.collection.status ==
191 AppLocalizations.of(context).translate('draft'),
192 child: Row(
193 children: [
194 Flexible(
195 child: CustomSliderV2(
196 text: AppLocalizations.of(context)
197 .translate('EDIT COLLECTION'),
198 action: (action) {
199 context.push(
200 Routes.editCollection.route,
201 extra: widget.collection,
202 );
203 // showModalBottomSheet(
204 // context: context,
205 // isScrollControlled: true,
206 // backgroundColor: Colors.transparent,
207 // builder: (context) => Padding(
208 // padding: EdgeInsets.all(15.sp),
209 // child: SafeArea(
210 // child: EditCollectionRequestView(
211 // collection: widget.collection,
212 // ),
213 // ),
214 // ),
215 // );
216 },
217 ),
218 ),
219 ],
220 ),
221 ),
222 ],
223 ),
224 ),
225 ],
226 );
227 }
228
229 _adaptstatsToView(String status, List<String> titles) {
230 return Column(
231 crossAxisAlignment: CrossAxisAlignment.start,
232 mainAxisSize: MainAxisSize.min,
233 children: [
234 Text(
235 titles[getStatusValue(
236 CollectionStatusEnumFromJson(
237 status,
238 ),
239 )],
240 style: Theme.of(context).textTheme.bodyLarge?.copyWith(
241 fontWeight: FontWeight.bold,
242 height: 1.5.sp,
243 color: Theme.of(context).colorScheme.onPrimary,
244 ),
245 ),
246 ],
247 );
248 }
249
251 required BuildContext context,
252 IconData? icon,
253 required String label,
254 required String? info,
255 MainAxisSize? size,
256 }) {
257 return Row(
258 mainAxisSize: size ?? MainAxisSize.min,
259 crossAxisAlignment: CrossAxisAlignment.start,
260 children: [
261 icon == null
262 ? const SizedBox()
263 : Container(
264 decoration: BoxDecoration(
265 color:
266 Theme.of(context).colorScheme.primary.withOpacity(0.11),
267 borderRadius: BorderRadius.circular(10),
268 ),
269 padding: EdgeInsets.all(9.sp),
270 child: Icon(
271 icon,
272 color: Theme.of(context).colorScheme.primary,
273 size: 18.sp,
274 ),
275 ),
276 SizedBox(width: 15.sp),
277 Expanded(
278 child: Column(
279 mainAxisSize: MainAxisSize.min,
280 crossAxisAlignment: CrossAxisAlignment.start,
281 children: [
282 Opacity(
283 opacity: 0.7,
284 child: Text(
285 label,
286 style: Theme.of(context).textTheme.bodySmall,
287 ),
288 ),
289 SizedBox(height: 3.sp),
290 Text(
291 info ?? AppLocalizations.of(context).translate('Not Found'),
292 style: Theme.of(context).textTheme.bodySmall,
293 ),
294 ],
295 ),
296 ),
297 ],
298 );
299 }
300}
301
302extractKg(String? thestring) {
303 return thestring
304 ?.split(':')
305 .last
306 .trim()
307 .replaceAll('}', '')
308 .replaceAll('"', '');
309}
AppLocalizations(this.locale)
String translate(String key)
static AppLocalizations of(BuildContext context)
static String convertAndFormatWeight(num? kg)
override State< CollectionDetailsViewer > createState()
const CollectionDetailsViewer({ super.key, required this.collection, })
final CollectionEntity collection
int getStatusValue(CollectionStatusEnum status)
_buildInfoLabel({ required BuildContext context, IconData? icon, required String label, required String? info, MainAxisSize? size, })
_adaptstatsToView(String status, List< String > titles)
class CollectionDetailsViewer extends StatefulWidget animations
extractKg(String? thestring)
const CollectionProgressTracker({super.key, required this.stepNumber})
final int stepNumber
const CustomCard({ super.key, required this.child, this.padding, this.bgColor, })
final Widget child
final EdgeInsets padding
final String label
final Color color
Definition failures.dart:1
override Widget build(BuildContext context)