feat: User Agreement and Privacy Policy Dialog

This commit is contained in:
xkeyC 2024-03-31 14:50:27 +08:00
parent ef715d569f
commit 494ae6468d
19 changed files with 127 additions and 34 deletions

View File

@ -43,6 +43,7 @@ class AppGlobalState with _$AppGlobalState {
AppVersionData? networkVersionData, AppVersionData? networkVersionData,
@Default(ThemeConf()) ThemeConf themeConf, @Default(ThemeConf()) ThemeConf themeConf,
Locale? appLocale, Locale? appLocale,
Box? appConfBox,
}) = _AppGlobalState; }) = _AppGlobalState;
} }
@ -129,6 +130,7 @@ class AppGlobalModel extends _$AppGlobalModel {
try { try {
Hive.init("$applicationSupportDir/db"); Hive.init("$applicationSupportDir/db");
final box = await Hive.openBox("app_conf"); final box = await Hive.openBox("app_conf");
state = state.copyWith(appConfBox: box);
if (box.get("install_id", defaultValue: "") == "") { if (box.get("install_id", defaultValue: "") == "") {
await box.put("install_id", const Uuid().v4()); await box.put("install_id", const Uuid().v4());
AnalyticsApi.touch("firstLaunch"); AnalyticsApi.touch("firstLaunch");
@ -153,7 +155,7 @@ class AppGlobalModel extends _$AppGlobalModel {
try { try {
await SystemHelper.initPowershellPath(); await SystemHelper.initPowershellPath();
dPrint("---- Powershell init -----"); dPrint("---- Powershell init -----");
}catch (e){ } catch (e) {
dPrint("powershell init failed : $e"); dPrint("powershell init failed : $e");
} }

View File

@ -22,6 +22,7 @@ mixin _$AppGlobalState {
AppVersionData? get networkVersionData => throw _privateConstructorUsedError; AppVersionData? get networkVersionData => throw _privateConstructorUsedError;
ThemeConf get themeConf => throw _privateConstructorUsedError; ThemeConf get themeConf => throw _privateConstructorUsedError;
Locale? get appLocale => throw _privateConstructorUsedError; Locale? get appLocale => throw _privateConstructorUsedError;
Box<dynamic>? get appConfBox => throw _privateConstructorUsedError;
@JsonKey(ignore: true) @JsonKey(ignore: true)
$AppGlobalStateCopyWith<AppGlobalState> get copyWith => $AppGlobalStateCopyWith<AppGlobalState> get copyWith =>
@ -40,7 +41,8 @@ abstract class $AppGlobalStateCopyWith<$Res> {
String? applicationBinaryModuleDir, String? applicationBinaryModuleDir,
AppVersionData? networkVersionData, AppVersionData? networkVersionData,
ThemeConf themeConf, ThemeConf themeConf,
Locale? appLocale}); Locale? appLocale,
Box<dynamic>? appConfBox});
$ThemeConfCopyWith<$Res> get themeConf; $ThemeConfCopyWith<$Res> get themeConf;
} }
@ -64,6 +66,7 @@ class _$AppGlobalStateCopyWithImpl<$Res, $Val extends AppGlobalState>
Object? networkVersionData = freezed, Object? networkVersionData = freezed,
Object? themeConf = null, Object? themeConf = null,
Object? appLocale = freezed, Object? appLocale = freezed,
Object? appConfBox = freezed,
}) { }) {
return _then(_value.copyWith( return _then(_value.copyWith(
deviceUUID: freezed == deviceUUID deviceUUID: freezed == deviceUUID
@ -90,6 +93,10 @@ class _$AppGlobalStateCopyWithImpl<$Res, $Val extends AppGlobalState>
? _value.appLocale ? _value.appLocale
: appLocale // ignore: cast_nullable_to_non_nullable : appLocale // ignore: cast_nullable_to_non_nullable
as Locale?, as Locale?,
appConfBox: freezed == appConfBox
? _value.appConfBox
: appConfBox // ignore: cast_nullable_to_non_nullable
as Box<dynamic>?,
) as $Val); ) as $Val);
} }
@ -116,7 +123,8 @@ abstract class _$$AppGlobalStateImplCopyWith<$Res>
String? applicationBinaryModuleDir, String? applicationBinaryModuleDir,
AppVersionData? networkVersionData, AppVersionData? networkVersionData,
ThemeConf themeConf, ThemeConf themeConf,
Locale? appLocale}); Locale? appLocale,
Box<dynamic>? appConfBox});
@override @override
$ThemeConfCopyWith<$Res> get themeConf; $ThemeConfCopyWith<$Res> get themeConf;
@ -139,6 +147,7 @@ class __$$AppGlobalStateImplCopyWithImpl<$Res>
Object? networkVersionData = freezed, Object? networkVersionData = freezed,
Object? themeConf = null, Object? themeConf = null,
Object? appLocale = freezed, Object? appLocale = freezed,
Object? appConfBox = freezed,
}) { }) {
return _then(_$AppGlobalStateImpl( return _then(_$AppGlobalStateImpl(
deviceUUID: freezed == deviceUUID deviceUUID: freezed == deviceUUID
@ -165,6 +174,10 @@ class __$$AppGlobalStateImplCopyWithImpl<$Res>
? _value.appLocale ? _value.appLocale
: appLocale // ignore: cast_nullable_to_non_nullable : appLocale // ignore: cast_nullable_to_non_nullable
as Locale?, as Locale?,
appConfBox: freezed == appConfBox
? _value.appConfBox
: appConfBox // ignore: cast_nullable_to_non_nullable
as Box<dynamic>?,
)); ));
} }
} }
@ -178,7 +191,8 @@ class _$AppGlobalStateImpl implements _AppGlobalState {
this.applicationBinaryModuleDir, this.applicationBinaryModuleDir,
this.networkVersionData, this.networkVersionData,
this.themeConf = const ThemeConf(), this.themeConf = const ThemeConf(),
this.appLocale}); this.appLocale,
this.appConfBox});
@override @override
final String? deviceUUID; final String? deviceUUID;
@ -193,10 +207,12 @@ class _$AppGlobalStateImpl implements _AppGlobalState {
final ThemeConf themeConf; final ThemeConf themeConf;
@override @override
final Locale? appLocale; final Locale? appLocale;
@override
final Box<dynamic>? appConfBox;
@override @override
String toString() { String toString() {
return 'AppGlobalState(deviceUUID: $deviceUUID, applicationSupportDir: $applicationSupportDir, applicationBinaryModuleDir: $applicationBinaryModuleDir, networkVersionData: $networkVersionData, themeConf: $themeConf, appLocale: $appLocale)'; return 'AppGlobalState(deviceUUID: $deviceUUID, applicationSupportDir: $applicationSupportDir, applicationBinaryModuleDir: $applicationBinaryModuleDir, networkVersionData: $networkVersionData, themeConf: $themeConf, appLocale: $appLocale, appConfBox: $appConfBox)';
} }
@override @override
@ -217,7 +233,9 @@ class _$AppGlobalStateImpl implements _AppGlobalState {
(identical(other.themeConf, themeConf) || (identical(other.themeConf, themeConf) ||
other.themeConf == themeConf) && other.themeConf == themeConf) &&
(identical(other.appLocale, appLocale) || (identical(other.appLocale, appLocale) ||
other.appLocale == appLocale)); other.appLocale == appLocale) &&
(identical(other.appConfBox, appConfBox) ||
other.appConfBox == appConfBox));
} }
@override @override
@ -228,7 +246,8 @@ class _$AppGlobalStateImpl implements _AppGlobalState {
applicationBinaryModuleDir, applicationBinaryModuleDir,
networkVersionData, networkVersionData,
themeConf, themeConf,
appLocale); appLocale,
appConfBox);
@JsonKey(ignore: true) @JsonKey(ignore: true)
@override @override
@ -245,7 +264,8 @@ abstract class _AppGlobalState implements AppGlobalState {
final String? applicationBinaryModuleDir, final String? applicationBinaryModuleDir,
final AppVersionData? networkVersionData, final AppVersionData? networkVersionData,
final ThemeConf themeConf, final ThemeConf themeConf,
final Locale? appLocale}) = _$AppGlobalStateImpl; final Locale? appLocale,
final Box<dynamic>? appConfBox}) = _$AppGlobalStateImpl;
@override @override
String? get deviceUUID; String? get deviceUUID;
@ -260,6 +280,8 @@ abstract class _AppGlobalState implements AppGlobalState {
@override @override
Locale? get appLocale; Locale? get appLocale;
@override @override
Box<dynamic>? get appConfBox;
@override
@JsonKey(ignore: true) @JsonKey(ignore: true)
_$$AppGlobalStateImplCopyWith<_$AppGlobalStateImpl> get copyWith => _$$AppGlobalStateImplCopyWith<_$AppGlobalStateImpl> get copyWith =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;

View File

@ -20,7 +20,7 @@ final routerProvider = AutoDisposeProvider<GoRouter>.internal(
); );
typedef RouterRef = AutoDisposeProviderRef<GoRouter>; typedef RouterRef = AutoDisposeProviderRef<GoRouter>;
String _$appGlobalModelHash() => r'9c114910aed546bfd469c8bbfa50cdd4a5be5028'; String _$appGlobalModelHash() => r'ae7f6704a80297ac3e0f70412c676a1829046831';
/// See also [AppGlobalModel]. /// See also [AppGlobalModel].
@ProviderFor(AppGlobalModel) @ProviderFor(AppGlobalModel)

