Pārlūkot izejas kodu

更多应用界面提交

yangjia 1 mēnesi atpakaļ
vecāks
revīzija
f157af9afb

BIN
assets/images/ico_aur.png


BIN
assets/images/ico_floki.png


BIN
assets/images/ico_ftlm.png


BIN
assets/images/ico_jws.png


BIN
assets/images/ico_runes.png


BIN
assets/images/ico_tesla.png


BIN
assets/images/ico_vtf.png


BIN
assets/images/ico_zqb.png


BIN
assets/images/top_bg_app_home.png


+ 1 - 1
lib/core/config/app_config.dart

@@ -102,7 +102,7 @@ abstract class AppConfig {
   );
 
   /// 应用版本号(与 pubspec.yaml version 保持一致)
-  static const String appVersion = '4.1.4';
+  static const String appVersion = '4.1.5';
 
   /// 是否启用 Mock 模式
   static const bool enableMock = bool.fromEnvironment(

+ 21 - 0
lib/core/l10n/app_en.arb

@@ -1421,6 +1421,27 @@
   "auditStatusRejected": "Rejected",
   "applyPendingDesc": "Your broker application is under review. Please wait patiently or contact customer service.",
   "alreadyBroker": "You are already a broker",
+  "appHomeTitle": "More Apps",
+      "appHomeHotProjects": "Hot Projects",
+      "appHomeDevelopingMessage": "This feature is under development",
+      "appHomeHeroTitle": "Join quality projects",
+      "appHomeAnnualizedYieldRate": "Earn {rate} annualized yield",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+     "appHomeAnnualizedYieldPrefix": "Earn ",
+      "appHomeAnnualizedYieldSuffix": " annualized yield",
+      "appHomeExclusiveBadge": "Exclusive for iBit users",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "Tesla",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "VC Alliance",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "VTF Project",
+      "appHomeProjectFootballCoin": "Football Coin",
+      "appHomeProjectJarvis": "Jarvis",
   "rechargeStatus0": "Pending payment",
   "rechargeStatus1": "Confirming on-chain",
   "rechargeStatus2": "Completed",

+ 22 - 1
lib/core/l10n/app_hi.arb

@@ -1292,5 +1292,26 @@
   "rechargeStatus1": "ऑन-चेन पुष्टि हो रही है",
   "rechargeStatus2": "पूर्ण",
   "rechargeStatus3": "रद्द",
-  "rechargeStatus4": "विफल"
+  "rechargeStatus4": "विफल",
+  "appHomeTitle": "अधिक ऐप्स",
+      "appHomeHotProjects": "लोकप्रिय प्रोजेक्ट",
+      "appHomeDevelopingMessage": "यह सुविधा विकसित की जा रही है",
+      "appHomeHeroTitle": "उच्च गुणवत्ता वाली परियोजनाओं में शामिल हों",
+      "appHomeAnnualizedYieldRate": "{rate} वार्षिक प्रतिफल प्राप्त करें",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+    "appHomeAnnualizedYieldPrefix": "",
+      "appHomeAnnualizedYieldSuffix": " वार्षिक प्रतिफल प्राप्त करें",
+      "appHomeExclusiveBadge": "केवल iBit उपयोगकर्ताओं के लिए",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "टेस्ला",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "वीसी एलायंस",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "VTF प्रोजेक्ट",
+      "appHomeProjectFootballCoin": "फुटबॉल कॉइन",
+      "appHomeProjectJarvis": "जार्विस"
 }

+ 22 - 1
lib/core/l10n/app_id.arb

@@ -1292,5 +1292,26 @@
   "rechargeStatus1": "Mengkonfirmasi on-chain",
   "rechargeStatus2": "Selesai",
   "rechargeStatus3": "Dibatalkan",
-  "rechargeStatus4": "Gagal"
+  "rechargeStatus4": "Gagal",
+  "appHomeTitle": "Aplikasi Lainnya",
+      "appHomeHotProjects": "Proyek Populer",
+      "appHomeDevelopingMessage": "Fitur ini sedang dikembangkan",
+      "appHomeHeroTitle": "Ikuti proyek berkualitas",
+      "appHomeAnnualizedYieldRate": "Nikmati imbal hasil tahunan {rate}",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+    "appHomeAnnualizedYieldPrefix": "Nikmati imbal hasil tahunan ",
+      "appHomeAnnualizedYieldSuffix": "",
+      "appHomeExclusiveBadge": "Eksklusif untuk pengguna iBit",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "Tesla",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "Aliansi VC",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "Proyek VTF",
+      "appHomeProjectFootballCoin": "Koin Sepak Bola",
+      "appHomeProjectJarvis": "Jarvis"
 }

