From 46919dec31beeeeb05baf86c8348b361d23def81 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 3 Jul 2025 00:34:11 +0800 Subject: [PATCH] :memo: Updated about screen --- assets/i18n/en-US.json | 5 +++-- assets/i18n/zh-CN.json | 30 +++++++++++++++++++++++++++- lib/screens/about.dart | 44 +++++++++++++++++++++++++++--------------- 3 files changed, 60 insertions(+), 19 deletions(-) diff --git a/assets/i18n/en-US.json b/assets/i18n/en-US.json index 5d87751..4ea8c7c 100644 --- a/assets/i18n/en-US.json +++ b/assets/i18n/en-US.json @@ -686,8 +686,9 @@ "aboutScreenDeveloperSectionTitle": "Developer", "aboutScreenContactUsTitle": "Contact Us", "aboutScreenLicenseTitle": "License", - "aboutScreenLicenseContent": "All copyright reserved © {} Solsynth\nOpen-sourced under license GNU AGPL v3.0", - "aboutScreenCopyright": "© {} {}. All rights reserved.", + "aboutScreenLicenseContent": "GNU Affero General Public License v3.0", + "aboutScreenCopyright": "All rights reserved © Solsynth {}", + "aboutScreenMadeWith": "Made with ❤︎️ by Solar Network Team", "aboutScreenFailedToLoadPackageInfo": "Failed to load package info: {error}", "copiedToClipboard": "Copied to clipboard", "copyToClipboardTooltip": "Copy to clipboard", diff --git a/assets/i18n/zh-CN.json b/assets/i18n/zh-CN.json index 36c0f93..553cb6c 100644 --- a/assets/i18n/zh-CN.json +++ b/assets/i18n/zh-CN.json @@ -512,5 +512,33 @@ "orderId": "订单 ID", "enterOrderId": "输入您的订单 ID", "restore": "恢复", - "keyboardShortcuts": "键盘快捷键" + "keyboardShortcuts": "键盘快捷键", + "about": "关于", + "membershipCancel": "取消会员订阅", + "membershipCancelConfirm": "您确定要取消您的会员订阅?", + "membershipCancelHint": "您确定要取消您的会员订阅吗?您将不会再被收费。您的会员资格将在当前计费周期结束前保持有效。并且您在当前订阅结束之前无法重新订阅。", + "membershipCancelSuccess": "您的会员订阅已成功取消。", + "aboutScreenTitle": "关于", + "aboutScreenVersionInfo": "版本 {} ({})", + "aboutScreenAppInfoSectionTitle": "应用信息", + "aboutScreenPackageNameLabel": "包名", + "aboutScreenVersionLabel": "版本", + "aboutScreenBuildNumberLabel": "构建编号", + "aboutScreenLinksSectionTitle": "链接", + "aboutScreenPrivacyPolicyTitle": "隐私政策", + "aboutScreenTermsOfServiceTitle": "服务条款", + "aboutScreenOpenSourceLicensesTitle": "开源许可证", + "aboutScreenDeveloperSectionTitle": "开发者", + "aboutScreenContactUsTitle": "联系我们", + "aboutScreenLicenseTitle": "许可证", + "aboutScreenLicenseContent": "GNU Affero General Public License v3.0", + "aboutScreenCopyright": "版权所有 © Solsynth {}", + "aboutScreenMadeWith": "由 Solar Network Team 用 ❤︎️ 制作", + "aboutScreenFailedToLoadPackageInfo": "加载包信息失败:{error}", + "copiedToClipboard": "已复制到剪贴板", + "copyToClipboardTooltip": "复制到剪贴板", + "postForwardingTo": "转发给", + "postReplyingTo": "回复给", + "postEditing": "您正在编辑现有帖子", + "postArticle": "文章" } diff --git a/lib/screens/about.dart b/lib/screens/about.dart index b68ae85..69bf2a8 100644 --- a/lib/screens/about.dart +++ b/lib/screens/about.dart @@ -1,6 +1,7 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/pods/network.dart'; import 'package:island/services/notify.dart'; @@ -137,19 +138,19 @@ class _AboutScreenState extends ConsumerState { children: [ _buildInfoItem( context, - icon: Icons.info_outline, + icon: Symbols.info, label: 'aboutScreenPackageNameLabel'.tr(), value: _packageInfo.packageName, ), _buildInfoItem( context, - icon: Icons.update, + icon: Symbols.update, label: 'aboutScreenVersionLabel'.tr(), value: _packageInfo.version, ), _buildInfoItem( context, - icon: Icons.build, + icon: Symbols.build, label: 'aboutScreenBuildNumberLabel'.tr(), value: _packageInfo.buildNumber, ), @@ -206,7 +207,7 @@ class _AboutScreenState extends ConsumerState { children: [ _buildListTile( context, - icon: Icons.privacy_tip_outlined, + icon: Symbols.privacy_tip, title: 'aboutScreenPrivacyPolicyTitle'.tr(), onTap: () => _launchURL( @@ -215,7 +216,7 @@ class _AboutScreenState extends ConsumerState { ), _buildListTile( context, - icon: Icons.description_outlined, + icon: Symbols.description, title: 'aboutScreenTermsOfServiceTitle'.tr(), onTap: () => _launchURL( @@ -224,7 +225,7 @@ class _AboutScreenState extends ConsumerState { ), _buildListTile( context, - icon: Icons.code, + icon: Symbols.code, title: 'aboutScreenOpenSourceLicensesTitle'.tr(), onTap: () { showLicensePage( @@ -247,14 +248,14 @@ class _AboutScreenState extends ConsumerState { children: [ _buildListTile( context, - icon: Icons.email_outlined, + icon: Symbols.email, title: 'aboutScreenContactUsTitle'.tr(), subtitle: 'lily@solsynth.dev', onTap: () => _launchURL('mailto:lily@solsynth.dev'), ), _buildListTile( context, - icon: Icons.copyright, + icon: Symbols.copyright, title: 'aboutScreenLicenseTitle'.tr(), subtitle: 'aboutScreenLicenseContent'.tr( args: [DateTime.now().year.toString()], @@ -272,14 +273,25 @@ class _AboutScreenState extends ConsumerState { // Copyright Padding( padding: const EdgeInsets.all(16.0), - child: Text( - 'aboutScreenCopyright'.tr( - args: [DateTime.now().year.toString(), "Solsynth"], - ), - style: theme.textTheme.bodySmall, - textAlign: TextAlign.center, + child: Column( + children: [ + Text( + 'aboutScreenCopyright'.tr( + args: [DateTime.now().year.toString()], + ), + style: theme.textTheme.bodySmall, + textAlign: TextAlign.center, + ), + const Gap(1), + Text( + 'aboutScreenMadeWith'.tr(), + textAlign: TextAlign.center, + ).fontSize(10).opacity(0.8), + ], ), ), + + Gap(MediaQuery.of(context).padding.bottom + 16), ], ), ), @@ -341,7 +353,7 @@ class _AboutScreenState extends ConsumerState { ), if (value.startsWith('http') || value.contains('@') || copyable) IconButton( - icon: const Icon(Icons.copy, size: 16), + icon: const Icon(Symbols.content_copy, size: 16), onPressed: () { Clipboard.setData(ClipboardData(text: value)); ScaffoldMessenger.of(context).showSnackBar( @@ -373,7 +385,7 @@ class _AboutScreenState extends ConsumerState { subtitle: subtitle != null ? Text(subtitle) : null, isThreeLine: multipleLines, trailing: const Icon( - Icons.chevron_right, + Symbols.chevron_right, ).padding(top: multipleLines ? 8 : 0), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), onTap: onTap,