Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
completed_transactions_view.dart
Go to the documentation of this file.
1import 'package:connect/core/localization/app_localizations.dart';
2import 'package:connect/core/ui/widgets/custom_text_form_field.dart';
3import 'package:hugeicons/hugeicons.dart';
4
5import '../../../../../domain/entities/collection_entity.dart';
6import '/core/ui/screens/views/faild_to_fetch_data_view.dart';
7import '/core/ui/widgets/custom_tabs.dart';
8import '/features/authentication/presentation/logic/authentication_bloc/authentication_bloc.dart';
9import '/features/collections/presentation/logic/collection_requests_history_bloc/collection_requests_history_bloc.dart';
10import '/features/collections/presentation/screens/transaction_history_screen/views/competed_transactions_view/views/calender_transactions_summary_veiw/calendar_transaction_view.dart';
11import '/features/collections/presentation/screens/transaction_history_screen/views/competed_transactions_view/views/transactions_summary_view/transaction_summary_view.dart';
12import 'package:flutter/material.dart';
13import 'package:flutter_bloc/flutter_bloc.dart';
14import 'package:flutter_screenutil/flutter_screenutil.dart';
15
16import '../../../../../../../core/utils/collections_utils.dart';
17
18class CompletedTransactionsView extends StatefulWidget {
19 const CompletedTransactionsView({super.key});
20
21 @override
22 State<CompletedTransactionsView> createState() =>
23 _CompletedTransactionsViewState();
24}
25
26class _CompletedTransactionsViewState extends State<CompletedTransactionsView> {
27 final TextEditingController _searchController = TextEditingController();
28 String _searchQuery = '';
29
30 @override
31 void dispose() {
32 _searchController.dispose();
33 super.dispose();
34 }
35
36 List<CollectionEntity> _filterCollections(
37 List<CollectionEntity> collections) {
38 if (_searchQuery.isEmpty) return collections;
39 return collections.where((collection) {
40 final name = collection.name?.toLowerCase() ?? '';
41 final quantity =
42 collection.orderLines?.first.productQty.toString().toLowerCase() ??
43 '';
44 return name.contains(_searchQuery.toLowerCase()) ||
45 quantity.contains(_searchQuery.toLowerCase());
46 }).toList();
47 }
48
49 final PageController _pageController = PageController(initialPage: 0);
51
52 void _onTabSelected(int index) {
53 setState(() {
54 _selectedIndex = index;
55 });
57 }
58
59 @override
61 super.didChangeDependencies();
62 final authenticationState = context.read<AuthenticationBloc>().state;
63 if (authenticationState is AuthenticatedState) {
64 String? partnerId = authenticationState.session.partnerId;
65 if (partnerId != null) {
66 context
67 .read<CollectionRequestsHistoryBloc>()
68 .add(LoadCompletedCollectionRequestsEvent(
70 ));
71 }
72 }
73 }
74
75 @override
76 Widget build(BuildContext context) {
77 return BlocBuilder<CollectionRequestsHistoryBloc,
79 buildWhen: (previous, current) =>
80 current is LoadingCompletedCollectionRequests ||
82 current is CompletedCollectionRequestsLoaded,
83 builder: (context, state) => _adaptViewtoState(state),
84 );
85 }
86
88 final List<String> _tabs = [
89 AppLocalizations.of(context).translate('This Week'),
90 AppLocalizations.of(context).translate('This Month'),
91 AppLocalizations.of(context).translate('Calender'),
92 ];
93 if (state is CompletedCollectionRequestsLoaded) {
94 return Column(
95 children: [
96 CustomTabsBuilder(
97 selctedIndex: _selectedIndex,
98 tabs: _tabs,
99 onTapSelected: _onTabSelected,
100 ),
101 Padding(
102 padding: EdgeInsets.only(
103 left: 15.sp,
104 right: 15.sp,
105 bottom: 2.sp,
106 top: 15.sp,
107 ),
108 child: CustomTextFormField(
109 controller: _searchController,
110 hintText: AppLocalizations.of(context)
111 .translate('Search by collection name or quantity'),
112 labelText:
113 AppLocalizations.of(context).translate('Search Collection'),
114 suffix: Icon(
115 HugeIcons.strokeRoundedSearch01,
116 size: 15.sp,
117 ),
118 fillColor:
119 Theme.of(context).colorScheme.primary.withOpacity(0.11),
120 padding: EdgeInsets.symmetric(
121 horizontal: 16.sp,
122 vertical: 17.sp,
123 ),
124 onChanged: (value) {
125 setState(() {
126 _searchQuery = value;
127 });
128 },
129 ),
130 ),
131 Expanded(
132 child: PageView(
133 physics: const NeverScrollableScrollPhysics(),
134 controller: _pageController,
135 children: [
139 collections: state.collections,
140 filterType: CollectionFilterType.week,
141 ),
142 ),
143 title: AppLocalizations.of(context)
144 .translate('COMPLETED THIS WEEK'),
145 ),
149 collections: state.collections,
150 filterType: CollectionFilterType.month,
151 ),
152 ),
153 title: AppLocalizations.of(context)
154 .translate('COMPLETED THIS MONTH'),
155 ),
156 CalenderTransactionsSummaryVeiw(
157 collections: _filterCollections(state.collections),
158 )
159 ],
160 ),
161 ),
162 ],
163 );
164 } else if (state is LoadCompletedCollectionRequestsFailure) {
165 return FailedToFetchDataView(
166 onRetry: () {
167 final authenticationState = context.read<AuthenticationBloc>().state;
168 if (authenticationState is AuthenticatedState) {
169 String? partnerId = authenticationState.session.partnerId;
170 if (partnerId != null) {
171 context.read<CollectionRequestsHistoryBloc>().add(
172 LoadCompletedCollectionRequestsEvent(
174 ),
175 );
176 }
177 }
178 },
179 );
180 } else {
181 return const SizedBox();
182 }
183 }
184}
class CalenderTransactionsSummaryVeiw extends StatefulWidget collection
String translate(String key)
static AppLocalizations of(BuildContext context)
override State< CompletedTransactionsView > createState()
const CompletedTransactionsView({super.key})
final num partnerId
final String name
const LoadCompletedCollectionRequestsFailure({ required this.failure, })
enum CollectionFilterType filterCollections({ required List< CollectionEntity > collections, required CollectionFilterType filterType, DateTime? startDate, DateTime? endDate, })
CollectionFilterType
_adaptViewtoState(state)
override void didChangeDependencies()
List< CollectionEntity > _filterCollections(List< CollectionEntity > collections)
class CompletedTransactionsView extends StatefulWidget _searchController
override void dispose()
final Widget child
final EdgeInsets padding
class EnergyScreen extends StatefulWidget _pageController
class NavBarWrapper extends StatefulWidget _selectedIndex
override Widget build(BuildContext context)
final double value
final List< CollectionEntity > collections
const WeeklyView({ super.key, required this.collections, required this.title, })
const MonthlyView({ super.key, required this.collections, required this.title, })
final String title
void _onTabSelected(int index)