+ 22 - 1
lib/core/l10n/app_ja.arb

@@ -1407,5 +1407,26 @@
   "rechargeStatus1": "確認中",
   "rechargeStatus2": "完了",
   "rechargeStatus3": "キャンセル",
-  "rechargeStatus4": "失敗"
+  "rechargeStatus4": "失敗",
+  "appHomeTitle": "その他のアプリ",
+      "appHomeHotProjects": "人気プロジェクト",
+      "appHomeDevelopingMessage": "この機能は現在開発中です",
+      "appHomeHeroTitle": "優良プロジェクトに参加",
+      "appHomeAnnualizedYieldRate": "{rate} の年率収益",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+    "appHomeAnnualizedYieldPrefix": "",
+      "appHomeAnnualizedYieldSuffix": " の年率収益",
+      "appHomeExclusiveBadge": "iBitユーザー限定",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "テスラ",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "VCアライアンス",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "VTFプロジェクト",
+      "appHomeProjectFootballCoin": "サッカーコイン",
+      "appHomeProjectJarvis": "ジャービス"
 }

+ 22 - 1
lib/core/l10n/app_ko.arb

@@ -1406,5 +1406,26 @@
   "rechargeStatus1": "온체인 확인 중",
   "rechargeStatus2": "완료",
   "rechargeStatus3": "취소됨",
-  "rechargeStatus4": "실패"
+  "rechargeStatus4": "실패",
+  "appHomeTitle": "더 많은 앱",
+      "appHomeHotProjects": "인기 프로젝트",
+      "appHomeDevelopingMessage": "이 기능은 현재 개발 중입니다",
+      "appHomeHeroTitle": "우수한 프로젝트에 참여",
+      "appHomeAnnualizedYieldRate": "{rate} 연환산 수익률",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+    "appHomeAnnualizedYieldPrefix": "",
+      "appHomeAnnualizedYieldSuffix": " 연환산 수익률",
+      "appHomeExclusiveBadge": "iBit 사용자 전용",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "테슬라",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "VC 얼라이언스",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "VTF 프로젝트",
+      "appHomeProjectFootballCoin": "축구 코인",
+      "appHomeProjectJarvis": "자비스"
 }

+ 96 - 0
lib/core/l10n/app_localizations.dart

@@ -6760,6 +6760,102 @@ abstract class AppLocalizations {
   /// In zh, this message translates to:
   /// **'失败'**
   String get rechargeStatus4;
+
+  /// No description provided for @appHomeTitle.
+  ///
+  /// In zh, this message translates to:
+  /// **'更多应用'**
+  String get appHomeTitle;
+
+  /// No description provided for @appHomeHotProjects.
+  ///
+  /// In zh, this message translates to:
+  /// **'热门项目'**
+  String get appHomeHotProjects;
+
+  /// No description provided for @appHomeDevelopingMessage.
+  ///
+  /// In zh, this message translates to:
+  /// **'该功能正在开发中'**
+  String get appHomeDevelopingMessage;
+
+  /// No description provided for @appHomeHeroTitle.
+  ///
+  /// In zh, this message translates to:
+  /// **'参与优质项目'**
+  String get appHomeHeroTitle;
+
+  /// No description provided for @appHomeAnnualizedYieldRate.
+  ///
+  /// In zh, this message translates to:
+  /// **'享 {rate} 年化收益率'**
+  String appHomeAnnualizedYieldRate(Object rate);
+
+  /// No description provided for @appHomeAnnualizedYieldPrefix.
+  ///
+  /// In zh, this message translates to:
+  /// **'享 '**
+  String get appHomeAnnualizedYieldPrefix;
+
+  /// No description provided for @appHomeAnnualizedYieldSuffix.
+  ///
+  /// In zh, this message translates to:
+  /// **' 年化收益率'**
+  String get appHomeAnnualizedYieldSuffix;
+
+  /// No description provided for @appHomeExclusiveBadge.
+  ///
+  /// In zh, this message translates to:
+  /// **'iBit用户专属'**
+  String get appHomeExclusiveBadge;
+
+  /// No description provided for @appHomeProjectRunes.
+  ///
+  /// In zh, this message translates to:
+  /// **'Runes'**
+  String get appHomeProjectRunes;
+
+  /// No description provided for @appHomeProjectTesla.
+  ///
+  /// In zh, this message translates to:
+  /// **'特斯拉'**
+  String get appHomeProjectTesla;
+
+  /// No description provided for @appHomeProjectFloki.
+  ///
+  /// In zh, this message translates to:
+  /// **'Floki'**
+  String get appHomeProjectFloki;
+
+  /// No description provided for @appHomeProjectVcAlliance.
+  ///
+  /// In zh, this message translates to:
+  /// **'风投联盟'**
+  String get appHomeProjectVcAlliance;
+
+  /// No description provided for @appHomeProjectAur.
+  ///
+  /// In zh, this message translates to:
+  /// **'AUR'**
+  String get appHomeProjectAur;
+
+  /// No description provided for @appHomeProjectVtf.
+  ///
+  /// In zh, this message translates to:
+  /// **'VTF项目'**
+  String get appHomeProjectVtf;
+
+  /// No description provided for @appHomeProjectFootballCoin.
+  ///
+  /// In zh, this message translates to:
+  /// **'足球币'**
+  String get appHomeProjectFootballCoin;
+
+  /// No description provided for @appHomeProjectJarvis.
+  ///
+  /// In zh, this message translates to:
+  /// **'贾维斯'**
+  String get appHomeProjectJarvis;
 }
 
 class _AppLocalizationsDelegate

