flutter 即使在我离开屏幕后,警报对话框仍然打开

uxh89sit  于 2023-01-06  发布在  Flutter
关注(0)|答案(4)|浏览(192)

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仍然打开,即使在不同的屏幕上。请帮助我如何在选择一个图像后阻止这种情况发生。我只想让它转到用户可以添加标题的屏幕。谢谢

0lvr5msh

0lvr5msh1#

在转到另一个屏幕的代码之前,需要添加以下代码:

Navigator.of(context).pop();
rxztt3cl

rxztt3cl2#

在onTap末尾不要忘记使用Navigator. of(context). pop()关闭对话框

Navigator.of(context).pop()

参见this example

wn9m85ua

wn9m85ua3#

使用pop()关闭对话框;

onTap: () async {
   Navigator.of(context).pop();
   final image = await getMedia(ImageSource.gallery);
   setState(() {
      files = image;
   });
 },
fjaof16o

fjaof16o4#

final image = await getMedia(ImageSource.gallery);
setState(() {
files = image;
Navigator.pop(context);//to close dialog after chose an image
Navigator.push(context, route);//for going to your rout
});

您应该使用Navigator.pop(上下文);关闭对话框,因为它使用上下文
并且它应该在任何对话框之后使用以关闭它
更多信息请参见文档AlertDialog class

相关问题