feat: Add app icon generation, update profile navigation, and refine UI styling for profile action buttons and notification tabs.

This commit is contained in:
pradeepkumar
2026-03-14 17:25:33 +05:30
parent 7b9c19ec67
commit 8411015075
44 changed files with 276 additions and 279 deletions

View File

@@ -59,18 +59,18 @@ android {
create("local") { create("local") {
dimension = "flavor-type" dimension = "flavor-type"
applicationIdSuffix = ".local" applicationIdSuffix = ".local"
resValue("string", "app_name", "RE-QuestN Local") resValue("string", "app_name", "RE-Quest Local")
} }
create("demo") { create("demo") {
dimension = "flavor-type" dimension = "flavor-type"
applicationIdSuffix = ".demo" applicationIdSuffix = ".demo"
resValue("string", "app_name", "RE-QuestN Demo") resValue("string", "app_name", "RE-Quest Demo")
signingConfig = signingConfigs.getByName("demoRelease") signingConfig = signingConfigs.getByName("demoRelease")
} }
create("dev") { create("dev") {
dimension = "flavor-type" dimension = "flavor-type"
applicationIdSuffix = ".dev" applicationIdSuffix = ".dev"
resValue("string", "app_name", "RE-QuestN Dev") resValue("string", "app_name", "RE-Quest Dev")
signingConfig = signingConfigs.getByName("devRelease") signingConfig = signingConfigs.getByName("devRelease")
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

BIN
assets/app_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -1,3 +1,3 @@
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo
PRODUCT_NAME = RE-QuestN Demo PRODUCT_NAME = RE-Quest Demo
DISPLAY_NAME = RE-QuestN Demo DISPLAY_NAME = RE-Quest Demo

View File

@@ -1,3 +1,3 @@
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev
PRODUCT_NAME = RE-QuestN Dev PRODUCT_NAME = RE-Quest Dev
DISPLAY_NAME = RE-QuestN Dev DISPLAY_NAME = RE-Quest Dev

View File

@@ -1,3 +1,3 @@
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local
PRODUCT_NAME = RE-QuestN Local PRODUCT_NAME = RE-Quest Local
DISPLAY_NAME = RE-QuestN Local DISPLAY_NAME = RE-Quest Local

View File

@@ -535,7 +535,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Dev";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -546,7 +546,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -609,7 +609,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -697,7 +697,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Demo";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -708,7 +708,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -791,7 +791,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Demo";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -829,7 +829,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Local";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@@ -841,7 +841,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -911,7 +911,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -968,7 +968,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -1033,7 +1033,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@@ -1056,7 +1056,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -1083,7 +1083,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -1146,7 +1146,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Local";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -1168,7 +1168,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.demo;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Demo";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@@ -1180,7 +1180,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -1245,7 +1245,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Dev";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@@ -1268,7 +1268,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.dev;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Dev";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -1295,7 +1295,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -1363,7 +1363,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local; PRODUCT_BUNDLE_IDENTIFIER = com.requestn.realEstateMobile.local;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "RE-Quest Local";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@@ -1374,7 +1374,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -1449,7 +1449,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@@ -1538,7 +1538,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";

View File

@@ -1,122 +1 @@
{ {"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@@ -15,7 +15,7 @@
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>real_estate_mobile</string> <string>RE-Quest</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>

View File

@@ -751,63 +751,7 @@ class _AgentDetailScreenState extends ConsumerState<AgentDetailScreen> {
} }
Widget _buildCertifications(List<Map<String, String>> certs) { Widget _buildCertifications(List<Map<String, String>> certs) {
return Column( return _ExpandableCertificationsSection(certs: certs);
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Certifications',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 14,
fontWeight: FontWeight.w700,
color: AppColors.primaryDark,
),
),
const SizedBox(height: 16),
...certs.map((cert) => Padding(
padding: const EdgeInsets.only(left: 14, bottom: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Padding(
padding: EdgeInsets.only(top: 2),
child: Text('\u2022 ',
style: TextStyle(
fontSize: 14, color: AppColors.primaryDark)),
),
Expanded(
child: Text(
cert['name'] ?? '',
style: const TextStyle(
fontFamily: 'SourceSerif4',
fontSize: 14,
color: AppColors.primaryDark,
),
),
),
],
),
if ((cert['org'] ?? '').isNotEmpty)
Padding(
padding: const EdgeInsets.only(left: 20, top: 2),
child: Text(
cert['org']!.toUpperCase(),
style: TextStyle(
fontFamily: 'SourceSerif4',
fontSize: 14,
color: AppColors.primaryDark.withValues(alpha: 0.5),
),
),
),
],
),
)),
const SizedBox(height: 4),
],
);
} }
// ── Info Cards (Availability, Work Env, Best Experience) ── // ── Info Cards (Availability, Work Env, Best Experience) ──
@@ -1096,9 +1040,9 @@ class _ExpandableChipsSectionState extends State<_ExpandableChipsSection> {
), ),
), ),
)), )),
if (hasMore && !_expanded) if (hasMore)
GestureDetector( GestureDetector(
onTap: () => setState(() => _expanded = true), onTap: () => setState(() => _expanded = !_expanded),
child: IntrinsicWidth( child: IntrinsicWidth(
child: Container( child: Container(
height: 28, height: 28,
@@ -1107,17 +1051,34 @@ class _ExpandableChipsSectionState extends State<_ExpandableChipsSection> {
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
border: Border.all( border: Border.all(
color: AppColors.primaryDark.withValues(alpha: 0.15), color: _expanded
? AppColors.accentOrange
: AppColors.primaryDark.withValues(alpha: 0.15),
width: 1), width: 1),
), ),
child: Text( child: Row(
'+${widget.items.length - widget.initialCount} More', mainAxisSize: MainAxisSize.min,
style: const TextStyle( children: [
fontFamily: 'SourceSerif4', Text(
fontSize: 15, _expanded
fontWeight: FontWeight.w300, ? 'Show Less'
color: AppColors.primaryDark, : '+${widget.items.length - widget.initialCount} More',
), style: TextStyle(
fontFamily: 'SourceSerif4',
fontSize: _expanded ? 13 : 15,
fontWeight:
_expanded ? FontWeight.w700 : FontWeight.w300,
color: _expanded
? AppColors.accentOrange
: AppColors.primaryDark,
),
),
if (_expanded) ...[
const SizedBox(width: 2),
const Icon(Icons.keyboard_arrow_up,
size: 14, color: AppColors.accentOrange),
],
],
), ),
), ),
), ),
@@ -1132,6 +1093,133 @@ class _ExpandableChipsSectionState extends State<_ExpandableChipsSection> {
} }
} }
// ── Expandable Certifications Section ──
class _ExpandableCertificationsSection extends StatefulWidget {
final List<Map<String, String>> certs;
final int initialCount;
const _ExpandableCertificationsSection({
required this.certs,
this.initialCount = 3,
});
@override
State<_ExpandableCertificationsSection> createState() =>
_ExpandableCertificationsSectionState();
}
class _ExpandableCertificationsSectionState
extends State<_ExpandableCertificationsSection> {
bool _expanded = false;
@override
Widget build(BuildContext context) {
final showCerts = _expanded
? widget.certs
: widget.certs.take(widget.initialCount).toList();
final hasMore = widget.certs.length > widget.initialCount;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Certifications',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 14,
fontWeight: FontWeight.w700,
color: AppColors.primaryDark,
),
),
const SizedBox(height: 16),
...showCerts.map((cert) => Padding(
padding: const EdgeInsets.only(left: 14, bottom: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Padding(
padding: EdgeInsets.only(top: 2),
child: Text('\u2022 ',
style: TextStyle(
fontSize: 14, color: AppColors.primaryDark)),
),
Expanded(
child: Text(
cert['name'] ?? '',
style: const TextStyle(
fontFamily: 'SourceSerif4',
fontSize: 14,
color: AppColors.primaryDark,
),
),
),
],
),
if ((cert['org'] ?? '').isNotEmpty)
Padding(
padding: const EdgeInsets.only(left: 20, top: 2),
child: Text(
cert['org']!.toUpperCase(),
style: TextStyle(
fontFamily: 'SourceSerif4',
fontSize: 14,
color:
AppColors.primaryDark.withValues(alpha: 0.5),
),
),
),
],
),
)),
if (hasMore)
Center(
child: GestureDetector(
onTap: () => setState(() => _expanded = !_expanded),
child: Container(
padding:
const EdgeInsets.symmetric(horizontal: 14, vertical: 4),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
border:
Border.all(color: AppColors.accentOrange, width: 1),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
_expanded
? 'Show Less'
: '+${widget.certs.length - widget.initialCount} More',
style: const TextStyle(
fontFamily: 'SourceSerif4',
fontSize: 10,
fontWeight: FontWeight.w700,
color: AppColors.accentOrange,
),
),
const SizedBox(width: 2),
Icon(
_expanded
? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down,
size: 14,
color: AppColors.accentOrange,
),
],
),
),
),
),
const SizedBox(height: 4),
],
);
}
}
// ── Specialization Card ── // ── Specialization Card ──
class _SpecializationCardWidget extends StatefulWidget { class _SpecializationCardWidget extends StatefulWidget {

View File

@@ -83,7 +83,7 @@ class HomeScreen extends ConsumerWidget {
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
Text( Text(
'\u00A9 2025 RE-QuestN. All rights reserved.', '\u00A9 2025 RE-Quest. All rights reserved.',
style: TextStyle( style: TextStyle(
fontFamily: 'SourceSerif4', fontFamily: 'SourceSerif4',
fontSize: 12, fontSize: 12,

View File

@@ -90,7 +90,7 @@ class _ChangePasswordTabState extends ConsumerState<ChangePasswordTab> {
const SizedBox(height: 40), const SizedBox(height: 40),
ProfileActionButtons( ProfileActionButtons(
onSave: _changePassword, onSave: _changePassword,
onCancel: () => context.pop(), onCancel: () => context.go('/home'),
isSaving: _isChangingPassword, isSaving: _isChangingPassword,
saveLabel: 'Update Password', saveLabel: 'Update Password',
), ),

View File

@@ -144,7 +144,7 @@ class _NotificationsTabState extends ConsumerState<NotificationsTab> {
const SizedBox(height: 40), const SizedBox(height: 40),
ProfileActionButtons( ProfileActionButtons(
onSave: _saveNotificationSettings, onSave: _saveNotificationSettings,
onCancel: () => context.pop(), onCancel: () => context.go('/home'),
isSaving: _isSavingNotifications, isSaving: _isSavingNotifications,
), ),
], ],
@@ -318,8 +318,8 @@ class _NotificationsTabState extends ConsumerState<NotificationsTab> {
child: Center( child: Center(
child: isSelected child: isSelected
? Container( ? Container(
height: 22, height: 24,
margin: const EdgeInsets.symmetric(horizontal: 4), margin: const EdgeInsets.symmetric(horizontal: 3),
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.accentOrange, color: AppColors.accentOrange,
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
@@ -328,17 +328,19 @@ class _NotificationsTabState extends ConsumerState<NotificationsTab> {
child: Text(labels[i], child: Text(labels[i],
style: const TextStyle( style: const TextStyle(
fontFamily: 'SourceSerif4', fontFamily: 'SourceSerif4',
fontSize: 14, fontSize: 12,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
color: AppColors.primaryDark, color: AppColors.primaryDark,
height: 1.0,
)), )),
) )
: Text(labels[i], : Text(labels[i],
style: const TextStyle( style: const TextStyle(
fontFamily: 'SourceSerif4', fontFamily: 'SourceSerif4',
fontSize: 14, fontSize: 12,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
color: AppColors.primaryDark, color: AppColors.primaryDark,
height: 1.0,
)), )),
), ),
), ),

View File

@@ -150,7 +150,7 @@ class _PrivacyTabState extends ConsumerState<PrivacyTab> {
const SizedBox(height: 20), const SizedBox(height: 20),
ProfileActionButtons( ProfileActionButtons(
onSave: _savePrivacyPreferences, onSave: _savePrivacyPreferences,
onCancel: () => context.pop(), onCancel: () => context.go('/home'),
isSaving: _isSavingPrivacy), isSaving: _isSavingPrivacy),
const SizedBox(height: 24), const SizedBox(height: 24),
ProfileSectionCard( ProfileSectionCard(

View File

@@ -259,7 +259,7 @@ class _ProfileSettingsTabState extends ConsumerState<ProfileSettingsTab> {
const SizedBox(height: 30), const SizedBox(height: 30),
ProfileActionButtons( ProfileActionButtons(
onSave: _saveProfileSettings, onSave: _saveProfileSettings,
onCancel: () => context.pop(), onCancel: () => context.go('/home'),
isSaving: profileState.isSaving, isSaving: profileState.isSaving,
), ),
], ],

View File

@@ -97,56 +97,58 @@ class ProfileActionButtons extends StatelessWidget {
width: 1, width: 1,
), ),
), ),
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
GestureDetector( Expanded(
onTap: onCancel, child: GestureDetector(
child: Container( onTap: onCancel,
width: 143, child: Container(
height: 31, height: 31,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
border: Border.all( border: Border.all(
color: AppColors.primaryDark.withValues(alpha: 0.1), color: AppColors.primaryDark.withValues(alpha: 0.1),
width: 1, width: 1,
),
), ),
alignment: Alignment.center,
child: const Text('Cancel',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColors.primaryDark,
)),
), ),
alignment: Alignment.center,
child: const Text('Cancel',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColors.primaryDark,
)),
), ),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
GestureDetector( Expanded(
onTap: isSaving ? null : onSave, child: GestureDetector(
child: Container( onTap: isSaving ? null : onSave,
width: 143, child: Container(
height: 31, height: 31,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.accentOrange, color: AppColors.accentOrange,
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
),
alignment: Alignment.center,
child: isSaving
? const SizedBox(
width: 16,
height: 16,
child: CircularProgressIndicator(
strokeWidth: 2, color: AppColors.primaryDark),
)
: Text(saveLabel,
style: const TextStyle(
fontFamily: 'Fractul',
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColors.primaryDark,
)),
), ),
alignment: Alignment.center,
child: isSaving
? const SizedBox(
width: 16,
height: 16,
child: CircularProgressIndicator(
strokeWidth: 2, color: AppColors.primaryDark),
)
: Text(saveLabel,
style: const TextStyle(
fontFamily: 'Fractul',
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColors.primaryDark,
)),
), ),
), ),
], ],