View File

@ -1,4 +1,5 @@
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive/hive.dart';
import 'package:starcitizen_doctor/app.dart'; import 'package:starcitizen_doctor/app.dart';
extension ProviderExtension on AutoDisposeNotifier { extension ProviderExtension on AutoDisposeNotifier {
@ -6,4 +7,6 @@ extension ProviderExtension on AutoDisposeNotifier {
ref.read(appGlobalModelProvider.notifier); ref.read(appGlobalModelProvider.notifier);
AppGlobalState get appGlobalState => ref.read(appGlobalModelProvider); AppGlobalState get appGlobalState => ref.read(appGlobalModelProvider);
Box<dynamic>? get appConfBox => appGlobalState.appConfBox;
} }

View File

@ -151,7 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
final messages = _notInlinedMessages(_notInlinedMessages); final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
"about_action_email": "about_action_email":
MessageLookupByLibrary.simpleMessage("Email: scbox@xkeyc.com"), MessageLookupByLibrary.simpleMessage("Email: xkeyc@qq.com"),
"about_action_open_source": "about_action_open_source":
MessageLookupByLibrary.simpleMessage("Open source"), MessageLookupByLibrary.simpleMessage("Open source"),
"about_action_qq_group": "about_action_qq_group":
@ -215,6 +215,10 @@ class MessageLookup extends MessageLookupByLibrary {
"It is detection availability, which may take a little time ..."), "It is detection availability, which may take a little time ..."),
"app_splash_checking_for_updates": "app_splash_checking_for_updates":
MessageLookupByLibrary.simpleMessage("Inspection and update ..."), MessageLookupByLibrary.simpleMessage("Inspection and update ..."),
"app_splash_dialog_u_a_p_p": MessageLookupByLibrary.simpleMessage(
"User Agreement and Privacy Policy"),
"app_splash_dialog_u_a_p_p_content": MessageLookupByLibrary.simpleMessage(
"Thank you for choosing the SC Chinese box. We are committed to providing you with a safe, convenient and reliable experience. Before you start using your application, please read and agree to the following:\n\n 1. This application is an open source software under the GNU General Public License V3.0 protocol. You can use, modify, and distribute this software freely under the premise of obeying the agreement. Our source code is located at: [github.com/starCitizentoolBox/app] (https://github.com/starCitizantoolBox/app).\n2. The copyright of the Internet content in this application (including but not limited to localized documents, tool websites, news, videos, etc.) is created by its authors and is not part of GPL. Please use it under the corresponding authorization agreement.\n3. The official free release channels for this application are: [Microsoft App Store] (https://apps.microsoft.com/detail/9NF3SWFWNKL1) and [Official Website of Star Citizen Chinese] ), If you get from other third parties, please identify it carefully to avoid suffering from property losses.\n4. This application will send anonymous statistics to our server during use to improve software quality, and we will not collect any personal privacy information of your personal privacy.\n5. This application is supported by the community and has no direct connection with Cloud Imperium Games or other third -party commercial companies.\n6. We provide limited community support. If necessary, please go to the page to learn how to contact us."),
"app_upgrade_action_next_time": "app_upgrade_action_next_time":
MessageLookupByLibrary.simpleMessage("Next time"), MessageLookupByLibrary.simpleMessage("Next time"),
"app_upgrade_action_update_now": "app_upgrade_action_update_now":

