Flutter: IconButton onPressed不能与SimpleDialog一起工作 &



我有这段代码:

child: CircleAvatar(
radius: 18,
backgroundColor: Colors.white70,
child: IconButton(
icon: Icon(Icons.camera_alt_outlined),
onPressed: () => selectPhoto(),
),
)

当图标被按下时,我想有一个简单的对话框,有几个选项,所以我这样写:

selectPhoto() {
return SimpleDialog(
title: const Text('Create Post'),
children: <Widget>[
SimpleDialogOption(...),
SimpleDialogOption(...),
SimpleDialogOption(...)
],
);
}

但是当我尝试运行应用程序时,什么都没有发生。我做错了什么?如何解决?泰

函数的返回值没有被用于任何东西。在onPressed中返回SimpleDialog是没有用的。onPressed函数将由Widget调用,所以给它一个返回值是没有用的。

按照文档,你的函数需要调用showDialog方法:

  • 更改selectPhoto函数:
await showDialog(
context: context,
builder: (BuildContext context) {
return SimpleDialog(
title: const Text('Create Post'),
children: <Widget>[
SimpleDialogOption(...),
SimpleDialogOption(...),
SimpleDialogOption(...)
],
);
})

showDialog方法显示您创建的对话框。如果需要,可以将结果存储在其返回值中:

var result = await showDialog(
[...]

这样你可以检查哪个选项被按下了。如果用户取消了对话框(例如,在Android上点击后退按钮,或者点击对话框后面的遮罩),那么未来将以空值结束。

您可以在这个答案中链接的Flutter文档中阅读更多示例。

showDialog return future your methodselectPhoto应该是异步的,你的代码应该像这样

Future<void> selectPhoto() async {
await showDialog(
context: context,
builder: (BuildContext context) {
return SimpleDialog(
title: const Text('Select assignment'),
children: <Widget>[
SimpleDialogOption(...),
SimpleDialogOption(...),
SimpleDialogOption(...)
],
);
},
);
}

更多信息请访问官方文档

最新更新