+ 50 - 0
lib/core/l10n/app_localizations_en.dart

@@ -3514,4 +3514,54 @@ class AppLocalizationsEn extends AppLocalizations {
 
   @override
   String get rechargeStatus4 => 'Failed';
+
+  @override
+  String get appHomeTitle => 'More Apps';
+
+  @override
+  String get appHomeHotProjects => 'Hot Projects';
+
+  @override
+  String get appHomeDevelopingMessage => 'This feature is under development';
+
+  @override
+  String get appHomeHeroTitle => 'Join quality projects';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return 'Earn $rate annualized yield';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => 'Earn ';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => ' annualized yield';
+
+  @override
+  String get appHomeExclusiveBadge => 'Exclusive for iBit users';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => 'Tesla';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => 'VC Alliance';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'VTF Project';
+
+  @override
+  String get appHomeProjectFootballCoin => 'Football Coin';
+
+  @override
+  String get appHomeProjectJarvis => 'Jarvis';
 }

+ 50 - 0
lib/core/l10n/app_localizations_hi.dart

@@ -3506,4 +3506,54 @@ class AppLocalizationsHi extends AppLocalizations {
 
   @override
   String get rechargeStatus4 => 'विफल';
+
+  @override
+  String get appHomeTitle => 'अधिक ऐप्स';
+
+  @override
+  String get appHomeHotProjects => 'लोकप्रिय प्रोजेक्ट';
+
+  @override
+  String get appHomeDevelopingMessage => 'यह सुविधा विकसित की जा रही है';
+
+  @override
+  String get appHomeHeroTitle => 'उच्च गुणवत्ता वाली परियोजनाओं में शामिल हों';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return '$rate वार्षिक प्रतिफल प्राप्त करें';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => '';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => ' वार्षिक प्रतिफल प्राप्त करें';
+
+  @override
+  String get appHomeExclusiveBadge => 'केवल iBit उपयोगकर्ताओं के लिए';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => 'टेस्ला';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => 'वीसी एलायंस';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'VTF प्रोजेक्ट';
+
+  @override
+  String get appHomeProjectFootballCoin => 'फुटबॉल कॉइन';
+
+  @override
+  String get appHomeProjectJarvis => 'जार्विस';
 }

+ 50 - 0
lib/core/l10n/app_localizations_id.dart

@@ -3516,4 +3516,54 @@ class AppLocalizationsId extends AppLocalizations {
 
   @override
   String get rechargeStatus4 => 'Gagal';
+
+  @override
+  String get appHomeTitle => 'Aplikasi Lainnya';
+
+  @override
+  String get appHomeHotProjects => 'Proyek Populer';
+
+  @override
+  String get appHomeDevelopingMessage => 'Fitur ini sedang dikembangkan';
+
+  @override
+  String get appHomeHeroTitle => 'Ikuti proyek berkualitas';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return 'Nikmati imbal hasil tahunan $rate';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => 'Nikmati imbal hasil tahunan ';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => '';
+
+  @override
+  String get appHomeExclusiveBadge => 'Eksklusif untuk pengguna iBit';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => 'Tesla';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => 'Aliansi VC';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'Proyek VTF';
+
+  @override
+  String get appHomeProjectFootballCoin => 'Koin Sepak Bola';
+
+  @override
+  String get appHomeProjectJarvis => 'Jarvis';
 }

+ 50 - 0
lib/core/l10n/app_localizations_ja.dart