View File

@ -139,7 +139,7 @@ class MessageLookup extends MessageLookupByLibrary {
final messages = _notInlinedMessages(_notInlinedMessages); final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
"about_action_email": "about_action_email":
MessageLookupByLibrary.simpleMessage("邮箱: scbox@xkeyc.com"), MessageLookupByLibrary.simpleMessage("邮箱: xkeyc@qq.com"),
"about_action_open_source": MessageLookupByLibrary.simpleMessage("开源"), "about_action_open_source": MessageLookupByLibrary.simpleMessage("开源"),
"about_action_qq_group": "about_action_qq_group":
MessageLookupByLibrary.simpleMessage("QQ群: 940696487"), MessageLookupByLibrary.simpleMessage("QQ群: 940696487"),
@ -193,6 +193,10 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("正在检测可用性,这可能需要一点时间..."), MessageLookupByLibrary.simpleMessage("正在检测可用性,这可能需要一点时间..."),
"app_splash_checking_for_updates": "app_splash_checking_for_updates":
MessageLookupByLibrary.simpleMessage("正在检查更新..."), MessageLookupByLibrary.simpleMessage("正在检查更新..."),
"app_splash_dialog_u_a_p_p":
MessageLookupByLibrary.simpleMessage("用户协议与隐私政策"),
"app_splash_dialog_u_a_p_p_content": MessageLookupByLibrary.simpleMessage(
"感谢您选择 SC汉化盒子 ,我们致力于为您提供 安全、便捷、可靠的使用体验,在您开始使用应用前,请先阅读并同意以下内容:\n\n 1. 本应用 为 GNU 通用公共许可证 v3.0 协议下的开源软件,您可以在遵守协议的前提下自由使用、修改、分发本软件。我们的源代码位于:[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)。 \n2. 本应用中的互联网内容(包括但不限于 本地化文件、工具网站、新闻、视频 等)版权由其作者创作所有,不属于 GPL 的一部分,请在遵守对应的授权协议下使用。\n3. 本应用的官方免费发布渠道为:[微软应用商店](https://apps.microsoft.com/detail/9NF3SWFWNKL1) 与 [星际公民汉化组官网](https://www.starcitizenzw.com/) ,若您从其他第三方处获得,请仔细甄别,以免遭受财产损失。\n4. 本应用在使用过程中会向我们的服务器发送匿名的统计数据,用于改进软件质量,我们不会收集您的任何个人隐私信息。 \n5. 本应用由社区提供支持,与 Cloud Imperium Games 或 其他第三方商业公司 无直接关联。\n6. 我们提供有限的社区支持,如有需要,请前往关于页面了解如何联系我们。"),
"app_upgrade_action_next_time": "app_upgrade_action_next_time":
MessageLookupByLibrary.simpleMessage("下次吧"), MessageLookupByLibrary.simpleMessage("下次吧"),
"app_upgrade_action_update_now": "app_upgrade_action_update_now":

View File

@ -139,7 +139,7 @@ class MessageLookup extends MessageLookupByLibrary {
final messages = _notInlinedMessages(_notInlinedMessages); final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
"about_action_email": "about_action_email":
MessageLookupByLibrary.simpleMessage("郵箱: scbox@xkeyc.com"), MessageLookupByLibrary.simpleMessage("郵箱: xkeyc@qq.com"),
"about_action_open_source": MessageLookupByLibrary.simpleMessage("開源"), "about_action_open_source": MessageLookupByLibrary.simpleMessage("開源"),
"about_action_qq_group": "about_action_qq_group":
MessageLookupByLibrary.simpleMessage("QQ群: 940696487"), MessageLookupByLibrary.simpleMessage("QQ群: 940696487"),
@ -193,6 +193,10 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("正在檢查可用性,這可能需要一點時間..."), MessageLookupByLibrary.simpleMessage("正在檢查可用性,這可能需要一點時間..."),
"app_splash_checking_for_updates": "app_splash_checking_for_updates":
MessageLookupByLibrary.simpleMessage("正在檢查更新..."), MessageLookupByLibrary.simpleMessage("正在檢查更新..."),
"app_splash_dialog_u_a_p_p":
MessageLookupByLibrary.simpleMessage("用戶協議與隱私政策"),
"app_splash_dialog_u_a_p_p_content": MessageLookupByLibrary.simpleMessage(
"感謝您選擇 SC漢化盒子 ,我們致力於為您提供 安全、便捷、可靠的使用體驗,在您開始使用應用前,請先閱讀並同意以下內容:\n\n 1. 本應用 為 GNU 通用公共許可證 v3.0 協議下的開源軟件,您可以在遵守協議的前提下自由使用、修改、分發本軟件。我們的源代碼位於:[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)。\n2. 本應用中的互聯網內容(包括但不限於 本地化文件、工具網站、新聞、視頻 等)版權由其作者創作所有,不屬於 GPL 的一部分,請在遵守對應的授權協議下使用。\n3. 本應用的官方免費發布渠道為:[微軟應用商店](https://apps.microsoft.com/detail/9NF3SWFWNKL1) 與[星際公民漢化組官網](https://www.starcitizenzw.com/ ) ,若您從其他第三方處獲得,請仔細甄別,以免遭受財產損失。\n4. 本應用在使用過程中會向我們的服務器發送匿名的統計數據,用於改進軟件質量,我們不會收集您的任何個人隱私信息。\n5. 本應用由社區提供支持,與 Cloud Imperium Games 或 其他第三方商業公司 無直接關聯。\n6. 我們提供有限的社區支持,如有需要,請前往關於頁面了解如何联系我們。"),
"app_upgrade_action_next_time": "app_upgrade_action_next_time":
MessageLookupByLibrary.simpleMessage("下次吧"), MessageLookupByLibrary.simpleMessage("下次吧"),
"app_upgrade_action_update_now": "app_upgrade_action_update_now":

View File

@ -130,10 +130,10 @@ class S {
); );
} }
/// `Email: scbox@xkeyc.com` /// `Email: xkeyc@qq.com`
String get about_action_email { String get about_action_email {
return Intl.message( return Intl.message(
'Email: scbox@xkeyc.com', 'Email: xkeyc@qq.com',
name: 'about_action_email', name: 'about_action_email',
desc: '', desc: '',
args: [], args: [],
@ -3692,6 +3692,26 @@ class S {
args: [], args: [],
); );
} }
/// `User Agreement and Privacy Policy`
String get app_splash_dialog_u_a_p_p {
return Intl.message(
'User Agreement and Privacy Policy',
name: 'app_splash_dialog_u_a_p_p',
desc: '',
args: [],
);
}
/// `Thank you for choosing the SC Chinese box. We are committed to providing you with a safe, convenient and reliable experience. Before you start using your application, please read and agree to the following:\n\n 1. This application is an open source software under the GNU General Public License V3.0 protocol. You can use, modify, and distribute this software freely under the premise of obeying the agreement. Our source code is located at: [github.com/starCitizentoolBox/app] (https://github.com/starCitizantoolBox/app).\n2. The copyright of the Internet content in this application (including but not limited to localized documents, tool websites, news, videos, etc.) is created by its authors and is not part of GPL. Please use it under the corresponding authorization agreement.\n3. The official free release channels for this application are: [Microsoft App Store] (https://apps.microsoft.com/detail/9NF3SWFWNKL1) and [Official Website of Star Citizen Chinese] ), If you get from other third parties, please identify it carefully to avoid suffering from property losses.\n4. This application will send anonymous statistics to our server during use to improve software quality, and we will not collect any personal privacy information of your personal privacy.\n5. This application is supported by the community and has no direct connection with Cloud Imperium Games or other third -party commercial companies.\n6. We provide limited community support. If necessary, please go to the page to learn how to contact us.`
String get app_splash_dialog_u_a_p_p_content {
return Intl.message(
'Thank you for choosing the SC Chinese box. We are committed to providing you with a safe, convenient and reliable experience. Before you start using your application, please read and agree to the following:\n\n 1. This application is an open source software under the GNU General Public License V3.0 protocol. You can use, modify, and distribute this software freely under the premise of obeying the agreement. Our source code is located at: [github.com/starCitizentoolBox/app] (https://github.com/starCitizantoolBox/app).\n2. The copyright of the Internet content in this application (including but not limited to localized documents, tool websites, news, videos, etc.) is created by its authors and is not part of GPL. Please use it under the corresponding authorization agreement.\n3. The official free release channels for this application are: [Microsoft App Store] (https://apps.microsoft.com/detail/9NF3SWFWNKL1) and [Official Website of Star Citizen Chinese] ), If you get from other third parties, please identify it carefully to avoid suffering from property losses.\n4. This application will send anonymous statistics to our server during use to improve software quality, and we will not collect any personal privacy information of your personal privacy.\n5. This application is supported by the community and has no direct connection with Cloud Imperium Games or other third -party commercial companies.\n6. We provide limited community support. If necessary, please go to the page to learn how to contact us.',
name: 'app_splash_dialog_u_a_p_p_content',
desc: '',
args: [],
);
}
} }
class AppLocalizationDelegate extends LocalizationsDelegate<S> { class AppLocalizationDelegate extends LocalizationsDelegate<S> {

View File

@ -4,6 +4,7 @@
"@app_language_name": {}, "@app_language_name": {},
"app_language_code": "en", "app_language_code": "en",
"@app_language_code": {}, "@app_language_code": {},
"@auto_translate_locale": "en",
"app_index_version_info": "SCToolBox V {v0} {v1}", "app_index_version_info": "SCToolBox V {v0} {v1}",
"@app_index_version_info": {}, "@app_index_version_info": {},
"app_shortcut_name": "SCToolBox.lnk", "app_shortcut_name": "SCToolBox.lnk",
@ -16,7 +17,7 @@
"@about_online_feedback": {}, "@about_online_feedback": {},
"about_action_qq_group": "QQ group: 940696487", "about_action_qq_group": "QQ group: 940696487",
"@about_action_qq_group": {}, "@about_action_qq_group": {},
"about_action_email": "Email: scbox@xkeyc.com", "about_action_email": "Email: xkeyc@qq.com",
"@about_action_email": {}, "@about_action_email": {},
"about_action_open_source": "Open source", "about_action_open_source": "Open source",
"@about_action_open_source": {}, "@about_action_open_source": {},
@ -727,5 +728,7 @@
"home_holiday_countdown_in_progress": "In progress", "home_holiday_countdown_in_progress": "In progress",
"@home_holiday_countdown_in_progress": {}, "@home_holiday_countdown_in_progress": {},
"app_common_loading_images": "Loading image ...", "app_common_loading_images": "Loading image ...",
"@app_common_loading_images": {} "@app_common_loading_images": {},
} "app_splash_dialog_u_a_p_p": "User Agreement and Privacy Policy",
"app_splash_dialog_u_a_p_p_content": "Thank you for choosing the SC Chinese box. We are committed to providing you with a safe, convenient and reliable experience. Before you start using your application, please read and agree to the following:\n\n 1. This application is an open source software under the GNU General Public License V3.0 protocol. You can use, modify, and distribute this software freely under the premise of obeying the agreement. Our source code is located at: [github.com/starCitizentoolBox/app] (https://github.com/starCitizantoolBox/app).\n2. The copyright of the Internet content in this application (including but not limited to localized documents, tool websites, news, videos, etc.) is created by its authors and is not part of GPL. Please use it under the corresponding authorization agreement.\n3. The official free release channels for this application are: [Microsoft App Store] (https://apps.microsoft.com/detail/9NF3SWFWNKL1) and [Official Website of Star Citizen Chinese] ), If you get from other third parties, please identify it carefully to avoid suffering from property losses.\n4. This application will send anonymous statistics to our server during use to improve software quality, and we will not collect any personal privacy information of your personal privacy.\n5. This application is supported by the community and has no direct connection with Cloud Imperium Games or other third -party commercial companies.\n6. We provide limited community support. If necessary, please go to the page to learn how to contact us."
}

