onPopInvokedWithResult 被调用两次

问题描述 投票:0回答:1

我有一个

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();
            }
          },
        ),
      );
}
flutter
1个回答
0
投票

由于多个弹出触发器,

onPopInvokedWithResult
回调可能会触发两次。处理方法如下:

  1. 避免 Double Pop:确保
    Navigator.pop()
    不会随着 GoRouter 的处理而被手动调用。
  2. 自定义后退按钮:如果使用自定义后退操作,请确保它不会重复弹出事件。
  3. 防止多次清理调用
    bool _hasCleanedUp = false;
    
    onPopInvokedWithResult: (didPop, result) {
      if (didPop && !_hasCleanedUp) {
        _hasCleanedUp = true;
        doCleanup();
      }
    },
    

如果有效,请给我一个赞,让它发挥作用!

© www.soinside.com 2019 - 2024. All rights reserved.