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
98 lines
2.5 KiB
Dart
98 lines
2.5 KiB
Dart
import 'package:fl_clash/clash/clash.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/providers/app.dart';
|
|
import 'package:fl_clash/providers/config.dart';
|
|
import 'package:fl_clash/providers/state.dart';
|
|
import 'package:fl_clash/state.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
class ClashManager extends ConsumerStatefulWidget {
|
|
final Widget child;
|
|
|
|
const ClashManager({
|
|
super.key,
|
|
required this.child,
|
|
});
|
|
|
|
@override
|
|
ConsumerState<ClashManager> createState() => _ClashContainerState();
|
|
}
|
|
|
|
class _ClashContainerState extends ConsumerState<ClashManager>
|
|
with AppMessageListener {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return widget.child;
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
clashMessage.addListener(this);
|
|
ref.listenManual(currentProfileIdProvider, (prev, next) {
|
|
if (prev != next) {
|
|
globalState.appController.handleChangeProfile();
|
|
}
|
|
});
|
|
ref.listenManual(coreStateProvider, (prev, next) async {
|
|
if (prev != next) {
|
|
await clashCore.setState(next);
|
|
}
|
|
});
|
|
ref.listenManual(clashConfigStateProvider, (prev, next) {
|
|
if (prev != next) {
|
|
globalState.appController.updateClashConfigDebounce();
|
|
}
|
|
});
|
|
}
|
|
|
|
@override
|
|
Future<void> dispose() async {
|
|
clashMessage.removeListener(this);
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Future<void> onDelay(Delay delay) async {
|
|
super.onDelay(delay);
|
|
final appController = globalState.appController;
|
|
appController.setDelay(delay);
|
|
debouncer.call(
|
|
DebounceTag.updateDelay,
|
|
() async {
|
|
await appController.updateGroupsDebounce();
|
|
},
|
|
duration: const Duration(milliseconds: 5000),
|
|
);
|
|
}
|
|
|
|
@override
|
|
void onLog(Log log) {
|
|
ref.read(logsProvider.notifier).addLog(log);
|
|
if (log.logLevel == LogLevel.error) {
|
|
globalState.showNotifier(log.payload);
|
|
}
|
|
super.onLog(log);
|
|
}
|
|
|
|
@override
|
|
void onRequest(Connection connection) async {
|
|
ref.read(requestsProvider.notifier).addRequest(connection);
|
|
super.onRequest(connection);
|
|
}
|
|
|
|
@override
|
|
Future<void> onLoaded(String providerName) async {
|
|
ref.read(providersProvider.notifier).setProvider(
|
|
await clashCore.getExternalProvider(
|
|
providerName,
|
|
),
|
|
);
|
|
await globalState.appController.updateGroupsDebounce();
|
|
super.onLoaded(providerName);
|
|
}
|
|
}
|