1import 'package:aidra_drive/core/ui/widgets/loading.dart';
2import 'package:easy_localization/easy_localization.dart';
3import 'package:flutter_bloc/flutter_bloc.dart';
4import 'package:fluentui_system_icons/fluentui_system_icons.dart';
5import 'package:flutter/material.dart';
6import '../../../../../core/ui/theme/color_palette.dart';
7import '../../../../../core/ui/widgets/custom_scaffold.dart';
8import 'package:flutter_screenutil/flutter_screenutil.dart';
9import '../../../../../core/ui/widgets/error_widget.dart';
10import '../../../../../core/ui/widgets/logo_header.dart';
11import '../../../../auth/presentation/bloc/authentication_bloc/authentication_bloc.dart';
12import '../../../domain/entities/notification_entity.dart';
13import '../../bloc/notifications_bloc.dart';
14import 'widgets/notification_card.dart';
20 State<NotificationsScreen>
createState() => _NotificationsScreenState();
23class _NotificationsScreenState
extends State<NotificationsScreen> {
26 final authState = context.read<AuthenticationBloc>().state;
27 if (authState is AuthenticatedState) {
28 context.read<NotificationsBloc>().add(
36 Widget
build(BuildContext context) {
37 return CustomScaffold(
39 isLeadingVisible:
false,
40 body: BlocConsumer<NotificationsBloc, NotificationsState>(
41 listener: (context, state) {
42 if (state is NotificationsError) {
43 ScaffoldMessenger.of(context).showSnackBar(
45 content: Text(state.failure.message),
46 backgroundColor: Colors.red,
47 behavior: SnackBarBehavior.floating,
52 builder: (context, state) {
53 return RefreshIndicator(
55 final authState = context.read<AuthenticationBloc>().state;
56 if (authState is AuthenticatedState) {
57 context.read<NotificationsBloc>().add(
70 if (state is NotificationsLoading) {
74 if (state is NotificationsError) {
75 return CustomErrorWidget(
76 message:
"common.connection_failed".tr(),
78 final authState = context.read<AuthenticationBloc>().state;
79 if (authState is AuthenticatedState) {
80 context.read<NotificationsBloc>().add(
89 if (state.notifications.isEmpty) {
99 return const Loading();
105 mainAxisAlignment: MainAxisAlignment.center,
108 FluentIcons.chat_12_regular,
114 'notifications.no_notifications'.tr(),
128 LogoHeader(
title:
"notifications.title".tr()),
130 child: ListView.builder(
131 physics:
const AlwaysScrollableScrollPhysics(),
132 padding: EdgeInsets.symmetric(horizontal: 16.sp, vertical: 16.sp),
134 itemBuilder: (context, index) {
135 final notification = notifications[index];
136 return NotificationCard(notification: notification);
override void initState()
class App extends StatefulWidget build(BuildContext context)
sealed class CheckInOutEvent extends Equatable userId
static const antiFlashWhite
const LoadNotificationsEvent({required this.userId})
const NotificationsScreen({super.key})
Widget _buildLoadingWidget()
Widget _buildNotificationsList(List< NotificationEntity > notifications)
Widget _buildEmptyWidget()
Widget _buildContent(NotificationsState state)
sealed class NotificationsState extends Equatable notifications
const NotificationsLoaded({required this.notifications})
style Text( '${ 'scheduling.reference'.tr()}:${collection.internalCode}', style:Theme.of(context).textTheme.bodySmall,)
style SizedBox(height:2.h)
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,),),),],)