View File

@ -16,7 +16,7 @@
"@about_online_feedback": {}, "@about_online_feedback": {},
"about_action_qq_group": "QQ群: 940696487", "about_action_qq_group": "QQ群: 940696487",
"@about_action_qq_group": {}, "@about_action_qq_group": {},
"about_action_email": "邮箱: scbox@xkeyc.com", "about_action_email": "邮箱: xkeyc@qq.com",
"@about_action_email": {}, "@about_action_email": {},
"about_action_open_source": "开源", "about_action_open_source": "开源",
"@about_action_open_source": {}, "@about_action_open_source": {},
@ -698,5 +698,7 @@
"settings_app_language_switch_info": "切换应用显示语言", "settings_app_language_switch_info": "切换应用显示语言",
"home_holiday_countdown_days": "{v0}天 ", "home_holiday_countdown_days": "{v0}天 ",
"home_holiday_countdown_in_progress": "正在进行中", "home_holiday_countdown_in_progress": "正在进行中",
"app_common_loading_images": "加载图片..." "app_common_loading_images": "加载图片...",
"app_splash_dialog_u_a_p_p": "用户协议与隐私政策",
"app_splash_dialog_u_a_p_p_content": "感谢您选择 SC汉化盒子 ,我们致力于为您提供 安全、便捷、可靠的使用体验,在您开始使用应用前,请先阅读并同意以下内容:\n\n 1. 本应用 为 GNU 通用公共许可证 v3.0 协议下的开源软件,您可以在遵守协议的前提下自由使用、修改、分发本软件。我们的源代码位于:[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)。 \n2. 本应用中的互联网内容(包括但不限于 本地化文件、工具网站、新闻、视频 等)版权由其作者创作所有,不属于 GPL 的一部分,请在遵守对应的授权协议下使用。\n3. 本应用的官方免费发布渠道为:[微软应用商店](https://apps.microsoft.com/detail/9NF3SWFWNKL1) 与 [星际公民汉化组官网](https://www.starcitizenzw.com/) ,若您从其他第三方处获得,请仔细甄别,以免遭受财产损失。\n4. 本应用在使用过程中会向我们的服务器发送匿名的统计数据,用于改进软件质量,我们不会收集您的任何个人隐私信息。 \n5. 本应用由社区提供支持,与 Cloud Imperium Games 或 其他第三方商业公司 无直接关联。\n6. 我们提供有限的社区支持,如有需要,请前往关于页面了解如何联系我们。"
} }