View File

@@ -23,7 +23,7 @@ class MyApp extends ConsumerWidget {
final router = ref.watch(routerProvider); final router = ref.watch(routerProvider);
return MaterialApp.router( return MaterialApp.router(
title: 'RE-QuestN', title: 'RE-Quest',
theme: AppTheme.light, theme: AppTheme.light,
routerConfig: router, routerConfig: router,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,

View File

@@ -169,6 +169,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.4" version: "2.0.4"
cli_util:
dependency: transitive
description:
name: cli_util
sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
url: "https://pub.dev"
source: hosted
version: "0.4.2"
clock: clock:
dependency: transitive dependency: transitive
description: description:
@@ -422,6 +430,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.1"
flutter_launcher_icons:
dependency: "direct dev"
description:
name: flutter_launcher_icons
sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7"
url: "https://pub.dev"
source: hosted
version: "0.14.4"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:

View File

@@ -1,5 +1,5 @@
name: real_estate_mobile name: real_estate_mobile
description: "RE-QuestN Real Estate Mobile App" description: "RE-Quest Real Estate Mobile App"
publish_to: 'none' publish_to: 'none'
version: 1.0.0+2 version: 1.0.0+2
@@ -74,6 +74,16 @@ dev_dependencies:
# Flavors # Flavors
flutter_flavorizr: ^2.2.3 flutter_flavorizr: ^2.2.3
# App Icon
flutter_launcher_icons: ^0.14.3
flutter_launcher_icons:
android: true
ios: true
image_path: "assets/app_icon.png"
remove_alpha_ios: true
background_color: "#ffffff"
flutter: flutter:
uses-material-design: true uses-material-design: true
@@ -107,7 +117,7 @@ flavorizr:
flavors: flavors:
local: local:
app: app:
name: "RE-QuestN Local" name: "RE-Quest Local"
android: android:
applicationId: "com.requestn.real_estate_mobile.local" applicationId: "com.requestn.real_estate_mobile.local"
ios: ios:
@@ -116,7 +126,7 @@ flavorizr:
DEVELOPMENT_TEAM: JKMS87XDA9 DEVELOPMENT_TEAM: JKMS87XDA9
demo: demo:
app: app:
name: "RE-QuestN Demo" name: "RE-Quest Demo"
android: android:
applicationId: "com.requestn.real_estate_mobile.demo" applicationId: "com.requestn.real_estate_mobile.demo"
ios: ios:
@@ -125,7 +135,7 @@ flavorizr:
DEVELOPMENT_TEAM: JKMS87XDA9 DEVELOPMENT_TEAM: JKMS87XDA9
dev: dev:
app: app:
name: "RE-QuestN Dev" name: "RE-Quest Dev"
android: android:
applicationId: "com.requestn.real_estate_mobile.dev" applicationId: "com.requestn.real_estate_mobile.dev"
ios: ios: