我有一个
PopScope
可以处理一些清理工作,但由于某种原因,onPopInvokedWithResult
回调被调用了两次。
怎么会发生这种事?
@immutable
class MyRoute extends GoRouteData {
const MyRoute({
// ...
});
@override
Page buildPage(BuildContext context, GoRouterState state) => MaterialPage(
key: state.pageKey,
child: PopScope(
child: MyPageWithScaffold(
// ...
),
onPopInvokedWithResult: (didPop, result) {
if (didPop) {
doCleanup();
}
},
),
);
}
由于多个弹出触发器,
onPopInvokedWithResult
回调可能会触发两次。处理方法如下:
Navigator.pop()
不会随着 GoRouter 的处理而被手动调用。bool _hasCleanedUp = false;
onPopInvokedWithResult: (didPop, result) {
if (didPop && !_hasCleanedUp) {
_hasCleanedUp = true;
doCleanup();
}
},
如果有效,请给我一个赞,让它发挥作用!