Aidra Driver 1.3.5+68
Aidra Driver - Your path to green energy
Loading...
Searching...
No Matches
collection_request_details_screen.dart
Go to the documentation of this file.
1import 'package:flutter_screenutil/flutter_screenutil.dart';
2import 'package:maps_launcher/maps_launcher.dart';
3import 'package:flutter_bloc/flutter_bloc.dart';
4import 'package:go_router/go_router.dart';
5import 'package:flutter/services.dart';
6import 'package:flutter/material.dart';
7
8import '../../../../../core/common/entities/collection_entity.dart';
9import '../../../../../core/common/enums/collection_status.dart';
10import '../../../../../core/ui/widgets/custom_scaffold.dart';
11import '../../../../../core/ui/widgets/custom_snackbar.dart';
12import '../../../../../core/ui/theme/color_palette.dart';
13import 'widgets/collection_details_body.dart';
14import '../../bloc/collections_bloc/collections_bloc.dart';
15import 'widgets/collection_slider.dart';
16import 'widgets/map_app_bar.dart';
17
18class CollectionRequestDetailsScreen extends StatefulWidget {
19 final GoRouterState state;
20 const CollectionRequestDetailsScreen({super.key, required this.state});
21
22 @override
23 State<CollectionRequestDetailsScreen> createState() => _CollectionRequestDetailsScreenState();
24}
25
26class _CollectionRequestDetailsScreenState extends State<CollectionRequestDetailsScreen> {
27 final ScrollController _scrollController = ScrollController();
29 bool _showTitle = false;
31
32 @override
33 void initState() {
34 super.initState();
35 _collectionEntity = widget.state.extra as CollectionEntity?;
36 _scrollController.addListener(_onScroll);
38 }
39
40 @override
41 void dispose() {
42 _scrollController.removeListener(_onScroll);
43 _scrollController.dispose();
44 super.dispose();
45 }
46
47 void _onScroll() {
48 if (_scrollController.offset > 140 && !_showTitle) {
49 setState(() => _showTitle = true);
50 } else if (_scrollController.offset <= 140 && _showTitle) {
51 setState(() => _showTitle = false);
52 }
53 }
54
55 @override
56 Widget build(BuildContext context) {
57 // Use the stored collection entity or try to get it from the state
58 final CollectionEntity collection = _collectionEntity ?? widget.state.extra as CollectionEntity;
59
60 // Handle the case where collection is null
61 // if (collection == null) {
62 // return CustomScaffold(
63 // backgroundColor: ColorPalette.white,
64 // body: Center(
65 // child: Text('Collection details not available'),
66 // ),
67 // );
68 // }
69
70 return BlocConsumer<CollectionsBloc, CollectionsState>(
72 builder: (context, state) => CustomScaffold(
73 isLoading: state is CollectionsLoading,
74 backgroundColor: ColorPalette.white,
75 body: Container(
77 child: CustomScrollView(
78 controller: _scrollController,
79 slivers: [
80 MapAppBar(
81 status: currentStatus ?? CollectionStatus.defaultStatus,
82 showTitle: _showTitle,
83 lat: collection.lat ?? "0.0",
84 lng: collection.lng ?? "0.0",
85 ),
86 SliverToBoxAdapter(
87 child: Padding(
88 padding: EdgeInsets.only(top: 20.sp, left: 20.sp, right: 20.sp),
90 crossAxisAlignment: CrossAxisAlignment.center,
91 children: [
92 CollectionDetailsBody(
95 ),
96 CollectionSlider(
97 collectionId: collection.id ?? 0,
98 status: currentStatus ?? CollectionStatus.defaultStatus,
100 )
101 ].map((e) => Padding(padding: EdgeInsets.only(bottom: 12.sp), child: e)).toList(),
102 ),
103 ),
104 ),
105 ],
106 ),
107 ),
108 ),
109 );
110 }
111
112 void _handleBlocStateChanges(BuildContext context, CollectionsState state) {
113 // Use the stored collection entity or try to get it from the state
114 final collection = _collectionEntity ?? widget.state.extra as CollectionEntity?;
115
116 // Skip processing if collection is null
117 if (collection == null) return;
118
119 if (state is CollectionStatusUpdateError) {
120 CustomSnackBar.display(context, ColorPalette.red, state.failure.message);
121 } else if (state is CollectionStatusUpdateSuccess) {
122 HapticFeedback.mediumImpact();
123 setState(() {currentStatus = state.resCollectionStatusEntity.status;});
124 if (state.resCollectionStatusEntity.status == CollectionStatus.cancelled) context.pop();
125 if (state.resCollectionStatusEntity.status == CollectionStatus.onTheWay) {
126 MapsLauncher.launchCoordinates(
127 double.parse(collection.lat ?? "0.0"),
128 double.parse(collection.lng ?? "0.0"),
129 );
130 }
131 }
132 }
133}
override void initState()
override void dispose()
class App extends StatefulWidget build(BuildContext context)
Definition app.dart:31
bool isLoading
static const red
static const white
static const antiFlashWhite
static ScaffoldFeatureController< SnackBar, SnackBarClosedReason > display(final BuildContext context, final Color color, final String message,)
override State< CollectionRequestDetailsScreen > createState()
const CollectionRequestDetailsScreen({super.key, required this.state})
CollectionEntity _collectionEntity
void _handleBlocStateChanges(BuildContext context, CollectionsState state)
late CollectionStatus currentStatus
CollectionStatus
class UpdateCollectionStatusEvent extends CollectionsEvent collectionId
const CollectionStatusUpdateSuccess({required this.resCollectionStatusEntity})
final Widget child
final EdgeInsets padding
class CustomScaffold extends StatefulWidget _scrollController
void _onScroll()
final Color color
Definition failures.dart:1
class SearchWeeklyCollectionsEvent extends WeeklyCollectionsEvent collection
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,),),),],)