Support proxies search Support svg display Optimize config persistence Add some scenes auto close connections Update core Optimize more details
74 lines
1.5 KiB
Dart
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;
|
|
}
|
|
}
|