View File

@ -4,6 +4,7 @@
"@app_language_name": {}, "@app_language_name": {},
"app_language_code": "zh_TW", "app_language_code": "zh_TW",
"@app_language_code": {}, "@app_language_code": {},
"@auto_translate_locale": "zh-tw",
"app_index_version_info": "SC漢化盒子 V{v0} {v1}", "app_index_version_info": "SC漢化盒子 V{v0} {v1}",
"@app_index_version_info": {}, "@app_index_version_info": {},
"app_shortcut_name": "SC漢化盒子DEV.lnk", "app_shortcut_name": "SC漢化盒子DEV.lnk",
@ -16,7 +17,7 @@
"@about_online_feedback": {}, "@about_online_feedback": {},
"about_action_qq_group": "QQ群: 940696487", "about_action_qq_group": "QQ群: 940696487",
"@about_action_qq_group": {}, "@about_action_qq_group": {},
"about_action_email": "郵箱: scbox@xkeyc.com", "about_action_email": "郵箱: xkeyc@qq.com",
"@about_action_email": {}, "@about_action_email": {},
"about_action_open_source": "開源", "about_action_open_source": "開源",
"@about_action_open_source": {}, "@about_action_open_source": {},
@ -727,5 +728,7 @@
"home_holiday_countdown_in_progress": "正在進行中", "home_holiday_countdown_in_progress": "正在進行中",
"@home_holiday_countdown_in_progress": {}, "@home_holiday_countdown_in_progress": {},
"app_common_loading_images": "載入圖片...", "app_common_loading_images": "載入圖片...",
"@app_common_loading_images": {} "@app_common_loading_images": {},
} "app_splash_dialog_u_a_p_p": "用戶協議與隱私政策",
"app_splash_dialog_u_a_p_p_content": "感謝您選擇 SC漢化盒子 ,我們致力於為您提供 安全、便捷、可靠的使用體驗,在您開始使用應用前,請先閱讀並同意以下內容:\n\n 1. 本應用 為 GNU 通用公共許可證 v3.0 協議下的開源軟件,您可以在遵守協議的前提下自由使用、修改、分發本軟件。我們的源代碼位於:[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)。\n2. 本應用中的互聯網內容(包括但不限於 本地化文件、工具網站、新聞、視頻 等)版權由其作者創作所有,不屬於 GPL 的一部分,請在遵守對應的授權協議下使用。\n3. 本應用的官方免費發布渠道為:[微軟應用商店](https://apps.microsoft.com/detail/9NF3SWFWNKL1) 與[星際公民漢化組官網](https://www.starcitizenzw.com/ ) ,若您從其他第三方處獲得,請仔細甄別,以免遭受財產損失。\n4. 本應用在使用過程中會向我們的服務器發送匿名的統計數據,用於改進軟件質量,我們不會收集您的任何個人隱私信息。\n5. 本應用由社區提供支持,與 Cloud Imperium Games 或 其他第三方商業公司 無直接關聯。\n6. 我們提供有限的社區支持,如有需要,請前往關於頁面了解如何联系我們。"
}

