2024-03-10 19:44:53 +08:00
|
|
|
|
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),
|
2024-03-10 20:32:13 +08:00
|
|
|
|
"启动游戏时忽略能效核心( 适用于Intel 12th+ 处理器 )",
|
2024-03-10 19:44:53 +08:00
|
|
|
|
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),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|