You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			125 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Dart
		
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Dart
		
	
| 
											2 weeks ago
										 | import 'package:easy_localization/easy_localization.dart'; | ||
|  | import 'package:flutter/material.dart'; | ||
|  | import 'package:mohem_flutter_app/app_state/app_state.dart'; | ||
|  | import 'package:mohem_flutter_app/classes/colors.dart'; | ||
|  | import 'package:mohem_flutter_app/classes/date_uitl.dart'; | ||
|  | import 'package:mohem_flutter_app/classes/utils.dart'; | ||
|  | import 'package:mohem_flutter_app/extensions/int_extensions.dart'; | ||
|  | import 'package:mohem_flutter_app/extensions/string_extensions.dart'; | ||
|  | import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; | ||
|  | import 'package:mohem_flutter_app/models/dashboard/get_accural_ticket_balance_model.dart'; | ||
|  | import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; | ||
|  | import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; | ||
|  | import 'package:mohem_flutter_app/widgets/balances_dashboard_widget.dart'; | ||
|  | import 'package:mohem_flutter_app/widgets/button/default_button.dart'; | ||
|  | import 'package:mohem_flutter_app/widgets/sso_webview_widget.dart'; | ||
|  | import 'package:provider/provider.dart'; | ||
|  | 
 | ||
|  | class TicketDetailedScreen extends StatefulWidget { | ||
|  |   final String? url; | ||
|  |   final String? jwtToken; | ||
|  | 
 | ||
|  |   const TicketDetailedScreen({super.key, this.url, this.jwtToken}); | ||
|  | 
 | ||
|  |   @override | ||
|  |   State<TicketDetailedScreen> createState() => _TicketDetailedScreenState(); | ||
|  | } | ||
|  | 
 | ||
|  | class _TicketDetailedScreenState extends State<TicketDetailedScreen> { | ||
|  |   DashboardProviderModel? dashboardProviderModel; | ||
|  |   late DateTime accrualDateTime; | ||
|  | 
 | ||
|  |   @override | ||
|  |   void initState() { | ||
|  |     dashboardProviderModel = Provider.of<DashboardProviderModel>(context, listen: false); | ||
|  |     accrualDateTime = DateTime.now(); | ||
|  |     super.initState(); | ||
|  |   } | ||
|  | 
 | ||
|  |   void changeAccrualDate(bool showLoading) async { | ||
|  |     try { | ||
|  |       if (showLoading) Utils.showLoading(context); | ||
|  |       await dashboardProviderModel?.fetchTicketAccuralBalance(context, accrualDateTime); | ||
|  |       if (showLoading) Utils.hideLoading(context); | ||
|  |       setState(() {}); | ||
|  |     } catch (ex) { | ||
|  |       if (showLoading) Utils.hideLoading(context); | ||
|  |       Utils.handleException(ex, context, null); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   @override | ||
|  |   Widget build(BuildContext context) { | ||
|  |     return Scaffold( | ||
|  |       backgroundColor: Colors.white, | ||
|  |       appBar: AppBarWidget(context, title: "Ticket Details"), | ||
|  |       body: Column( | ||
|  |         children: [ | ||
|  |           ListView( | ||
|  |             padding: const EdgeInsets.all(21), | ||
|  |             physics: const BouncingScrollPhysics(), | ||
|  |             children: <Widget>[ | ||
|  |               if (dashboardProviderModel == null && dashboardProviderModel?.accrualTicketBalanceList == null) ...<Widget>[Utils.getNoDataWidget(context).paddingOnly(top: 50)] else ...<Widget>[ | ||
|  |                 // const BalancesDashboardWidget("Current Ticket Balance", false, showLoading: false), 12.height,
 | ||
|  |                 Container( | ||
|  |                   padding: const EdgeInsets.all(16.0), | ||
|  |                   decoration: BoxDecoration( | ||
|  |                     color: Colors.white, | ||
|  |                     borderRadius: BorderRadius.circular(12.0), | ||
|  |                     boxShadow: [BoxShadow(color: Colors.grey.withOpacity(0.2), spreadRadius: 2, blurRadius: 5, offset: const Offset(0, 3))], | ||
|  |                   ), | ||
|  |                   child: Column( | ||
|  |                     children: [ | ||
|  |                       Row( | ||
|  |                         children: [ | ||
|  |                           "Current Ticket Balance".toText20().expanded, | ||
|  |                           Row( | ||
|  |                             children: [ | ||
|  |                               const Icon(Icons.calendar_month_rounded, color: MyColors.darkIconColor, size: 16), | ||
|  |                               5.width, | ||
|  |                               DateUtil.formatDateToDate(accrualDateTime, AppState().isArabic(context)).toText13(isUnderLine: true), | ||
|  |                               8.width, | ||
|  |                             ], | ||
|  |                           ).onPress(() async { | ||
|  |                             DateTime selectedDate = await Utils.selectDate(context, accrualDateTime); | ||
|  |                             if (selectedDate != accrualDateTime) { | ||
|  |                               accrualDateTime = selectedDate; | ||
|  |                               changeAccrualDate(true); | ||
|  |                             } | ||
|  |                           }), | ||
|  |                         ], | ||
|  |                       ), | ||
|  |                       8.height, | ||
|  |                       Column( | ||
|  |                         crossAxisAlignment: CrossAxisAlignment.start, | ||
|  |                         children: | ||
|  |                             dashboardProviderModel!.accrualTicketBalanceList!.map<Widget>((GetTicketAccuralBalanceModel item) { | ||
|  |                               return Padding( | ||
|  |                                 padding: const EdgeInsets.symmetric(vertical: 6.0), | ||
|  |                                 child: Row( | ||
|  |                                   mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
|  |                                   children: <Widget>[ | ||
|  |                                     item.accuralPlanCode.toString().replaceAll('_', ' ').toCamelCase.toText14(), | ||
|  |                                     item.accrualNetEntitlement.toString().toText16(color: MyColors.textMixColor, isBold: true), | ||
|  |                                   ], | ||
|  |                                 ), | ||
|  |                               ); | ||
|  |                             }).toList(), | ||
|  |                       ), | ||
|  |                     ], | ||
|  |                   ), | ||
|  |                 ), | ||
|  |               ], | ||
|  |             ], | ||
|  |           ).expanded, | ||
|  |           DefaultButton("Proceed For Booking", () { | ||
|  |             if (widget.url != null && widget.jwtToken != null) { | ||
|  |               Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => SsoLoginWebView(url: widget.url, jwtToken: widget.jwtToken))); | ||
|  |             } | ||
|  |           }).insideContainer, | ||
|  |         ], | ||
|  |       ), | ||
|  |     ); | ||
|  |   } | ||
|  | } |