feat: Implement notifications feature, enhance profile settings with new sections, and integrate Firebase configurations for multiple environments.

This commit is contained in:
pradeepkumar
2026-03-08 21:48:56 +05:30
parent 0362d7cfe0
commit 744b7b7ca8
24 changed files with 3413 additions and 557 deletions

View File

@@ -3,12 +3,17 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart';
import 'package:real_estate_mobile/features/auth/presentation/providers/auth_provider.dart';
import 'package:real_estate_mobile/features/notifications/presentation/providers/notification_provider.dart';
class HomeHeader extends StatelessWidget {
class HomeHeader extends ConsumerWidget {
const HomeHeader({super.key});
@override
Widget build(BuildContext context) {
Widget build(BuildContext context, WidgetRef ref) {
final authState = ref.watch(authProvider);
final isAuthenticated = authState.status == AuthStatus.authenticated;
final unreadCount = isAuthenticated ? ref.watch(unreadCountProvider) : 0;
return Container(
padding: const EdgeInsets.symmetric(horizontal: 23, vertical: 12),
decoration: BoxDecoration(
@@ -27,13 +32,54 @@ class HomeHeader extends StatelessWidget {
// Right side: notification + hamburger menu
Row(
children: [
// Notification bell
// Notification bell with badge
GestureDetector(
onTap: () {},
child: const Icon(
Icons.notifications_outlined,
color: AppColors.primaryDark,
size: 26,
onTap: () {
if (!isAuthenticated) {
context.push('/login');
return;
}
context.go('/notifications');
},
child: SizedBox(
width: 30,
height: 30,
child: Stack(
clipBehavior: Clip.none,
children: [
const Center(
child: Icon(
Icons.notifications_outlined,
color: AppColors.primaryDark,
size: 26,
),
),
if (unreadCount > 0)
Positioned(
top: -2,
right: -4,
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: 4, vertical: 1),
constraints: const BoxConstraints(minWidth: 18),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(9),
),
child: Text(
unreadCount > 99 ? '99+' : '$unreadCount',
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 10,
fontWeight: FontWeight.w700,
color: Colors.white,
height: 1.4,
),
),
),
),
],
),
),
),
const SizedBox(width: 16),