feat: Implement notifications feature, enhance profile settings with new sections, and integrate Firebase configurations for multiple environments.
This commit is contained in:
@@ -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,
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user