我有这段代码:
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(...)
],
);
},
);
}
更多信息请访问官方文档