Files
MWClash/lib/widgets/pop_scope.dart
chen08209 2fbc4170b9 Add some scenes auto close connections
Support proxies query

Optimize more details
2025-05-09 16:11:20 +08:00

74 lines
1.5 KiB
Dart

import 'dart:async';
import 'package:fl_clash/state.dart';
import 'package:flutter/widgets.dart';
class CommonPopScope extends StatelessWidget {
final Widget child;
final FutureOr<bool> Function()? onPop;
const CommonPopScope({
super.key,
required this.child,
this.onPop,
});
@override
Widget build(BuildContext context) {
return PopScope(
canPop: onPop == null ? true : false,
onPopInvokedWithResult: onPop == null
? null
: (didPop, __) async {
if (didPop) {
return;
}
final res = await onPop!();
if (!context.mounted) {
return;
}
if (!res) {
return;
}
Navigator.of(context).pop();
},
child: child,
);
}
}
class SystemBackBlock extends StatefulWidget {
final Widget child;
const SystemBackBlock({
super.key,
required this.child,
});
@override
State<SystemBackBlock> createState() => _SystemBackBlockState();
}
class _SystemBackBlockState extends State<SystemBackBlock> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
globalState.appController.backBlock();
});
}
@override
void dispose() {
super.dispose();
WidgetsBinding.instance.addPostFrameCallback((_) {
globalState.appController.unBackBlock();
});
}
@override
Widget build(BuildContext context) {
return widget.child;
}
}