View File

@ -151,13 +151,13 @@ class _$Aria2cModelStateImpl
(identical(other.aria2cDir, aria2cDir) || (identical(other.aria2cDir, aria2cDir) ||
other.aria2cDir == aria2cDir) && other.aria2cDir == aria2cDir) &&
(identical(other.aria2c, aria2c) || other.aria2c == aria2c) && (identical(other.aria2c, aria2c) || other.aria2c == aria2c) &&
const DeepCollectionEquality() (identical(other.aria2globalStat, aria2globalStat) ||
.equals(other.aria2globalStat, aria2globalStat)); other.aria2globalStat == aria2globalStat));
} }
@override @override
int get hashCode => Object.hash(runtimeType, aria2cDir, aria2c, int get hashCode =>
const DeepCollectionEquality().hash(aria2globalStat)); Object.hash(runtimeType, aria2cDir, aria2c, aria2globalStat);
@JsonKey(ignore: true) @JsonKey(ignore: true)
@override @override

View File

@ -147,7 +147,7 @@ class AboutUI extends HookConsumerWidget {
], ],
), ),
onPressed: () { onPressed: () {
launchUrlString("mailto:scbox@xkeyc.com"); launchUrlString("mailto:xkeyc@qq.com");
}, },
), ),
const SizedBox(width: 24), const SizedBox(width: 24),

