在说到WillPopScope
组件的用法时,用到showDialog
。当用户点击返回箭头时,弹出询问框,代码如下:
Future<bool?> _onBackPressed() async{
return showDialog<bool>(
context: context,
builder: (BuildContext context){
return AlertDialog(
title: const Text('确定要退出吗?'),
actions: [
TextButton(
onPressed: (){
Navigator.of(context).pop(false);
},
child: const Text('取消')
),
TextButton(
onPressed: (){
Navigator.of(context).pop(true);
},
child: const Text('确定')
)
],
);
}
);
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async{
bool? result = await _onBackPressed();
result ??= false; //判断是否为null,是就赋值false
return result;
},
child: Scaffold(...)
);
}
- 报错:
Undefined name 'context'
- 原因:
生成
Dialog
的方法是在Widget
类之外定义的,所以Widget
类的context
不存在。 - 解决,传递一个context给_onBackPressed
Future<bool?> _onBackPressed(BuildContext context) async{}
调用的时候加一个context
参数
_onBackPressed(context)
评论(0)