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

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:go_router/go_router.dart';
import 'package:real_estate_mobile/core/constants/app_colors.dart';
@@ -97,7 +98,7 @@ class _ContactScreenState extends State<ContactScreen> {
controller: _emailController,
hintText: '123@gmail.com',
keyboardType: TextInputType.emailAddress,
prefixIcon: Icons.email,
svgIcon: 'assets/icons/email_orange_icon.svg',
),
const SizedBox(height: 24),
_buildLabel('Phone Number'),
@@ -106,7 +107,7 @@ class _ContactScreenState extends State<ContactScreen> {
controller: _phoneController,
hintText: '12345678990',
keyboardType: TextInputType.phone,
prefixIcon: Icons.call,
svgIcon: 'assets/icons/phone_orange_icon.svg',
),
const SizedBox(height: 24),
_buildLabel('Message'),
@@ -135,7 +136,7 @@ class _ContactScreenState extends State<ContactScreen> {
required TextEditingController controller,
required String hintText,
TextInputType? keyboardType,
IconData? prefixIcon,
String? svgIcon,
}) {
final borderSide = BorderSide(
color: AppColors.primaryDark.withValues(alpha: 0.1),
@@ -173,10 +174,17 @@ class _ContactScreenState extends State<ContactScreen> {
enabledBorder: border,
focusedBorder: border,
disabledBorder: border,
prefixIcon: prefixIcon != null
? Icon(prefixIcon, size: 22, color: AppColors.primaryDark)
prefixIcon: svgIcon != null
? Padding(
padding: const EdgeInsets.all(14),
child: SvgPicture.asset(
svgIcon,
width: 22,
height: 22,
),
)
: null,
prefixIconConstraints: prefixIcon != null
prefixIconConstraints: svgIcon != null
? const BoxConstraints(minWidth: 48)
: null,
),
@@ -321,14 +329,14 @@ class _ContactScreenState extends State<ContactScreen> {
_buildDetailDivider(),
// Email Support
_buildContactDetailRow(
icon: Icons.email_outlined,
svgIcon: 'assets/icons/email_orange_icon.svg',
label: 'Email Support',
value: '123support@gmail.com',
),
_buildDetailDivider(),
// Phone
_buildContactDetailRow(
icon: Icons.call_outlined,
svgIcon: 'assets/icons/phone_orange_icon.svg',
label: 'Phone',
value: '1234567890',
subtitle: 'Mon-Fri 9am-6pm',
@@ -336,29 +344,21 @@ class _ContactScreenState extends State<ContactScreen> {
_buildDetailDivider(),
// Office
_buildContactDetailRow(
icon: Icons.location_on_outlined,
svgIcon: 'assets/icons/location_orange_icon.svg',
label: 'Office',
value: '123 Market Street\nNew York CA 234737',
),
const SizedBox(height: 16),
// Map placeholder
// Map image
Padding(
padding: const EdgeInsets.symmetric(horizontal: 36),
child: Container(
height: 166,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
border: Border.all(
color: AppColors.primaryDark.withValues(alpha: 0.1),
width: 1,
),
color: const Color(0xFFF5F5F5),
),
alignment: Alignment.center,
child: Icon(
Icons.map_outlined,
size: 48,
color: AppColors.primaryDark.withValues(alpha: 0.3),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Image.asset(
'assets/images/contact_map.jpg',
height: 166,
width: double.infinity,
fit: BoxFit.cover,
),
),
),
@@ -367,7 +367,7 @@ class _ContactScreenState extends State<ContactScreen> {
GestureDetector(
onTap: () {},
child: Container(
width: 120,
width: 139,
height: 35,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
@@ -406,7 +406,7 @@ class _ContactScreenState extends State<ContactScreen> {
}
Widget _buildContactDetailRow({
required IconData icon,
required String svgIcon,
required String label,
required String value,
String? subtitle,
@@ -416,10 +416,10 @@ class _ContactScreenState extends State<ContactScreen> {
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(
icon,
size: 22,
color: AppColors.primaryDark,
SvgPicture.asset(
svgIcon,
width: 20,
height: 20,
),
const SizedBox(width: 12),
Expanded(
@@ -493,19 +493,13 @@ class _ContactScreenState extends State<ContactScreen> {
),
),
const SizedBox(height: 24),
// Illustration placeholder
Container(
width: 254,
height: 254,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: const Color(0xFFFFF5EB),
),
alignment: Alignment.center,
child: Icon(
Icons.real_estate_agent,
size: 80,
color: AppColors.accentOrange.withValues(alpha: 0.6),
// Agent illustration
ClipOval(
child: Image.asset(
'assets/images/agent_illustration.png',
width: 254,
height: 254,
fit: BoxFit.cover,
),
),
const SizedBox(height: 24),
@@ -514,7 +508,7 @@ class _ContactScreenState extends State<ContactScreen> {
onTap: () => context.push('/agents/search'),
child: Container(
height: 46,
width: 200,
width: 220,
decoration: BoxDecoration(
color: AppColors.accentOrange,
borderRadius: BorderRadius.circular(15),
@@ -533,8 +527,8 @@ class _ContactScreenState extends State<ContactScreen> {
),
const SizedBox(width: 8),
const Icon(
Icons.arrow_forward,
size: 18,
Icons.arrow_forward_rounded,
size: 16,
color: AppColors.primaryDark,
),
],