View File

@ -7,7 +7,7 @@ part of 'home_game_login_dialog_ui_model.dart';
// ************************************************************************** // **************************************************************************
String _$homeGameLoginUIModelHash() => String _$homeGameLoginUIModelHash() =>
r'108812122298cf826ee57ecad3e519b1dc3fd6ce'; r'aba96cf64ea6146f1006ca2bd41e6e26c10adb6c';
/// See also [HomeGameLoginUIModel]. /// See also [HomeGameLoginUIModel].
@ProviderFor(HomeGameLoginUIModel) @ProviderFor(HomeGameLoginUIModel)

View File

@ -190,8 +190,8 @@ class _$HomeDownloaderUIStateImpl implements _HomeDownloaderUIState {
.equals(other._waitingTasks, _waitingTasks) && .equals(other._waitingTasks, _waitingTasks) &&
const DeepCollectionEquality() const DeepCollectionEquality()
.equals(other._stoppedTasks, _stoppedTasks) && .equals(other._stoppedTasks, _stoppedTasks) &&
const DeepCollectionEquality() (identical(other.globalStat, globalStat) ||
.equals(other.globalStat, globalStat)); other.globalStat == globalStat));
} }
@override @override
@ -200,7 +200,7 @@ class _$HomeDownloaderUIStateImpl implements _HomeDownloaderUIState {
const DeepCollectionEquality().hash(_tasks), const DeepCollectionEquality().hash(_tasks),
const DeepCollectionEquality().hash(_waitingTasks), const DeepCollectionEquality().hash(_waitingTasks),
const DeepCollectionEquality().hash(_stoppedTasks), const DeepCollectionEquality().hash(_stoppedTasks),
const DeepCollectionEquality().hash(globalStat)); globalStat);
@JsonKey(ignore: true) @JsonKey(ignore: true)
@override @override

