我正在寻找一种方法在我的申请关闭之前处理一些最后的事情。我希望这种情况发生在网络关闭、本机窗口关闭和移动关闭时。
我以为我会这样做,但是 flutter 引擎拿走了我的小部件并结束了主要功能。
void main() {
try {
runApp(MyApp());
}
finally {
customDisposeFunction(); // TODO: Oh no, this function is called right away!
}
}
class MyApp extends StatelessWidget {
}
我也尝试过使用flutter_window_close,但是当我在 Visual Studio 代码中按下停止按钮时,它不会被释放。
我也尝试通过 ProcessSignal 观看,但这根本不是跨平台的。
我也尝试过将应用程序设为
StatefulWidget
,但是关闭窗口时不会调用dispose
中的State
(在Windows上)。
有一些好的方法来处理这个跨平台吗?
是的,因为这样写出来后,finally 就会直接命中。 相反,您应该尝试将其编写在主类的 dispose 方法中(尽管您必须使其有状态)
您可以将您的
MyApp
设为 StatefulWidget
并覆盖其 dispose()
方法。
特定于平台的解决方案:
对于网络:
在网络上,您可以监听 before-unload 事件来处理清理。
import 'dart:html' as html;
void main() {
html.window.onBeforeUnload.listen((event) {
customDisposeFunction();
});
runApp(MyApp());
}
桌面版(Windows/macOS/Linux):
如果您想在桌面上以更稳健的方式处理窗口关闭,您可以使用
window_manager
包(比 flutter_window_close
更稳健)。
import 'package:window_manager/window_manager.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
windowManager.addListener(WindowListener(
onWindowClose: () async {
customDisposeFunction();
windowManager.destroy();
},
));
runApp(MyApp());
}