Add linux deb dependencies Add backup recovery strategy select Support custom text scaling Optimize the display of different text scale Optimize windows setup experience Optimize startTun performance Optimize android tv experience Optimize default option Optimize computed text size Optimize hyperOS freeform window Add developer mode Update core Optimize more details
359 lines
7.0 KiB
Dart
359 lines
7.0 KiB
Dart
import 'package:fl_clash/common/common.dart';
|
|
import 'package:fl_clash/enum/enum.dart';
|
|
import 'package:fl_clash/models/models.dart';
|
|
import 'package:fl_clash/state.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
|
|
part 'generated/app.g.dart';
|
|
|
|
@riverpod
|
|
class Logs extends _$Logs with AutoDisposeNotifierMixin {
|
|
@override
|
|
FixedList<Log> build() {
|
|
return globalState.appState.logs;
|
|
}
|
|
|
|
addLog(Log value) {
|
|
state = state.copyWith()..add(value);
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
logs: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class Requests extends _$Requests with AutoDisposeNotifierMixin {
|
|
@override
|
|
FixedList<Connection> build() {
|
|
return globalState.appState.requests;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
requests: value,
|
|
);
|
|
}
|
|
|
|
addRequest(Connection value) {
|
|
state = state.copyWith()..add(value);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class Providers extends _$Providers with AutoDisposeNotifierMixin {
|
|
@override
|
|
List<ExternalProvider> build() {
|
|
return globalState.appState.providers;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
providers: value,
|
|
);
|
|
}
|
|
|
|
setProvider(ExternalProvider? provider) {
|
|
if (provider == null) return;
|
|
final index = state.indexWhere((item) => item.name == provider.name);
|
|
if (index == -1) return;
|
|
state = List.from(state)..[index] = provider;
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class Packages extends _$Packages with AutoDisposeNotifierMixin {
|
|
@override
|
|
List<Package> build() {
|
|
return globalState.appState.packages;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
packages: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class AppBrightness extends _$AppBrightness with AutoDisposeNotifierMixin {
|
|
@override
|
|
Brightness? build() {
|
|
return globalState.appState.brightness;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
brightness: value,
|
|
);
|
|
}
|
|
|
|
setState(Brightness? value) {
|
|
state = value;
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class Traffics extends _$Traffics with AutoDisposeNotifierMixin {
|
|
@override
|
|
FixedList<Traffic> build() {
|
|
return globalState.appState.traffics;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
traffics: value,
|
|
);
|
|
}
|
|
|
|
addTraffic(Traffic value) {
|
|
state = state.copyWith()..add(value);
|
|
}
|
|
|
|
clear() {
|
|
state = state.copyWith()..clear();
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class TotalTraffic extends _$TotalTraffic with AutoDisposeNotifierMixin {
|
|
@override
|
|
Traffic build() {
|
|
return globalState.appState.totalTraffic;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
totalTraffic: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class LocalIp extends _$LocalIp with AutoDisposeNotifierMixin {
|
|
@override
|
|
String? build() {
|
|
return globalState.appState.localIp;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
localIp: value,
|
|
);
|
|
}
|
|
|
|
@override
|
|
set state(String? value) {
|
|
super.state = value;
|
|
globalState.appState = globalState.appState.copyWith(
|
|
localIp: state,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class RunTime extends _$RunTime with AutoDisposeNotifierMixin {
|
|
@override
|
|
int? build() {
|
|
return globalState.appState.runTime;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
runTime: value,
|
|
);
|
|
}
|
|
|
|
bool get isStart {
|
|
return state != null;
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class ViewSize extends _$ViewSize with AutoDisposeNotifierMixin {
|
|
@override
|
|
Size build() {
|
|
return globalState.appState.viewSize;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
viewSize: value,
|
|
);
|
|
}
|
|
|
|
ViewMode get viewMode => utils.getViewMode(state.width);
|
|
|
|
bool get isMobileView => viewMode == ViewMode.mobile;
|
|
}
|
|
|
|
@riverpod
|
|
double viewWidth(Ref ref) {
|
|
return ref.watch(viewSizeProvider).width;
|
|
}
|
|
|
|
@riverpod
|
|
ViewMode viewMode(Ref ref) {
|
|
return utils.getViewMode(ref.watch(viewWidthProvider));
|
|
}
|
|
|
|
@riverpod
|
|
bool isMobileView(Ref ref) {
|
|
return ref.watch(viewModeProvider) == ViewMode.mobile;
|
|
}
|
|
|
|
@riverpod
|
|
double viewHeight(Ref ref) {
|
|
return ref.watch(viewSizeProvider).height;
|
|
}
|
|
|
|
@riverpod
|
|
class Init extends _$Init with AutoDisposeNotifierMixin {
|
|
@override
|
|
bool build() {
|
|
return globalState.appState.isInit;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
isInit: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class CurrentPageLabel extends _$CurrentPageLabel
|
|
with AutoDisposeNotifierMixin {
|
|
@override
|
|
PageLabel build() {
|
|
return globalState.appState.pageLabel;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
pageLabel: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class SortNum extends _$SortNum with AutoDisposeNotifierMixin {
|
|
@override
|
|
int build() {
|
|
return globalState.appState.sortNum;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
sortNum: value,
|
|
);
|
|
}
|
|
|
|
add() => state++;
|
|
}
|
|
|
|
@riverpod
|
|
class CheckIpNum extends _$CheckIpNum with AutoDisposeNotifierMixin {
|
|
@override
|
|
int build() {
|
|
return globalState.appState.checkIpNum;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
checkIpNum: value,
|
|
);
|
|
}
|
|
|
|
add() => state++;
|
|
}
|
|
|
|
@riverpod
|
|
class Version extends _$Version with AutoDisposeNotifierMixin {
|
|
@override
|
|
int build() {
|
|
return globalState.appState.version;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
version: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class Groups extends _$Groups with AutoDisposeNotifierMixin {
|
|
@override
|
|
List<Group> build() {
|
|
return globalState.appState.groups;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
groups: value,
|
|
);
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class DelayDataSource extends _$DelayDataSource with AutoDisposeNotifierMixin {
|
|
@override
|
|
DelayMap build() {
|
|
return globalState.appState.delayMap;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
delayMap: value,
|
|
);
|
|
}
|
|
|
|
setDelay(Delay delay) {
|
|
if (state[delay.url]?[delay.name] != delay.value) {
|
|
final DelayMap newDelayMap = Map.from(state);
|
|
if (newDelayMap[delay.url] == null) {
|
|
newDelayMap[delay.url] = {};
|
|
}
|
|
newDelayMap[delay.url]![delay.name] = delay.value;
|
|
state = newDelayMap;
|
|
}
|
|
}
|
|
}
|
|
|
|
@riverpod
|
|
class NeedApply extends _$NeedApply with AutoDisposeNotifierMixin {
|
|
@override
|
|
bool build() {
|
|
return globalState.appState.needApply;
|
|
}
|
|
|
|
@override
|
|
onUpdate(value) {
|
|
globalState.appState = globalState.appState.copyWith(
|
|
needApply: value,
|
|
);
|
|
}
|
|
}
|