@@ -3463,4 +3463,54 @@ class AppLocalizationsJa extends AppLocalizations {
 
   @override
   String get rechargeStatus4 => '失敗';
+
+  @override
+  String get appHomeTitle => 'その他のアプリ';
+
+  @override
+  String get appHomeHotProjects => '人気プロジェクト';
+
+  @override
+  String get appHomeDevelopingMessage => 'この機能は現在開発中です';
+
+  @override
+  String get appHomeHeroTitle => '優良プロジェクトに参加';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return '$rate の年率収益';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => '';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => ' の年率収益';
+
+  @override
+  String get appHomeExclusiveBadge => 'iBitユーザー限定';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => 'テスラ';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => 'VCアライアンス';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'VTFプロジェクト';
+
+  @override
+  String get appHomeProjectFootballCoin => 'サッカーコイン';
+
+  @override
+  String get appHomeProjectJarvis => 'ジャービス';
 }

+ 50 - 0
lib/core/l10n/app_localizations_ko.dart

@@ -3468,4 +3468,54 @@ class AppLocalizationsKo extends AppLocalizations {
 
   @override
   String get rechargeStatus4 => '실패';
+
+  @override
+  String get appHomeTitle => '더 많은 앱';
+
+  @override
+  String get appHomeHotProjects => '인기 프로젝트';
+
+  @override
+  String get appHomeDevelopingMessage => '이 기능은 현재 개발 중입니다';
+
+  @override
+  String get appHomeHeroTitle => '우수한 프로젝트에 참여';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return '$rate 연환산 수익률';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => '';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => ' 연환산 수익률';
+
+  @override
+  String get appHomeExclusiveBadge => 'iBit 사용자 전용';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => '테슬라';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => 'VC 얼라이언스';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'VTF 프로젝트';
+
+  @override
+  String get appHomeProjectFootballCoin => '축구 코인';
+
+  @override
+  String get appHomeProjectJarvis => '자비스';
 }

+ 100 - 0
lib/core/l10n/app_localizations_zh.dart

@@ -3451,6 +3451,56 @@ class AppLocalizationsZh extends AppLocalizations {
 
   @override
   String get rechargeStatus4 => '失败';
+
+  @override
+  String get appHomeTitle => '更多应用';
+
+  @override
+  String get appHomeHotProjects => '热门项目';
+
+  @override
+  String get appHomeDevelopingMessage => '该功能正在开发中';
+
+  @override
+  String get appHomeHeroTitle => '参与优质项目';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return '享 $rate 年化收益率';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => '享 ';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => ' 年化收益率';
+
+  @override
+  String get appHomeExclusiveBadge => 'iBit用户专属';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => '特斯拉';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => '风投联盟';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'VTF项目';
+
+  @override
+  String get appHomeProjectFootballCoin => '足球币';
+
+  @override
+  String get appHomeProjectJarvis => '贾维斯';
 }
 
 /// The translations for Chinese, as used in Taiwan (`zh_TW`).
@@ -6842,4 +6892,54 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
 
   @override
   String get rechargeStatus4 => '失敗';
+
+  @override
+  String get appHomeTitle => '更多應用';
+
+  @override
+  String get appHomeHotProjects => '熱門項目';
+
+  @override
+  String get appHomeDevelopingMessage => '該功能正在開發中';
+
+  @override
+  String get appHomeHeroTitle => '參與優質項目';
+
+  @override
+  String appHomeAnnualizedYieldRate(Object rate) {
+    return '享 $rate 年化收益率';
+  }
+
+  @override
+  String get appHomeAnnualizedYieldPrefix => '享 ';
+
+  @override
+  String get appHomeAnnualizedYieldSuffix => ' 年化收益率';
+
+  @override
+  String get appHomeExclusiveBadge => 'iBit用戶專屬';
+
+  @override
+  String get appHomeProjectRunes => 'Runes';
+
+  @override
+  String get appHomeProjectTesla => '特斯拉';
+
+  @override
+  String get appHomeProjectFloki => 'Floki';
+
+  @override
+  String get appHomeProjectVcAlliance => '風投聯盟';
+
+  @override
+  String get appHomeProjectAur => 'AUR';
+
+  @override
+  String get appHomeProjectVtf => 'VTF項目';
+
+  @override
+  String get appHomeProjectFootballCoin => '足球幣';
+
+  @override
+  String get appHomeProjectJarvis => '賈維斯';
 }

+ 22 - 1
lib/core/l10n/app_zh.arb

@@ -1469,5 +1469,26 @@
   "rechargeStatus1": "待链上确认",
   "rechargeStatus2": "已完成",
   "rechargeStatus3": "已取消",
