From 2f2a3c388962c2bb3f38b5636d89f0c51cb08f45 Mon Sep 17 00:00:00 2001 From: xkeyC <3334969096@qq.com> Date: Sat, 25 Oct 2025 18:36:09 +0800 Subject: [PATCH] feat: add FPS Support --- assets/ic_hk_fps.png | Bin 0 -> 9994 bytes lib/generated/intl/messages_en.dart | 5 + lib/generated/intl/messages_ja.dart | 5 + lib/generated/intl/messages_ru.dart | 5 + lib/generated/intl/messages_zh_CN.dart | 5 + lib/generated/intl/messages_zh_TW.dart | 5 + lib/generated/l10n.dart | 20 +++ lib/l10n/intl_en.arb | 4 + lib/l10n/intl_ja.arb | 4 + lib/l10n/intl_ru.arb | 4 + lib/l10n/intl_zh_CN.arb | 2 + lib/l10n/intl_zh_TW.arb | 2 + lib/ui/about/about_ui.dart | 167 ++++++++++++++----------- 13 files changed, 158 insertions(+), 70 deletions(-) create mode 100644 assets/ic_hk_fps.png diff --git a/assets/ic_hk_fps.png b/assets/ic_hk_fps.png new file mode 100644 index 0000000000000000000000000000000000000000..c027676ac2c9d84cf9175b657a46cfa940241a55 GIT binary patch literal 9994 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 literal 0 HcmV?d00001 diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 6bc150d..d86eda9 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -1402,6 +1402,11 @@ class MessageLookup extends MessageLookupByLibrary { "support_dev_github_star_message": MessageLookupByLibrary.simpleMessage( "You can also give my project a Star on GitHub", ), + "support_dev_hk_fps_transfer_id_copied": + MessageLookupByLibrary.simpleMessage("FPS ID copied"), + "support_dev_hk_fps_transfer_title": MessageLookupByLibrary.simpleMessage( + "Hong Kong FPS", + ), "support_dev_in_game_currency_message": MessageLookupByLibrary.simpleMessage( "You can send aUEC to me in the game as support, which will help me get a better gaming experience in limited time", ), diff --git a/lib/generated/intl/messages_ja.dart b/lib/generated/intl/messages_ja.dart index 2c84331..132dc00 100644 --- a/lib/generated/intl/messages_ja.dart +++ b/lib/generated/intl/messages_ja.dart @@ -1264,6 +1264,11 @@ class MessageLookup extends MessageLookupByLibrary { "support_dev_github_star_message": MessageLookupByLibrary.simpleMessage( "GitHubで私のプロジェクトにスターを付けることもできます", ), + "support_dev_hk_fps_transfer_id_copied": + MessageLookupByLibrary.simpleMessage("FPS IDがコピーされました"), + "support_dev_hk_fps_transfer_title": MessageLookupByLibrary.simpleMessage( + "Hong Kong FPS", + ), "support_dev_in_game_currency_message": MessageLookupByLibrary.simpleMessage( "ゲーム内でaUECを送信してサポートすることができます。これは限られた時間の中で私がより良いゲーム体験を得るのに役立ちます", diff --git a/lib/generated/intl/messages_ru.dart b/lib/generated/intl/messages_ru.dart index 6fb7085..95802f9 100644 --- a/lib/generated/intl/messages_ru.dart +++ b/lib/generated/intl/messages_ru.dart @@ -1430,6 +1430,11 @@ class MessageLookup extends MessageLookupByLibrary { "support_dev_github_star_message": MessageLookupByLibrary.simpleMessage( "Вы также можете поставить звезду моему проекту на GitHub", ), + "support_dev_hk_fps_transfer_id_copied": + MessageLookupByLibrary.simpleMessage("FPS ID скопирован"), + "support_dev_hk_fps_transfer_title": MessageLookupByLibrary.simpleMessage( + "Hong Kong FPS", + ), "support_dev_in_game_currency_message": MessageLookupByLibrary.simpleMessage( "Вы можете отправить мне aUEC в игре в качестве поддержки, это поможет мне получить лучший игровой опыт в ограниченное время", ), diff --git a/lib/generated/intl/messages_zh_CN.dart b/lib/generated/intl/messages_zh_CN.dart index ad43956..35c18f4 100644 --- a/lib/generated/intl/messages_zh_CN.dart +++ b/lib/generated/intl/messages_zh_CN.dart @@ -1209,6 +1209,11 @@ class MessageLookup extends MessageLookupByLibrary { "support_dev_github_star_message": MessageLookupByLibrary.simpleMessage( "您也可以在 GitHub 上给我的项目点个 Star", ), + "support_dev_hk_fps_transfer_id_copied": + MessageLookupByLibrary.simpleMessage("FPS ID 已复制"), + "support_dev_hk_fps_transfer_title": MessageLookupByLibrary.simpleMessage( + "香港 FPS 轉數快", + ), "support_dev_in_game_currency_message": MessageLookupByLibrary.simpleMessage( "您可以在游戏中向我发送 aUEC 作为支持,这将会帮助我在有限的时间里获得更好的游戏体验", diff --git a/lib/generated/intl/messages_zh_TW.dart b/lib/generated/intl/messages_zh_TW.dart index 9c03c6f..6e9f1cd 100644 --- a/lib/generated/intl/messages_zh_TW.dart +++ b/lib/generated/intl/messages_zh_TW.dart @@ -1215,6 +1215,11 @@ class MessageLookup extends MessageLookupByLibrary { "support_dev_github_star_message": MessageLookupByLibrary.simpleMessage( "您也可以在 GitHub 上給我的專案點個 Star", ), + "support_dev_hk_fps_transfer_id_copied": + MessageLookupByLibrary.simpleMessage("FPS ID 已複製"), + "support_dev_hk_fps_transfer_title": MessageLookupByLibrary.simpleMessage( + "香港 FPS 轉數快", + ), "support_dev_in_game_currency_message": MessageLookupByLibrary.simpleMessage( "您可以在遊戲中向我發送 aUEC 作為支持,這將會幫助我在有限的時間裡獲得更好的遊戲體驗", diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index f9496e5..188f5ec 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -5400,6 +5400,26 @@ class S { ); } + /// `Hong Kong FPS` + String get support_dev_hk_fps_transfer_title { + return Intl.message( + 'Hong Kong FPS', + name: 'support_dev_hk_fps_transfer_title', + desc: '', + args: [], + ); + } + + /// `FPS ID copied` + String get support_dev_hk_fps_transfer_id_copied { + return Intl.message( + 'FPS ID copied', + name: 'support_dev_hk_fps_transfer_id_copied', + desc: '', + args: [], + ); + } + /// `Alipay` String get support_dev_alipay { return Intl.message( diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 0dc1c40..5da7887 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -1071,6 +1071,10 @@ "@support_dev_copy_button": {}, "support_dev_in_game_currency_message": "You can send aUEC to me in the game as support, which will help me get a better gaming experience in limited time", "@support_dev_in_game_currency_message": {}, + "support_dev_hk_fps_transfer_title": "Hong Kong FPS", + "@support_dev_hk_fps_transfer_title": {}, + "support_dev_hk_fps_transfer_id_copied": "FPS ID copied", + "@support_dev_hk_fps_transfer_id_copied": {}, "support_dev_alipay": "Alipay", "@support_dev_alipay": {}, "support_dev_wechat": "WeChat", diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index 7846c3d..f4caf3a 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -1071,6 +1071,10 @@ "@support_dev_copy_button": {}, "support_dev_in_game_currency_message": "ゲーム内でaUECを送信してサポートすることができます。これは限られた時間の中で私がより良いゲーム体験を得るのに役立ちます", "@support_dev_in_game_currency_message": {}, + "support_dev_hk_fps_transfer_title": "Hong Kong FPS", + "@support_dev_hk_fps_transfer_title": {}, + "support_dev_hk_fps_transfer_id_copied": "FPS IDがコピーされました", + "@support_dev_hk_fps_transfer_id_copied": {}, "support_dev_alipay": "Alipay", "@support_dev_alipay": {}, "support_dev_wechat": "WeChat", diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 0f2e1ce..70935d0 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1071,6 +1071,10 @@ "@support_dev_copy_button": {}, "support_dev_in_game_currency_message": "Вы можете отправить мне aUEC в игре в качестве поддержки, это поможет мне получить лучший игровой опыт в ограниченное время", "@support_dev_in_game_currency_message": {}, + "support_dev_hk_fps_transfer_title": "Hong Kong FPS", + "@support_dev_hk_fps_transfer_title": {}, + "support_dev_hk_fps_transfer_id_copied": "FPS ID скопирован", + "@support_dev_hk_fps_transfer_id_copied": {}, "support_dev_alipay": "Alipay", "@support_dev_alipay": {}, "support_dev_wechat": "WeChat", diff --git a/lib/l10n/intl_zh_CN.arb b/lib/l10n/intl_zh_CN.arb index fc7bdbc..d0ea8f5 100644 --- a/lib/l10n/intl_zh_CN.arb +++ b/lib/l10n/intl_zh_CN.arb @@ -851,6 +851,8 @@ "support_dev_in_game_id_copied": "游戏ID已复制", "support_dev_copy_button": "复制", "support_dev_in_game_currency_message": "您可以在游戏中向我发送 aUEC 作为支持,这将会帮助我在有限的时间里获得更好的游戏体验", + "support_dev_hk_fps_transfer_title": "香港 FPS 轉數快", + "support_dev_hk_fps_transfer_id_copied": "FPS ID 已复制", "support_dev_alipay": "支付宝", "support_dev_wechat": "微信", "support_dev_donation_disclaimer": "* 请注意:捐赠是无偿赠与,您不会在软件体验上获得额外好处。", diff --git a/lib/l10n/intl_zh_TW.arb b/lib/l10n/intl_zh_TW.arb index a500730..56ddbf4 100644 --- a/lib/l10n/intl_zh_TW.arb +++ b/lib/l10n/intl_zh_TW.arb @@ -853,6 +853,8 @@ "support_dev_in_game_id_copied": "遊戲ID已複製", "support_dev_copy_button": "複製", "support_dev_in_game_currency_message": "您可以在遊戲中向我發送 aUEC 作為支持,這將會幫助我在有限的時間裡獲得更好的遊戲體驗", + "support_dev_hk_fps_transfer_title": "香港 FPS 轉數快", + "support_dev_hk_fps_transfer_id_copied": "FPS ID 已複製", "support_dev_alipay": "支付寶", "support_dev_wechat": "微信", "support_dev_donation_disclaimer": "* 請注意:捐贈是無償贈與,您不會在軟體體驗上獲得額外好處。", diff --git a/lib/ui/about/about_ui.dart b/lib/ui/about/about_ui.dart index 9cdf671..c7e0611 100644 --- a/lib/ui/about/about_ui.dart +++ b/lib/ui/about/about_ui.dart @@ -23,10 +23,7 @@ class AboutUI extends HookConsumerWidget { return PageView( scrollDirection: Axis.vertical, controller: pageCtrl, - children: [ - _makeAbout(context, ref, isTipTextCn, pageCtrl), - _makeDonate(context, ref, pageCtrl), - ], + children: [_makeAbout(context, ref, isTipTextCn, pageCtrl), _makeDonate(context, ref, pageCtrl)], ); } @@ -41,20 +38,22 @@ class AboutUI extends HookConsumerWidget { const SizedBox(height: 32), Image.asset("assets/app_logo.png", width: 128, height: 128), const SizedBox(height: 6), - Text(S.current.app_index_version_info(ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev"), - style: const TextStyle(fontSize: 18)), + Text( + S.current.app_index_version_info(ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev"), + style: const TextStyle(fontSize: 18), + ), const SizedBox(height: 12), Button( - onPressed: () => _onCheckUpdate(context, ref), - child: Padding( - padding: const EdgeInsets.all(4), - child: Text(S.current.about_check_update), - )), + onPressed: () => _onCheckUpdate(context, ref), + child: Padding(padding: const EdgeInsets.all(4), child: Text(S.current.about_check_update)), + ), const SizedBox(height: 32), Container( margin: const EdgeInsets.all(24), - decoration: - BoxDecoration(color: FluentTheme.of(context).cardColor, borderRadius: BorderRadius.circular(12)), + decoration: BoxDecoration( + color: FluentTheme.of(context).cardColor, + borderRadius: BorderRadius.circular(12), + ), child: Padding( padding: const EdgeInsets.all(24), child: Column( @@ -80,8 +79,9 @@ class AboutUI extends HookConsumerWidget { child: Container( width: MediaQuery.of(context).size.width * .35, decoration: BoxDecoration( - color: FluentTheme.of(context).cardColor.withValues(alpha: .06), - borderRadius: BorderRadius.circular(12)), + color: FluentTheme.of(context).cardColor.withValues(alpha: .06), + borderRadius: BorderRadius.circular(12), + ), child: IconButton( icon: Padding( padding: const EdgeInsets.all(3), @@ -104,24 +104,14 @@ class AboutUI extends HookConsumerWidget { ], ), ), - Positioned( - bottom: 12, - left: 0, - right: 0, - child: Center( - child: makeNavButton(pageCtrl, 1), - ), - ), + Positioned(bottom: 12, left: 0, right: 0, child: Center(child: makeNavButton(pageCtrl, 1))), ], ); } Widget _makeDonate(BuildContext context, WidgetRef ref, PageController pageCtrl) { final donationTypeNotifier = useState('alipay'); - final bubbleMessages = [ - S.current.support_dev_thanks_message, - S.current.support_dev_referral_code_message, - ]; + final bubbleMessages = [S.current.support_dev_thanks_message, S.current.support_dev_referral_code_message]; return Container( width: double.infinity, @@ -132,10 +122,7 @@ class AboutUI extends HookConsumerWidget { makeNavButton(pageCtrl, 0), const SizedBox(height: 12), - Text( - S.current.support_dev_title, - style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold), - ), + Text(S.current.support_dev_title, style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold)), const SizedBox(height: 32), // 聊天头像和气泡消息 @@ -198,6 +185,15 @@ class AboutUI extends HookConsumerWidget { color: const Color(0xFF12B7F5), onTap: () => donationTypeNotifier.value = 'qq', ), + _donationMethodButton( + context: context, + title: 'FPS', + icon: FontAwesomeIcons.dollarSign, + iconWidget: Image.asset("assets/ic_hk_fps.png", width: 24, height: 24), + isSelected: donationTypeNotifier.value == 'fps', + color: const Color(0xFFFF6B6B), + onTap: () => donationTypeNotifier.value = 'fps', + ), _donationMethodButton( context: context, title: 'aUEC', @@ -244,21 +240,24 @@ class AboutUI extends HookConsumerWidget { required bool isSelected, required Color color, required VoidCallback onTap, + Widget? iconWidget, }) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Button( style: ButtonStyle( - backgroundColor: WidgetStateProperty.resolveWith((states) => isSelected - ? ButtonThemeData.buttonColor(context, states).withAlpha((255.0 * 0.08).round()) - : ButtonThemeData.buttonColor(context, states).withAlpha((255.0 * 0.005).round())), + backgroundColor: WidgetStateProperty.resolveWith( + (states) => isSelected + ? ButtonThemeData.buttonColor(context, states).withAlpha((255.0 * 0.08).round()) + : ButtonThemeData.buttonColor(context, states).withAlpha((255.0 * 0.005).round()), + ), padding: WidgetStateProperty.all(EdgeInsets.symmetric(horizontal: 16, vertical: 8)), ), onPressed: onTap, child: Column( mainAxisSize: MainAxisSize.min, children: [ - Icon(icon, color: color, size: 24), + iconWidget ?? Icon(icon, color: color, size: 24), const SizedBox(height: 4), Text(title, style: TextStyle(fontSize: 12)), ], @@ -299,6 +298,45 @@ class AboutUI extends HookConsumerWidget { ); } + // 香港 FPS 转数快特殊处理 + if (type == 'fps') { + return Column( + key: ValueKey('fps'), + children: [ + Image.asset("assets/ic_hk_fps.png", width: 128, height: 128), + const SizedBox(height: 16), + Text( + S.current.support_dev_hk_fps_transfer_title, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 8), + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: FluentTheme.of(context).cardColor.withAlpha((255 * .1).round()), + borderRadius: BorderRadius.circular(8), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text("FPS ID: 122289838", style: TextStyle(fontSize: 16)), + const SizedBox(width: 12), + Button( + onPressed: () { + Clipboard.setData(const ClipboardData(text: "122289838")); + showToast(context, S.current.support_dev_hk_fps_transfer_id_copied); + }, + child: Text(S.current.support_dev_copy_button), + ), + ], + ), + ), + const SizedBox(height: 22), + Text(S.current.support_dev_in_game_currency_message, textAlign: TextAlign.start), + ], + ); + } + // UEC 游戏内捐赠也特殊处理 if (type == 'uec') { return Column( @@ -306,8 +344,10 @@ class AboutUI extends HookConsumerWidget { children: [ Image.asset("assets/sc_logo.png", width: 128, height: 128), const SizedBox(height: 16), - Text(S.current.support_dev_in_game_currency_title, - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), + Text( + S.current.support_dev_in_game_currency_title, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), const SizedBox(height: 8), Container( padding: const EdgeInsets.all(16), @@ -327,15 +367,12 @@ class AboutUI extends HookConsumerWidget { showToast(context, S.current.support_dev_in_game_id_copied); }, child: Text(S.current.support_dev_copy_button), - ) + ), ], ), ), const SizedBox(height: 22), - Text( - S.current.support_dev_in_game_currency_message, - textAlign: TextAlign.start, - ), + Text(S.current.support_dev_in_game_currency_message, textAlign: TextAlign.start), ], ); } @@ -373,17 +410,11 @@ class AboutUI extends HookConsumerWidget { width: 200, height: 200, padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8), - ), + decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)), child: QrImageView(data: qrData), ), const SizedBox(height: 16), - Text( - S.current.support_dev_donation_disclaimer, - style: TextStyle(fontSize: 16), - ), + Text(S.current.support_dev_donation_disclaimer, style: TextStyle(fontSize: 16)), ], ); } @@ -452,7 +483,8 @@ class AboutUI extends HookConsumerWidget { ), onPressed: () { launchUrlString( - "https://qm.qq.com/cgi-bin/qm/qr?k=TdyR3QU-x77OeD0NQ5w--F0uiNxPq-Tn&jump_from=webapi&authKey=m8s5GhF/7bRCvm5vI4aNl7RQEx5KOViwkzzIl54K+u9w2hzFpr9N/3avG4W/HaVS"); + "https://qm.qq.com/cgi-bin/qm/qr?k=TdyR3QU-x77OeD0NQ5w--F0uiNxPq-Tn&jump_from=webapi&authKey=m8s5GhF/7bRCvm5vI4aNl7RQEx5KOViwkzzIl54K+u9w2hzFpr9N/3avG4W/HaVS", + ); }, ), const SizedBox(width: 24), @@ -520,8 +552,11 @@ class AboutUI extends HookConsumerWidget { GridItemAnimator( index: buildIndex++, child: makeAnalyticsItem( - context: context, name: item["Type"] as String, value: item["Count"] as int), - ) + context: context, + name: item["Type"] as String, + value: item["Count"] as int, + ), + ), ], ); }, @@ -535,31 +570,26 @@ class AboutUI extends HookConsumerWidget { "firstLaunch": S.current.about_analytics_total_users, "install_localization": S.current.about_analytics_install_translation, "performance_apply": S.current.about_analytics_performance_optimization, - "p4k_download": S.current.about_analytics_p4k_redirection + "p4k_download": S.current.about_analytics_p4k_redirection, }; return Container( padding: const EdgeInsets.all(12), margin: const EdgeInsets.only(left: 18, right: 18), decoration: BoxDecoration( - color: FluentTheme.of(context).cardColor.withValues(alpha: .06), borderRadius: BorderRadius.circular(12)), + color: FluentTheme.of(context).cardColor.withValues(alpha: .06), + borderRadius: BorderRadius.circular(12), + ), child: Column( children: [ - Text( - names[name] ?? name, - style: TextStyle(fontSize: 13, color: Colors.white.withValues(alpha: .6)), - ), + Text(names[name] ?? name, style: TextStyle(fontSize: 13, color: Colors.white.withValues(alpha: .6))), const SizedBox(height: 4), Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ - FlowNumberText( - targetValue: value, - style: const TextStyle( - fontSize: 20, - ), - ), + FlowNumberText(targetValue: value, style: const TextStyle(fontSize: 20)), Text( - " ${name == "firstLaunch" ? S.current.about_analytics_units_user : S.current.about_analytics_units_times}"), + " ${name == "firstLaunch" ? S.current.about_analytics_units_user : S.current.about_analytics_units_times}", + ), ], ), ], @@ -599,10 +629,7 @@ class ChatBubble extends StatelessWidget { bottomRight: Radius.circular(18), ), ), - child: Text( - message, - style: TextStyle(fontSize: 14), - ), + child: Text(message, style: TextStyle(fontSize: 14)), ); } }