import 'package:fluent_ui/fluent_ui.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:starcitizen_doctor/common/conf/const_conf.dart'; import 'package:starcitizen_doctor/ui/settings/settings_ui_model.dart'; class SettingsUI extends HookConsumerWidget { const SettingsUI({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final sate = ref.watch(settingsUIModelProvider); final model = ref.read(settingsUIModelProvider.notifier); return Container( width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height, margin: const EdgeInsets.all(16), child: Column( children: [ makeSettingsItem(const Icon(FluentIcons.link, size: 20), "创建设置快捷方式", subTitle: "在桌面创建《SC汉化盒子》快捷方式", onTap: ()=> model.addShortCut(context)), if (ConstConf.isMSE) ...[ const SizedBox(height: 12), makeSettingsItem( const Icon(FluentIcons.reset_device, size: 20), "重置自动密码填充", subTitle: "启用:${sate.isEnableAutoLogin ? "已启用" : "已禁用"} 设备支持:${sate.isDeviceSupportWinHello ? "支持" : "不支持"} 邮箱:${sate.autoLoginEmail} 密码:${sate.isEnableAutoLoginPwd ? "已加密保存" : "未保存"}", onTap: ()=> model.onResetAutoLogin(context)), ], const SizedBox(height: 12), makeSettingsItem(const Icon(FontAwesomeIcons.microchip, size: 20), "启动游戏时忽略能效核心( 适用于Intel 12th+ 处理器 )", subTitle: "已设置的核心数量:${sate.inputGameLaunchECore} (此功能适用于首页的盒子一键启动 或 工具中的RSI启动器管理员模式,当为 0 时不启用此功能 )", onTap:()=> model.setGameLaunchECore(context)), const SizedBox(height: 12), makeSettingsItem(const Icon(FluentIcons.folder_open, size: 20), "设置启动器文件(RSI Launcher.exe)", subTitle: sate.customLauncherPath != null ? "${sate.customLauncherPath}" : "手动设置启动器位置,建议仅在无法自动扫描安装位置时使用", onTap: ()=> model.setLauncherPath(context), onDel: () { model.delName("custom_launcher_path"); }), const SizedBox(height: 12), makeSettingsItem(const Icon(FluentIcons.game, size: 20), "设置游戏文件 (StarCitizen.exe)", subTitle: sate.customGamePath != null ? "${sate.customGamePath}" : "手动设置游戏安装位置,建议仅在无法自动扫描安装位置时使用", onTap: ()=> model.setGamePath(context), onDel: () { model.delName("custom_game_path"); }), const SizedBox(height: 12), makeSettingsItem(const Icon(FluentIcons.delete, size: 20), "清理汉化文件缓存", subTitle: "缓存大小 ${(sate.locationCacheSize / 1024 / 1024).toStringAsFixed(2)}MB,清理盒子下载的汉化文件缓存,不会影响已安装的汉化", onTap: ()=> model.cleanLocationCache(context)), const SizedBox(height: 12), makeSettingsItem( const Icon(FluentIcons.speed_high, size: 20), "工具站访问加速", onTap: () => model.onChangeToolSiteMirror(!sate.isEnableToolSiteMirrors), subTitle: "使用镜像服务器加速访问 Dps Uex 等工具网站,若访问异常请关闭该功能。 为保护账户安全,任何情况下都不会加速RSI官网。", onSwitch: model.onChangeToolSiteMirror, switchStatus: sate.isEnableToolSiteMirrors), const SizedBox(height: 12), makeSettingsItem( const Icon(FluentIcons.document_set, size: 20), "查看log", onTap: () => model.showLogs(), subTitle: "查看汉化盒子的 log 文件,以定位盒子的 bug"), ], ), ); } Widget makeSettingsItem(Widget icon, String title, {String? subTitle, VoidCallback? onTap, VoidCallback? onDel, void Function(bool? b)? onSwitch, bool switchStatus = false}) { return Button( onPressed: onTap, child: Padding( padding: const EdgeInsets.only(top: 12, bottom: 12), child: Row( children: [ icon, const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Text(title), const Spacer(), ], ), if (subTitle != null) ...[ const SizedBox(height: 3), Text( subTitle, style: TextStyle( fontSize: 12, color: Colors.white.withOpacity(.6)), ) ] ], ), ), if (onDel != null) ...[ Button( onPressed: onDel, child: const Padding( padding: EdgeInsets.all(6), child: Icon(FluentIcons.delete), )), ], if (onSwitch != null) ...[ ToggleSwitch(checked: switchStatus, onChanged: onSwitch), ], const SizedBox(width: 12), const Icon(FluentIcons.chevron_right), ], ), ), ); } }