-  "rechargeStatus4": "失败"
+  "rechargeStatus4": "失败",
+  "appHomeTitle": "更多应用",
+      "appHomeHotProjects": "热门项目",
+      "appHomeDevelopingMessage": "该功能正在开发中",
+      "appHomeHeroTitle": "参与优质项目",
+      "appHomeAnnualizedYieldRate": "享 {rate} 年化收益率",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+    "appHomeAnnualizedYieldPrefix": "享 ",
+      "appHomeAnnualizedYieldSuffix": " 年化收益率",
+      "appHomeExclusiveBadge": "iBit用户专属",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "特斯拉",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "风投联盟",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "VTF项目",
+      "appHomeProjectFootballCoin": "足球币",
+      "appHomeProjectJarvis": "贾维斯"
 }

+ 22 - 1
lib/core/l10n/app_zh_TW.arb

@@ -1406,5 +1406,26 @@
   "rechargeStatus1": "待鏈上確認",
   "rechargeStatus2": "已完成",
   "rechargeStatus3": "已取消",
-  "rechargeStatus4": "失敗"
+  "rechargeStatus4": "失敗",
+  "appHomeTitle": "更多應用",
+      "appHomeHotProjects": "熱門項目",
+      "appHomeDevelopingMessage": "該功能正在開發中",
+      "appHomeHeroTitle": "參與優質項目",
+      "appHomeAnnualizedYieldRate": "享 {rate} 年化收益率",
+      "@appHomeAnnualizedYieldRate": {
+        "placeholders": {
+          "rate": {}
+        }
+      },
+    "appHomeAnnualizedYieldPrefix": "享 ",
+      "appHomeAnnualizedYieldSuffix": " 年化收益率",
+      "appHomeExclusiveBadge": "iBit用戶專屬",
+      "appHomeProjectRunes": "Runes",
+      "appHomeProjectTesla": "特斯拉",
+      "appHomeProjectFloki": "Floki",
+      "appHomeProjectVcAlliance": "風投聯盟",
+      "appHomeProjectAur": "AUR",
+      "appHomeProjectVtf": "VTF項目",
+      "appHomeProjectFootballCoin": "足球幣",
+      "appHomeProjectJarvis": "賈維斯"
 }

+ 5 - 0
lib/core/router/app_router.dart

@@ -40,6 +40,7 @@ import '../../presentation/screens/auth/register_screen.dart';
 import '../../presentation/screens/auth/forgot_password_screen.dart';
 import '../../presentation/screens/auth/two_factor_screen.dart';
 import '../../presentation/screens/auth/verify_code_screen.dart';
+import '../../presentation/screens/app/app_home.dart';
 import '../../presentation/screens/user/change_password_screen.dart';
 import '../../presentation/screens/user/fund_password_screen.dart';
 import '../../presentation/screens/user/google_auth_screen.dart';