View File

@ -6,7 +6,7 @@ part of 'home_ui_model.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$homeUIModelHash() => r'b62026bb0b5ab37c0aed33e0ed018aa9732da58e'; String _$homeUIModelHash() => r'13dc0eb046a284bb9cb5a1da5597dae7e5287030';
/// See also [HomeUIModel]. /// See also [HomeUIModel].
@ProviderFor(HomeUIModel) @ProviderFor(HomeUIModel)

View File

@ -7,7 +7,7 @@ part of 'localization_ui_model.dart';
// ************************************************************************** // **************************************************************************
String _$localizationUIModelHash() => String _$localizationUIModelHash() =>
r'697f9e00ea08729c5debb4d87ffe9fadb5c0ec71'; r'87152654734d322cd20d62baf050918adc9fd11b';
/// See also [LocalizationUIModel]. /// See also [LocalizationUIModel].
@ProviderFor(LocalizationUIModel) @ProviderFor(LocalizationUIModel)

View File

@ -1,7 +1,11 @@
import 'dart:io';
import 'package:fluent_ui/fluent_ui.dart'; import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hive/hive.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:markdown_widget/widget/markdown.dart';
import 'package:starcitizen_doctor/api/analytics.dart'; import 'package:starcitizen_doctor/api/analytics.dart';
import 'package:starcitizen_doctor/app.dart'; import 'package:starcitizen_doctor/app.dart';
import 'package:starcitizen_doctor/common/conf/const_conf.dart'; import 'package:starcitizen_doctor/common/conf/const_conf.dart';
@ -13,6 +17,8 @@ import 'package:starcitizen_doctor/widgets/widgets.dart';
class SplashUI extends HookConsumerWidget { class SplashUI extends HookConsumerWidget {
const SplashUI({super.key}); const SplashUI({super.key});
static const _alertInfoVersion = 1;
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final stepState = useState(0); final stepState = useState(0);
@ -61,7 +67,13 @@ class SplashUI extends HookConsumerWidget {
void _initApp(BuildContext context, AppGlobalModel appModel, void _initApp(BuildContext context, AppGlobalModel appModel,
ValueNotifier<int> stepState, WidgetRef ref) async { ValueNotifier<int> stepState, WidgetRef ref) async {
await appModel.initApp(); await appModel.initApp();
final appConf = await Hive.openBox("app_conf");
final v = appConf.get("splash_alert_info_version", defaultValue: 0);
AnalyticsApi.touch("launch"); AnalyticsApi.touch("launch");
if (v < _alertInfoVersion) {
if (!context.mounted) return;
await _showAlert(context, appConf);
}
try { try {
await URLConf.checkHost(); await URLConf.checkHost();
} catch (e) { } catch (e) {
@ -77,4 +89,18 @@ class SplashUI extends HookConsumerWidget {
if (!context.mounted) return; if (!context.mounted) return;
context.go("/index"); context.go("/index");
} }
_showAlert(BuildContext context, Box<dynamic> appConf) async {
final userOk = await showConfirmDialogs(
context,
S.current.app_splash_dialog_u_a_p_p,
MarkdownWidget(data: S.current.app_splash_dialog_u_a_p_p_content),
constraints:
BoxConstraints(maxWidth: MediaQuery.of(context).size.width * .5));
if (userOk) {
await appConf.put("splash_alert_info_version", _alertInfoVersion);
} else {
exit(0);
}
}
} }

View File

@ -6,7 +6,7 @@ part of 'tools_ui_model.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$toolsUIModelHash() => r'6b4ab0195cc9606202ae5d0dce574735090f486f'; String _$toolsUIModelHash() => r'e96ded635df8f59fb93d92f8dac337c44482dc1c';
/// See also [ToolsUIModel]. /// See also [ToolsUIModel].
@ProviderFor(ToolsUIModel) @ProviderFor(ToolsUIModel)