当我试图删除该项目时,我遇到了问题,而它不接受删除该项目。我正在使用ConfirmDismiss。

错误:
未处理异常:类型'Null‘不是'bool' _DisMissState.build的子类型。(package:advanced_part_2/dismissible.dart:84:30) _DismissibleState._handleDismissStatusChanged (package:flutter/src/widgets/dismissible.dart:498:11)
代码:
confirmDismiss: (DismissDirection dir) async {
if (dir == DismissDirection.startToEnd) {
// AlertDialog ad =
final bool res = await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Text('Are You Sure you want to delete'),
actions:<Widget> [
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'cancel',
)),
ElevatedButton(
onPressed: () {
setState(() {
genList.removeAt(index);
});
Navigator.of(context).pop();
},
child: Text(
'Delete',
style: TextStyle(color: Colors.red),
))
],
);
},
);
return res;
} else {
return true;
}
},发布于 2021-12-15 15:12:47
这是因为当调用以下代码时:
final bool res = await showDialog(...);它将返回一个空值,请参阅https://api.flutter.dev/flutter/material/showDialog.html。
而且,单击该按钮时也不会给出任何返回值:
ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'cancel',
)),你不能使用Navigator.of(context).pop();。相反,您需要使用以下两种方法:
Navigator.pop(context, false);或
Navigator.pop(context, true);然后,您需要处理显示对话框中的可空返回值,方法是在null时提供一个默认值。就像这样:
bool res = await showDialog(...);
if(res == null) res = false;发布于 2021-12-15 15:06:47
当对话框被取消时,showDialog可以返回null (例如,用户在对话框外单击),因此您必须通过将类型更改为:
final bool? res = await showDialog(/* your code */);然后在下面的逻辑中,您必须检查null:
if(res == null) {
// handle dismiss
} else if (res == false) {
// handle cancel
} else {
// handle confirm/true
}正如注释中提到的@Er1 1一样,在弹出对话框时还需要传递true或false:
Navigator.of(context).pop(true);
// or
Navigator.of(context).pop(false);上述情况仍然适用,因为默认情况下barrierDismissible是true。
发布于 2021-12-15 15:09:13
final bool res = await showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
content: Text('Are You Sure you want to delete'),
actions:<Widget> [
ElevatedButton(
onPressed: () {
Navigator.of(context).pop(false);
},
child: Text(
'cancel',
)),
ElevatedButton(
onPressed: () {
setState(() {
genList.removeAt(index);
});
Navigator.of(context).pop(true);
},
child: Text(
'Delete',
style: TextStyle(color: Colors.red),
))
],
);
},
);将false和true添加到pop()中,使showDialog返回布尔值。
但是,请记住,如果不将barrierDismissible在showDialog中设置为false,则如果在对话框之外单击,则可以返回null。
https://stackoverflow.com/questions/70365843
复制相似问题