@@ -370,6 +371,10 @@ final appRouterProvider = Provider<GoRouter>((ref) {
         path: '/my-copy-trading',
         builder: (context, state) => const MyCopyTradingScreen(),
       ),
+      GoRoute(
+        path: '/app',
+        builder: (context, state) => const AppHomeScreen(),
+      ),
       GoRoute(
         path: '/trader-apply',
         builder: (context, state) => const TraderApplyScreen(),

+ 476 - 0
lib/presentation/screens/app/app_home.dart

@@ -0,0 +1,476 @@
+import 'package:flutter/material.dart';
+
+import '../../../core/l10n/app_localizations.dart';
+import '../../../core/theme/app_colors.dart';
+
+class AppHomeScreen extends StatelessWidget {
+  const AppHomeScreen({super.key});
+
+  static const _projects = <_HotProject>[
+    _HotProject(
+      id: 'runes',
+      icoImg: 'ico_runes.png',
+      shortName: 'M',
+      background: LinearGradient(
+        colors: [Color(0xFF9F7AEA), Color(0xFF5A3FE0)],
+        begin: Alignment.topLeft,
+        end: Alignment.bottomRight,
+      ),
+    ),
+    _HotProject(
+      id: 'tesla',
+      icoImg: 'ico_tesla.png',
+      shortName: 'S',
+      background: LinearGradient(
+        colors: [Color(0xFFDEE9FF), Color(0xFF7B89A8)],
+        begin: Alignment.topCenter,
+        end: Alignment.bottomCenter,
+      ),
+      textColor: Color(0xFF1E2329),
+    ),
+    _HotProject(
+      id: 'floki',
+      icoImg: 'ico_floki.png',
+      shortName: 'F',
+      background: LinearGradient(
+        colors: [Color(0xFF1E1E1E), Color(0xFFFFA726)],
+        begin: Alignment.topCenter,
+        end: Alignment.bottomCenter,
+      ),
+    ),
+    _HotProject(
+      id: 'vcAlliance',
+      icoImg: 'ico_ftlm.png',
+      shortName: 'VC',
+      background: LinearGradient(
+        colors: [Color(0xFF2490FF), Color(0xFF1D5FE6)],
+        begin: Alignment.topLeft,
+        end: Alignment.bottomRight,
+      ),
+    ),
+    _HotProject(
+      id: 'aur',
+      icoImg: 'ico_aur.png',
+      shortName: 'A',
+      background: LinearGradient(
+        colors: [Color(0xFF101E45), Color(0xFF13B9FF)],
+        begin: Alignment.topCenter,
+        end: Alignment.bottomCenter,
+      ),
+    ),
+    _HotProject(
+      id: 'vtf',
+      icoImg: 'ico_vtf.png',
+      shortName: 'VTF',
+      background: LinearGradient(
+        colors: [Color(0xFF03112E), Color(0xFF1F78FF)],
+        begin: Alignment.topLeft,
+        end: Alignment.bottomRight,
+      ),
+    ),
+    _HotProject(
+      id: 'footballCoin',
+      icoImg: 'ico_zqb.png',
+      shortName: 'FC',
+      background: LinearGradient(
+        colors: [Color(0xFFF6E7C9), Color(0xFFB5D98A)],
+        begin: Alignment.topCenter,
+        end: Alignment.bottomCenter,
+      ),
+      textColor: Color(0xFF1E2329),
+    ),
+    _HotProject(
+      id: 'jarvis',
+      icoImg: 'ico_jws.png',
+      shortName: 'AI',
+      background: LinearGradient(
+        colors: [Color(0xFFD9FFD8), Color(0xFF9BE7C2)],
+        begin: Alignment.topLeft,
+        end: Alignment.bottomRight,
+      ),
+      textColor: Color(0xFF114C3A),
+    ),
+  ];
+
+  void _handleProjectTap(BuildContext context) {
+    _showDevelopingDialog(context);
+  }
+
+  static void _showDevelopingDialog(BuildContext context) {
+    final l10n = AppLocalizations.of(context)!;
+    final isDark = Theme.of(context).brightness == Brightness.dark;
+    final dialogBg = isDark ? AppColors.darkBgSecondary : Colors.white;
+    final titleColor = isDark ? AppColors.darkTextPrimary : Colors.black;
+    final messageColor = isDark
+        ? AppColors.darkTextSecondary
+        : const Color(0xFF666666);
+    final buttonBg = isDark ? AppColors.brand : Colors.black;
+    final buttonFg = isDark ? Colors.black : Colors.white;
+
+    showDialog<void>(
+      context: context,
+      barrierDismissible: true,
+      builder: (dialogContext) => Dialog(
+        backgroundColor: dialogBg,
+        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
+        insetPadding: const EdgeInsets.symmetric(horizontal: 48, vertical: 48),
+        child: Padding(
+          padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 28),
+          child: Column(
+            mainAxisSize: MainAxisSize.min,
+            children: [
+              Text(
+                l10n.comingSoon,
+                style: TextStyle(
+                  color: titleColor,
+                  fontSize: 16,
+                  fontWeight: FontWeight.w600,
+                ),
+              ),
+              const SizedBox(height: 8),
+              Text(
+                l10n.appHomeDevelopingMessage,
+                style: TextStyle(
+                  color: messageColor,
+                  fontSize: 13,
+                ),
+              ),
+              const SizedBox(height: 20),
+              SizedBox(
+                width: double.infinity,
+                child: TextButton(
+                  onPressed: () => Navigator.of(dialogContext).pop(),
+                  style: TextButton.styleFrom(
+                    backgroundColor: buttonBg,
+                    foregroundColor: buttonFg,
+                    shape: RoundedRectangleBorder(
+                      borderRadius: BorderRadius.circular(8),
+                    ),
+                    padding: const EdgeInsets.symmetric(vertical: 12),
+                  ),
+                  child: Text(l10n.confirmLabel),
+                ),
+              ),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final l10n = AppLocalizations.of(context)!;
+    final isDark = Theme.of(context).brightness == Brightness.dark;
+    final backgroundColor = isDark ? AppColors.darkBg : Colors.white;
+    final titleColor = isDark ? AppColors.darkTextPrimary : Colors.black;
+    final sectionTitleColor = isDark ? AppColors.darkTextPrimary : Colors.black;
+
+    return Scaffold(
+      backgroundColor: backgroundColor,
+      appBar: AppBar(
+        backgroundColor: backgroundColor,
+        elevation: 0,
+        scrolledUnderElevation: 0,
+        centerTitle: true,
+        title: Text(
+          l10n.appHomeTitle,
+          style: TextStyle(
+            color: titleColor,
+            fontSize: 18,
+            fontWeight: FontWeight.w600,
+          ),
+        ),
+        leading: IconButton(
+          icon: Icon(Icons.arrow_back_ios_new, color: titleColor),
+          onPressed: () => Navigator.of(context).maybePop(),
+        ),
+      ),
+      body: SafeArea(
+        top: false,
+        child: SingleChildScrollView(
+          padding: const EdgeInsets.fromLTRB(10, 8, 10, 24),
+          child: Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              const _HeroBanner(),
+              const SizedBox(height: 28),
+              Text(
+                l10n.appHomeHotProjects,
+                style: TextStyle(
+                  color: sectionTitleColor,
+                  fontSize: 18,
+                  fontWeight: FontWeight.bold,
+                ),
+              ),
+              const SizedBox(height: 18),
+              LayoutBuilder(
+                builder: (context, constraints) {
+                  const crossAxisCount = 5;
+                  const spacing = 14.0;
+                  final tileWidth =
+                      (constraints.maxWidth - spacing * (crossAxisCount - 1)) /
+                          crossAxisCount;
+
+                  return Wrap(
+                    spacing: spacing,
+                    runSpacing: 22,
+                    children: _projects
+                        .map(
+                          (project) => SizedBox(
+                            width: tileWidth,
+                            child: _ProjectTile(
+                              label: _projectLabel(l10n, project.id),
+                              project: project,
+                              isDark: isDark,
+                              onTap: () => _handleProjectTap(context),
+                            ),
+                          ),
+                        )
+                        .toList(),
+                  );
+                },
+              ),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  String _projectLabel(AppLocalizations l10n, String id) {
+    switch (id) {
+      case 'runes':
+        return l10n.appHomeProjectRunes;
+      case 'tesla':
+        return l10n.appHomeProjectTesla;
+      case 'floki':
+        return l10n.appHomeProjectFloki;
+      case 'vcAlliance':
+        return l10n.appHomeProjectVcAlliance;
+      case 'aur':
+        return l10n.appHomeProjectAur;
+      case 'vtf':
+        return l10n.appHomeProjectVtf;
+      case 'footballCoin':
+        return l10n.appHomeProjectFootballCoin;
+      case 'jarvis':
+        return l10n.appHomeProjectJarvis;
+      default:
+        return id;
+    }
+  }
+}
+
+class _HeroBanner extends StatelessWidget {
+  const _HeroBanner();
+
+  @override
+  Widget build(BuildContext context) {
+    final l10n = AppLocalizations.of(context)!;
+
+    return Container(
+      width: double.infinity,
+      height: 200,
+      decoration: BoxDecoration(
+        borderRadius: BorderRadius.circular(20),
+        gradient: const LinearGradient(
+          colors: [Color(0xFF020202), Color(0xFF171103), Color(0xFF9A6800)],
+          begin: Alignment.centerLeft,
+          end: Alignment.centerRight,
+        ),
+        boxShadow: const [
+          BoxShadow(
+            color: Color(0x33000000),
+            blurRadius: 24,
+            offset: Offset(0, 10),
+          ),
+        ],
+      ),
+      child: ClipRRect(
+        borderRadius: BorderRadius.circular(8),
+        child: Stack(
+          children: [
+            Positioned(
+              right: -10,
+              top: -20,
+              bottom: -10,
+              child: Opacity(
+                opacity: 0.9,
+                child: Image.asset(
+                  'assets/images/top_bg_app_home.png',
+                  fit: BoxFit.cover,
+                ),
+              ),
+            ),
+            Positioned(
+              right: 0,
+              top: 0,
+              bottom: 0,
+              width: 180,
+              child: DecoratedBox(
+                decoration: BoxDecoration(
+                  gradient: RadialGradient(
+                    colors: [
+                      AppColors.brand.withValues(alpha: 0.45),
+                      Colors.transparent,
+                    ],
+                    radius: 0.95,
+                    center: const Alignment(0.6, -0.2),
+                  ),
+                ),
+              ),
+            ),
+            Padding(
+              padding: const EdgeInsets.fromLTRB(18, 18, 18, 18),
+              child: Column(
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  Container(
+                    width: 34,
+                    height: 34,
+                    decoration: BoxDecoration(
+                      color: AppColors.brand,
+                      borderRadius: BorderRadius.circular(8),
+                    ),
+                    alignment: Alignment.center,
+                    child: const Text(
+                      'iBit',
+                      style: TextStyle(
+                        color: Colors.black,
+                        fontSize: 12,
+                        fontWeight: FontWeight.w800,
+                      ),
+                    ),
+                  ),
+                  const Spacer(),
+                  Text(
+                    l10n.appHomeHeroTitle,
+                    style: const TextStyle(
+                      color: Colors.white,
+                      fontSize: 19,
+                      fontWeight: FontWeight.w700,
+                    ),
+                  ),
+                  const SizedBox(height: 6),
+                  RichText(
+                    text: TextSpan(
+                      style: const TextStyle(
+                        color: Colors.white,
+                        fontSize: 19,
+                        fontWeight: FontWeight.w700,
+                      ),
+                      children: [
+                        TextSpan(
+                          text: l10n.appHomeAnnualizedYieldPrefix,
+                        ),
+                        TextSpan(
+                          text: '666%',
+                          style: const TextStyle(
+                            color: Color(0xFFF2B713),
+                            fontSize: 22,
+                            fontWeight: FontWeight.w700,
+                          ),
+                        ),
+                        TextSpan(
+                          text: l10n.appHomeAnnualizedYieldSuffix,
+                        ),
+                      ],
+                    ),
+                  ),
+                  const SizedBox(height: 16),
+                  Container(
+                    padding: const EdgeInsets.symmetric(
+                      horizontal: 18,
+                      vertical: 5,
+                    ),
+                    decoration: BoxDecoration(
+                      border: Border.all(color: AppColors.brand, width: 1.2),
+                      borderRadius: BorderRadius.circular(22),
+                    ),
+                    child: Text(
+                      l10n.appHomeExclusiveBadge,
+                      style: const TextStyle(
+                        color: Colors.white,
+                        fontSize: 13,
+                        fontWeight: FontWeight.w600,
+                      ),
+                    ),
+                  ),
+                ],
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+}
+
+class _ProjectTile extends StatelessWidget {
+  const _ProjectTile({
+    required this.label,
+    required this.project,
+    required this.onTap,
+    required this.isDark,
+  });
+
+  final String label;
+  final _HotProject project;
+  final VoidCallback onTap;
+  final bool isDark;
+
+  @override
+  Widget build(BuildContext context) {
+    return GestureDetector(
+      onTap: onTap,
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.center,
+        children: [
+          SizedBox(
+            width: 50,
+            height: 50,
+            child: ClipRRect(
+              borderRadius: BorderRadius.circular(8),
+              child: Image.asset(
+                'assets/images/${project.icoImg}',
+                fit: BoxFit.cover,
+              ),
+            ),
+          ),
+          const SizedBox(height: 10),
+          Text(
+            label,
+            textAlign: TextAlign.center,
+            maxLines: 2,
+            overflow: TextOverflow.ellipsis,
+            style: TextStyle(
+              color: isDark
+                  ? AppColors.darkTextPrimary
+                  : AppColors.lightTextSecondary,
+              fontSize: 13,
+              fontWeight: FontWeight.w500,
+              height: 1.2,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}
+
+class _HotProject {
+  const _HotProject({
+    required this.id,
+    required this.icoImg,
+    required this.shortName,
+    required this.background,
+    this.textColor = Colors.white,
+  });
+
+  final String id;
+  final String icoImg;
+  final String shortName;
+  final Gradient background;
+  final Color textColor;
+}

+ 4 - 2
lib/presentation/screens/home/home_screen.dart

@@ -1068,7 +1068,7 @@ class _QuickActions extends ConsumerWidget {
       'forex': 'home_btn_forex',
       'app': 'home_btn_app',
     };
-    const developingKeys = {'commodity', 'stock', 'forex', 'app'};
+    const developingKeys = {'commodity', 'stock', 'forex'};
     List<Widget> buildActionItems() {
       return _actionDefs.map((action) {
         return _QuickActionItem(
@@ -1077,6 +1077,8 @@ class _QuickActions extends ConsumerWidget {
           semanticsLabel: semanticsMap[action.key]!,
           onTap: developingKeys.contains(action.key)
               ? () => _showDevelopingDialog(context)
+              : action.key == 'app'
+              ? () => context.push('/app')
               : action.key == 'broker'
                   ? () => _onBrokerTap(context, ref)
                   : () => action.useGo
@@ -1143,7 +1145,7 @@ class _QuickActionItem extends StatelessWidget {
               ),
               const SizedBox(height: 6),
               Text(
-                label,
+                label == "应用" ? '$label >' : label,
                 style: TextStyle(
                   color: cs.onSurface.withAlpha(153),
                   fontSize: 11,