371 lines
13 KiB
Dart
371 lines
13 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:flutter_dmzj/app/app_style.dart';
|
||
import 'package:flutter_dmzj/services/local_storage_service.dart';
|
||
import 'package:get/get.dart';
|
||
|
||
class AppSettingsService extends GetxController {
|
||
static AppSettingsService get instance => Get.find<AppSettingsService>();
|
||
var themeMode = 0.obs;
|
||
var firstRun = false;
|
||
@override
|
||
void onInit() {
|
||
themeMode.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kThemeMode, 0);
|
||
firstRun = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kFirstRun, true);
|
||
//漫画
|
||
comicReaderDirection.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderDirection, 0);
|
||
comicReaderFullScreen.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderFullScreen, true);
|
||
comicReaderShowStatus.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderShowStatus, true);
|
||
comicReaderShowStatus.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderShowStatus, true);
|
||
comicReaderShowViewPoint.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderShowViewPoint, true);
|
||
comicReaderLeftHandMode.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderLeftHandMode, false);
|
||
comicReaderHD.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderHD, false);
|
||
comicReaderPageAnimation.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderPageAnimation, true);
|
||
comicReaderOldViewPoint.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicReaderOldViewPoint, false);
|
||
//小说
|
||
novelReaderDirection.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderDirection, 0);
|
||
novelReaderFontSize.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderFontSize, 16);
|
||
novelReaderLineSpacing.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderLineSpacing, 1.5);
|
||
novelReaderTheme.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderTheme, 0);
|
||
novelReaderFullScreen.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderFullScreen, true);
|
||
novelReaderShowStatus.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderShowStatus, true);
|
||
novelReaderLeftHandMode.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderLeftHandMode, false);
|
||
novelReaderPageAnimation.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNovelReaderPageAnimation, true);
|
||
//下载
|
||
downloadAllowCellular.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kDownloadAllowCellular, true);
|
||
downloadComicTaskCount.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kDownloadComicTaskCount, 5);
|
||
downloadNovelTaskCount.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kDownloadNovelTaskCount, 5);
|
||
//搜索API
|
||
comicSearchUseWebApi.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kComicSearchUseWebApi, false);
|
||
//字体大小
|
||
useSystemFontSize.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kUseSystemFontSize, false);
|
||
//新闻字体
|
||
newsFontSize.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kNewsFontSize, 15);
|
||
//自动添加神隐漫画至收藏夹
|
||
collectHideComic.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kCollectHideComic, false);
|
||
//代理地址
|
||
proxyAddress.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kProxyAddress, "");
|
||
//MD动态取色
|
||
useDynamicColor.value = LocalStorageService.instance
|
||
.getValue(LocalStorageService.kUseDynamicColor, true);
|
||
super.onInit();
|
||
}
|
||
|
||
void changeTheme() {
|
||
Get.dialog(
|
||
SimpleDialog(
|
||
title: const Text("设置主题"),
|
||
children: [
|
||
RadioListTile<int>(
|
||
title: const Text("跟随系统"),
|
||
value: 0,
|
||
groupValue: themeMode.value,
|
||
onChanged: (e) {
|
||
Get.back();
|
||
setTheme(e ?? 0);
|
||
},
|
||
),
|
||
RadioListTile<int>(
|
||
title: const Text("浅色模式"),
|
||
value: 1,
|
||
groupValue: themeMode.value,
|
||
onChanged: (e) {
|
||
Get.back();
|
||
setTheme(e ?? 1);
|
||
},
|
||
),
|
||
RadioListTile<int>(
|
||
title: const Text("深色模式"),
|
||
value: 2,
|
||
groupValue: themeMode.value,
|
||
onChanged: (e) {
|
||
Get.back();
|
||
setTheme(e ?? 2);
|
||
},
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
void setTheme(int i) {
|
||
themeMode.value = i;
|
||
var mode = ThemeMode.values[i];
|
||
|
||
LocalStorageService.instance.setValue(LocalStorageService.kThemeMode, i);
|
||
Get.changeThemeMode(mode);
|
||
}
|
||
|
||
/// 漫画阅读方向
|
||
/// * [0] 左右
|
||
/// * [1] 上下
|
||
/// * [2] 右左
|
||
var comicReaderDirection = 0.obs;
|
||
void setComicReaderDirection(int direction) {
|
||
if (comicReaderDirection.value == direction) {
|
||
return;
|
||
}
|
||
comicReaderDirection.value = direction;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderDirection, direction);
|
||
}
|
||
|
||
/// 漫画全屏阅读
|
||
RxBool comicReaderFullScreen = true.obs;
|
||
void setComicReaderFullScreen(bool value) {
|
||
comicReaderFullScreen.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderFullScreen, value);
|
||
}
|
||
|
||
/// 漫画阅读显示状态信息
|
||
RxBool comicReaderShowStatus = true.obs;
|
||
void setComicReaderShowStatus(bool value) {
|
||
comicReaderShowStatus.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderShowStatus, value);
|
||
}
|
||
|
||
/// 漫画阅读尾页显示观点/吐槽
|
||
RxBool comicReaderShowViewPoint = true.obs;
|
||
void setComicReaderShowViewPoint(bool value) {
|
||
comicReaderShowViewPoint.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderShowViewPoint, value);
|
||
}
|
||
|
||
/// 启用旧板吐槽
|
||
RxBool comicReaderOldViewPoint = false.obs;
|
||
void setComicReaderOldViewPoint(bool value) {
|
||
comicReaderOldViewPoint.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderOldViewPoint, value);
|
||
}
|
||
|
||
/// 小说阅读方向
|
||
/// * [0] 左右
|
||
/// * [1] 上下
|
||
/// * [2] 右左
|
||
var novelReaderDirection = 0.obs;
|
||
void setNovelReaderDirection(int direction) {
|
||
if (novelReaderDirection.value == direction) {
|
||
return;
|
||
}
|
||
novelReaderDirection.value = direction;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderDirection, direction);
|
||
}
|
||
|
||
/// 小说字体
|
||
var novelReaderFontSize = 16.obs;
|
||
void setNovelReaderFontSize(int size) {
|
||
if (size < 5) {
|
||
size = 5;
|
||
}
|
||
//应该没人需要这么大的字体吧...
|
||
if (size > 56) {
|
||
size = 56;
|
||
}
|
||
novelReaderFontSize.value = size;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderFontSize, size);
|
||
}
|
||
|
||
/// 小说行距
|
||
var novelReaderLineSpacing = 1.5.obs;
|
||
void setNovelReaderLineSpacing(double spacing) {
|
||
if (spacing < 1) {
|
||
spacing = 1;
|
||
}
|
||
//应该没人需要这么大的字体吧...
|
||
if (spacing > 5) {
|
||
spacing = 5;
|
||
}
|
||
novelReaderLineSpacing.value = spacing;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderLineSpacing, spacing);
|
||
}
|
||
|
||
/// 小说阅读主题
|
||
var novelReaderTheme = 0.obs;
|
||
void setNovelReaderTheme(int theme) {
|
||
novelReaderTheme.value = theme;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderTheme, theme);
|
||
}
|
||
|
||
/// 漫画全屏阅读
|
||
RxBool novelReaderFullScreen = true.obs;
|
||
void setNovelReaderFullScreen(bool value) {
|
||
novelReaderFullScreen.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderFullScreen, value);
|
||
}
|
||
|
||
/// 漫画阅读显示状态信息
|
||
RxBool novelReaderShowStatus = true.obs;
|
||
void setNovelReaderShowStatus(bool value) {
|
||
novelReaderShowStatus.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderShowStatus, value);
|
||
}
|
||
|
||
/// 下载是否允许使用流量
|
||
RxBool downloadAllowCellular = true.obs;
|
||
void setDownloadAllowCellular(bool value) {
|
||
downloadAllowCellular.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kDownloadAllowCellular, value);
|
||
}
|
||
|
||
/// 下载漫画最大任务数
|
||
var downloadComicTaskCount = 5.obs;
|
||
void setDownloadComicTaskCount(int task) {
|
||
downloadComicTaskCount.value = task;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kDownloadComicTaskCount, task);
|
||
}
|
||
|
||
/// 下载漫画最大任务数
|
||
var downloadNovelTaskCount = 5.obs;
|
||
void setDownloadNovelTaskCount(int task) {
|
||
downloadNovelTaskCount.value = task;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kDownloadNovelTaskCount, task);
|
||
}
|
||
|
||
/// 漫画搜索使用Web接口
|
||
var comicSearchUseWebApi = false.obs;
|
||
void setComicSearchUseWebApi(bool e) {
|
||
comicSearchUseWebApi.value = e;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicSearchUseWebApi, e);
|
||
}
|
||
|
||
/// 显示字体大小跟随系统
|
||
var useSystemFontSize = false.obs;
|
||
void setUseSystemFontSize(bool e) {
|
||
useSystemFontSize.value = e;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kUseSystemFontSize, e);
|
||
}
|
||
|
||
/// 漫画阅读左手模式
|
||
RxBool comicReaderLeftHandMode = false.obs;
|
||
void setComicReaderLeftHandMode(bool value) {
|
||
comicReaderLeftHandMode.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderLeftHandMode, value);
|
||
}
|
||
|
||
/// 小说阅读左手模式
|
||
RxBool novelReaderLeftHandMode = false.obs;
|
||
void setNovelReaderLeftHandMode(bool value) {
|
||
novelReaderLeftHandMode.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderLeftHandMode, value);
|
||
}
|
||
|
||
/// 漫画阅读优先加载高清图
|
||
RxBool comicReaderHD = false.obs;
|
||
void setComicReaderHD(bool value) {
|
||
comicReaderHD.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderHD, value);
|
||
}
|
||
|
||
/// 漫画阅读翻页动画
|
||
RxBool comicReaderPageAnimation = true.obs;
|
||
void setComicReaderPageAnimation(bool value) {
|
||
comicReaderPageAnimation.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kComicReaderPageAnimation, value);
|
||
}
|
||
|
||
/// 小说阅读翻页动画
|
||
RxBool novelReaderPageAnimation = true.obs;
|
||
void setNovelReaderPageAnimation(bool value) {
|
||
novelReaderPageAnimation.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNovelReaderPageAnimation, value);
|
||
}
|
||
|
||
/// 下载漫画最大任务数
|
||
var newsFontSize = 15.obs;
|
||
void setNewsFontSize(int size) {
|
||
newsFontSize.value = size;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kNewsFontSize, size);
|
||
}
|
||
|
||
/// 自动添加神隐漫画至收藏夹
|
||
RxBool collectHideComic = false.obs;
|
||
void setCollectHideComic(bool value) {
|
||
collectHideComic.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kCollectHideComic, value);
|
||
}
|
||
|
||
/// 代理地址
|
||
var proxyAddress = "".obs;
|
||
void setProxyAddress(String address) {
|
||
proxyAddress.value = address;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kProxyAddress, address);
|
||
}
|
||
|
||
void setNoFirstRun() {
|
||
LocalStorageService.instance.setValue(LocalStorageService.kFirstRun, false);
|
||
}
|
||
|
||
// 动态颜色方案缓存(由DynamicColorBuilder提供)
|
||
ColorScheme? _lightDynamic;
|
||
ColorScheme? _darkDynamic;
|
||
|
||
void storeDynamicColorSchemes(ColorScheme? light, ColorScheme? dark) {
|
||
_lightDynamic = light;
|
||
_darkDynamic = dark;
|
||
}
|
||
|
||
/// 是否使用MD动态取色
|
||
RxBool useDynamicColor = true.obs;
|
||
void setUseDynamicColor(bool value) {
|
||
useDynamicColor.value = value;
|
||
LocalStorageService.instance
|
||
.setValue(LocalStorageService.kUseDynamicColor, value);
|
||
final lightScheme = value ? _lightDynamic : null;
|
||
final darkScheme = value ? _darkDynamic : null;
|
||
// 同时更新亮色和暗色主题
|
||
Get.rootController.theme = AppStyle.getLightTheme(colorScheme: lightScheme);
|
||
Get.rootController.darkTheme =
|
||
AppStyle.getDarkTheme(colorScheme: darkScheme);
|
||
Get.rootController.update();
|
||
}
|
||
}
|