Files
astral/lib/config/app_config.dart
T
2025-03-16 17:53:06 +08:00

162 lines
4.2 KiB
Dart

import 'package:flutter/material.dart';
import 'dart:io';
import 'package:path/path.dart' as path;
import 'cof.dart';
class AppConfig {
static final AppConfig _instance = AppConfig._internal();
static late ConfigManager _configManager;
static late String _configDirectory;
factory AppConfig() {
return _instance;
}
AppConfig._internal();
// 初始化配置
static Future<void> init() async {
// 获取可执行文件所在目录而不是当前工作目录
_configDirectory = File(Platform.resolvedExecutable).parent.path;
final configPath = path.join(_configDirectory, 'config.yaml');
_configManager = ConfigManager(
filePath: configPath,
defaultConfig: {
'theme': {
'mode': 'system',
'seedColor': Colors.blue.value,
},
'server': {
'list': ['public.easytier.cn:11010'],
'current': 'public.easytier.cn:11010',
},
'room': {
'name': 'kevin',
'password': 'kevin',
},
'user': {
'name': Platform.localHostname,
},
'network': {
'virtualIP': '',
'dynamicIP': true,
},
'system': {
'closeToTray': true,
},
},
);
await _configManager.load();
}
// 主题设置
ThemeMode get themeMode {
final String? value = _configManager.get<String>('theme.mode');
return ThemeMode.values.firstWhere(
(mode) => mode.toString() == 'ThemeMode.$value',
orElse: () => ThemeMode.system,
);
}
Future<void> setThemeMode(ThemeMode mode) async {
final modeString = mode.toString().split('.').last.toLowerCase();
_configManager.set('theme.mode', modeString);
await _configManager.save();
}
// 主题色设置
Color get seedColor {
final int? value = _configManager.get<int>('theme.seedColor');
return value != null ? Color(value) : Colors.blue;
}
Future<void> setSeedColor(Color color) async {
_configManager.set('theme.seedColor', color.value);
await _configManager.save();
}
// 服务器列表设置
List<String> get serverList {
final List? value = _configManager.get<List>('server.list');
return value?.cast<String>() ?? ['public.easytier.cn:11010'];
}
Future<void> setServerList(List<String> servers) async {
_configManager.set('server.list', servers);
await _configManager.save();
}
// 当前选中的服务器设置
String get currentServer {
return _configManager.get<String>('server.current') ??
'public.easytier.cn:11010';
}
Future<void> setCurrentServer(String server) async {
_configManager.set('server.current', server);
await _configManager.save();
}
// 房间名设置
String get roomName {
return _configManager.get<String>('room.name') ?? 'kevin';
}
Future<void> setRoomName(String name) async {
_configManager.set('room.name', name);
await _configManager.save();
}
// 房间密码设置
String get roomPassword {
return _configManager.get<String>('room.password') ?? 'kevin';
}
Future<void> setRoomPassword(String password) async {
_configManager.set('room.password', password);
await _configManager.save();
}
// 用户名设置
String get username {
return _configManager.get<String>('user.name') ?? Platform.localHostname;
}
Future<void> setUsername(String name) async {
_configManager.set('user.name', name);
await _configManager.save();
}
// 虚拟IP设置
String get virtualIP {
return _configManager.get<String>('network.virtualIP') ?? '';
}
Future<void> setVirtualIP(String ip) async {
_configManager.set('network.virtualIP', ip);
await _configManager.save();
}
// 关闭按钮进入托盘
bool get closeToTray {
return _configManager.get<bool>('system.closeToTray') ?? true;
}
Future<void> setCloseToTray(bool enabled) async {
_configManager.set('system.closeToTray', enabled);
await _configManager.save();
}
// 动态获取IP设置
bool get dynamicIP {
return _configManager.get<bool>('network.dynamicIP') ?? true;
}
Future<void> setDynamicIP(bool enabled) async {
_configManager.set('network.dynamicIP', enabled);
await _configManager.save();
}
}