import 'package:eatvio_app/core/theme/custom_text_style.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/core/widgets/loader.dart'; import 'package:eatvio_app/features/chat/presentation/bloc/chat_room_cubit/chat_room_cubit.dart'; import 'package:eatvio_app/features/chat/presentation/bloc/chat_room_cubit/chat_room_state.dart'; import 'package:eatvio_app/features/chat/presentation/pages/payment_screen.dart'; import 'package:eatvio_app/features/chat/presentation/widgets/chose_plan_date_widget.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:go_router/go_router.dart'; class NotificationBanner extends StatefulWidget { const NotificationBanner({super.key, required this.bannerType}); final BannerType bannerType; @override State createState() => _NotificationBannerState(); } class _NotificationBannerState extends State { bool isLoading = false; @override Widget build(BuildContext context) { final size = MediaQuery.sizeOf(context); final s = S.of(context); return Container( decoration: BoxDecoration( color: appTheme.gray50, borderRadius: BorderRadius.circular(20), ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(top: 12, right: 8, left: 12), child: SvgPicture.asset('assets/icons/reversed_exclamation_mark.svg', height: 68, width: 68), ), if (isLoading) const Padding( padding: EdgeInsets.only(left: 40, top: 24), child: Loader(), ) else Padding( padding: const EdgeInsets.only(top: 16), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: switch (widget.bannerType) { BannerType.date => [ SizedBox( width: size.width * 0.6, child: Text(s.choose_plan_start_date, style: TextStyles.textMMedium.copyWith(color: appTheme.black)), ), const SizedBox(height: 12), GestureDetector( onTap: () { final cubit = context.read(); showModalBottomSheet( context: context, builder: (context) => ChosePlanDateWidget( chatCubit: cubit, ), ); }, child: Text(s.choose_date, style: TextStyles.textLSemibold.copyWith(color: appTheme.blueA400)), ), const SizedBox(height: 16), ], BannerType.card => [ SizedBox( width: size.width * 0.6, child: Text(s.can_not_choose_start_date, style: TextStyles.textMMedium.copyWith(color: appTheme.black)), ), const SizedBox(height: 12), GestureDetector( onTap: () {}, child: Text(s.add_card, style: TextStyles.textLSemibold.copyWith(color: appTheme.blueA400)), ), const SizedBox(height: 16), ], BannerType.payment => [ SizedBox( width: size.width * 0.6, child: Text(s.tap_on_link_to_pay, style: TextStyles.textMMedium.copyWith(color: appTheme.black)), ), const SizedBox(height: 12), GestureDetector( onTap: () async { final planId = (context.read().state as ChatRoomStateLoaded).chatRoom.chosenPlan?.id; setState(() { isLoading = true; }); final paymentLink = await context.read().getPaymentLink(); setState(() { isLoading = false; }); if (paymentLink != null && planId != null) { if (!context.mounted) return; GoRouter.of(context).pushReplacement( PaymentScreen.path, extra: {'url': paymentLink, 'planId': planId}, ); } }, child: Text(s.pay, style: TextStyles.textLSemibold.copyWith(color: appTheme.blueA400)), ), const SizedBox(height: 16), ], }, ), ), ], ), ); } } enum BannerType { date, card, payment }