在Profile Page
中,我有一个函数openGallery
,它使用ImagePicker
来选择用户想要如何选择图片或视频,无论是通过相机还是画廊,所以在这个函数中,我返回一个AlertDialog
来显示通过相机拍摄图片和视频或从画廊中选择的选项,函数看起来像这样:
void openGallery() {
showDialog(
context: context,
builder: (ctx) => AlertDialog(
contentPadding: const EdgeInsets.all(10.0),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.zero,
),
content: SizedBox(
height: 260.0,
width: 360.0,
child: Column(
children: [
const SizedBox(
height: 20.0,
),
ListTile(
onTap: () async {
final image = await getMedia(ImageSource.gallery);
setState(() {
files = image;
});
},
title: Text(
'Choose a photo from gallery',
style: GoogleFonts.mada(
fontSize: 18.0,
fontWeight: FontWeight.w300,
letterSpacing: 1.1,
),
),
trailing: const IconButton(
onPressed: null,
icon: Icon(
MdiIcons.memory,
),
),
),
ListTile(
onTap: () async {
final image = await getMedia(ImageSource.camera);
setState(() {
files = image;
});
},
title: Text(
'Capture a photo',
style: GoogleFonts.mada(
fontSize: 18.0,
fontWeight: FontWeight.w300,
letterSpacing: 1.1,
),
),
trailing: const IconButton(
onPressed: null,
icon: Icon(
Icons.camera,
),
),
),
],
),
),
),
);
}
当我点击add
图标时,这个openGallery
函数被调用,这就是我想要的。在选择一个文件而不是导航到一个用户可以添加标题的屏幕后,它两者都可以。在选择一个文件后,dialog
仍然打开,即使在不同的屏幕上。请帮助我如何在选择一个图像后阻止这种情况发生。我只想让它转到用户可以添加标题的屏幕。谢谢
4条答案
按热度按时间0lvr5msh1#
在转到另一个屏幕的代码之前,需要添加以下代码:
rxztt3cl2#
在onTap末尾不要忘记使用Navigator. of(context). pop()关闭对话框
参见this example
wn9m85ua3#
使用
pop()
关闭对话框;fjaof16o4#
您应该使用Navigator.pop(上下文);关闭对话框,因为它使用上下文
并且它应该在任何对话框之后使用以关闭它
更多信息请参见文档AlertDialog class