WillPopScope 在 flutter 3.12 后已弃用

回答 3 浏览 2723 2023-11-17

当我们在 flutter 版本 3.12.0 之后使用下面的代码时,我们收到了deprecated的消息,现在该使用什么代替呢?

WillPopScope(
          onWillPop: () {
            setStatusBarColor(statusBarColorPrimary,statusBarIconBrightness: Brightness.light);
            finish(context);
            return Future.value(true);
          },)
dharmx 提问于2023-11-17
3 个回答
#1楼 已采纳
得票数 4

flutter 版本 3.12.0 之后,WillPopScope 之前的内容已被弃用。

现在你可以使用 PopScope 如下

 return PopScope(
canPop:true,//When false, blocks the current route from being popped.
onPopInvoked: (didPop) {
            //do your logic here
            setStatusBarColor(statusBarColorPrimary,statusBarIconBrightness: Brightness.light);
           // do your logic ends
           return;
        },
          child: 
         // your other ui or logic
         Scaffold(//other child and ui etc)
)
dharmx 提问于2023-11-17
知道如何在不执行两次 onPopInvoked 方法的情况下发送数据吗?Nickolas de Luca Alberton 2023-11-17
#2楼
得票数 0

如果您确实需要 conditional async navigation,您可以这样做:

      PopScope(
          canPop: false, // prevent back
          onPopInvoked: (_) async {
            // This can be async and you can check your condition
            final backNavigationAllowed = await something();
            if (backNavigationAllowed) {
              // Manually navigate back
              if (mounted) Navigator.of(context).pop();
            } else {
              // User is still on the same page, do whatever you want
            }
          },
          child: ...
      );
Maurix 提问于2023-11-28
#3楼
得票数 0

解决了

用 PopScope 新小部件替换 WillPopScope 中的旧小部件 检查下面的代码

/// 新代码

PopScope(
  canPop: true,
  onPopInvoked : (didPop){
   // logic
  },
)
Rohit Soni 提问于2023-12-05
标签