Files
MWClash/lib/providers/app.dart
chen08209 676f2d058a Add windows server mode start process verify
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
2025-05-01 00:02:29 +08:00

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,
);
}
}