Files
FlClash/lib/manager/tile_manager.dart
T

59 lines
1.4 KiB
Dart
Raw Normal View History

2025-12-16 11:23:09 +08:00
import 'package:fl_clash/common/app_localizations.dart';
import 'package:fl_clash/controller.dart';
import 'package:fl_clash/core/controller.dart';
import 'package:fl_clash/plugins/app.dart';
2024-04-30 23:38:49 +08:00
import 'package:fl_clash/plugins/tile.dart';
2025-12-16 11:23:09 +08:00
import 'package:fl_clash/providers/providers.dart';
2024-04-30 23:38:49 +08:00
import 'package:flutter/material.dart';
2025-12-16 11:23:09 +08:00
import 'package:flutter_riverpod/flutter_riverpod.dart';
2024-04-30 23:38:49 +08:00
2025-12-16 11:23:09 +08:00
class TileManager extends ConsumerStatefulWidget {
2024-04-30 23:38:49 +08:00
final Widget child;
2025-07-31 17:09:18 +08:00
const TileManager({super.key, required this.child});
2024-04-30 23:38:49 +08:00
@override
2025-12-16 11:23:09 +08:00
ConsumerState<TileManager> createState() => _TileContainerState();
2024-04-30 23:38:49 +08:00
}
2025-12-16 11:23:09 +08:00
class _TileContainerState extends ConsumerState<TileManager> with TileListener {
2024-04-30 23:38:49 +08:00
@override
Widget build(BuildContext context) {
return widget.child;
}
2025-12-16 11:23:09 +08:00
bool get isStart => ref.read(isStartProvider);
2024-04-30 23:38:49 +08:00
@override
2025-09-27 23:39:20 +08:00
Future<void> onStart() async {
2025-12-16 11:23:09 +08:00
if (isStart && coreController.isCompleted) {
2025-07-31 17:09:18 +08:00
return;
}
2025-12-16 11:23:09 +08:00
appController.updateStatus(true);
app?.tip(appLocalizations.startVpn);
2024-04-30 23:38:49 +08:00
super.onStart();
}
@override
2024-10-27 16:59:23 +08:00
Future<void> onStop() async {
2025-12-16 11:23:09 +08:00
if (!isStart) {
2025-07-31 17:09:18 +08:00
return;
}
2025-12-16 11:23:09 +08:00
appController.updateStatus(false);
app?.tip(appLocalizations.stopVpn);
2024-04-30 23:38:49 +08:00
super.onStop();
}
@override
void initState() {
super.initState();
tile?.addListener(this);
}
@override
void dispose() {
tile?.removeListener(this);
super.dispose();
}
}