diff --git a/lib/ui/home/localization/advanced_localization_ui.dart b/lib/ui/home/localization/advanced_localization_ui.dart index 68a7bed..b827820 100644 --- a/lib/ui/home/localization/advanced_localization_ui.dart +++ b/lib/ui/home/localization/advanced_localization_ui.dart @@ -9,6 +9,7 @@ import 'package:re_highlight/styles/vs2015.dart'; import 'package:starcitizen_doctor/data/app_advanced_localization_data.dart'; import 'package:starcitizen_doctor/ui/home/home_ui_model.dart'; import 'package:starcitizen_doctor/ui/home/localization/advanced_localization_ui_model.dart'; +import 'package:starcitizen_doctor/ui/tools/unp4kc/unp4kc_ui.dart'; import 'package:starcitizen_doctor/widgets/widgets.dart'; import 'package:super_sliver_list/super_sliver_list.dart'; @@ -51,11 +52,8 @@ class AdvancedLocalizationUI extends HookConsumerWidget { : Column( children: [ if (state.errorMessage.isNotEmpty) - Padding( - padding: const EdgeInsets.all(32), - child: Center( - child: Text(state.errorMessage), - ), + UnP4kErrorWidget( + errorMessage: state.errorMessage, ) else ...[ Row( diff --git a/lib/ui/tools/tools_ui_model.dart b/lib/ui/tools/tools_ui_model.dart index c158321..f993735 100644 --- a/lib/ui/tools/tools_ui_model.dart +++ b/lib/ui/tools/tools_ui_model.dart @@ -594,18 +594,6 @@ class ToolsUIModel extends _$ToolsUIModel { } static rsiEnhance(BuildContext context) async { - final userOK = await showConfirmDialogs( - context, - S.current.tools_rsi_launcher_enhance_note_title, - Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text(S.current.tools_rsi_launcher_enhance_note_msg), - ], - ), - constraints: - BoxConstraints(maxWidth: MediaQuery.of(context).size.width * .55)); - if (!userOK) return; if ((await SystemHelper.getPID("\"RSI Launcher\"")).isNotEmpty) { if (!context.mounted) return; showToast( diff --git a/lib/ui/tools/unp4kc/unp4kc_ui.dart b/lib/ui/tools/unp4kc/unp4kc_ui.dart index c5091cf..cd60f44 100644 --- a/lib/ui/tools/unp4kc/unp4kc_ui.dart +++ b/lib/ui/tools/unp4kc/unp4kc_ui.dart @@ -10,6 +10,7 @@ import 'package:starcitizen_doctor/data/app_unp4k_p4k_item_data.dart'; import 'package:starcitizen_doctor/provider/unp4kc.dart'; import 'package:starcitizen_doctor/widgets/widgets.dart'; import 'package:super_sliver_list/super_sliver_list.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class UnP4kcUI extends HookConsumerWidget { const UnP4kcUI({super.key}); @@ -29,12 +30,7 @@ class UnP4kcUI extends HookConsumerWidget { Widget makeBody(BuildContext context, Unp4kcState state, Unp4kCModel model, List? files, List paths) { if (state.errorMessage.isNotEmpty) { - return Padding( - padding: const EdgeInsets.all(24), - child: Center( - child: Text(state.errorMessage), - ), - ); + return UnP4kErrorWidget(errorMessage: state.errorMessage); } return state.files == null ? Column( @@ -282,3 +278,47 @@ class _TextTempWidget extends HookConsumerWidget { ); } } + +class UnP4kErrorWidget extends StatelessWidget { + final String errorMessage; + + const UnP4kErrorWidget({super.key, required this.errorMessage}); + + static const _downloadUrl = + "https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=win-x64&os=win10&apphost_version=8.0.0"; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(24), + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (errorMessage.contains( + "You must install .NET to run this application") || + errorMessage.contains( + "You must install or update .NET to run this application")) ...[ + const Text( + "缺少运行库", + style: TextStyle(fontSize: 16), + ), + const SizedBox(height: 6), + const Text("使用此功能需安装 .NET8 运行库,请点击下方按钮下载安装,安装成功后重新打开此页面即可继续使用。"), + const SizedBox(height: 16), + FilledButton( + child: const Padding( + padding: EdgeInsets.symmetric(horizontal: 12, vertical: 3), + child: Text("安装运行库"), + ), + onPressed: () { + launchUrlString(_downloadUrl); + }), + ] else + Text(errorMessage), + ], + ), + ), + ); + } +}