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);
},)
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)
)
知道如何在不执行两次
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: ...
);
#3楼
得票数 0
解决了
用 PopScope 新小部件替换 WillPopScope 中的旧小部件 检查下面的代码
/// 新代码
PopScope(
canPop: true,
onPopInvoked : (didPop){
// logic
},
)