Flutter:“与设备失去连接,”第二次使用image_picker从iOS上的图库中选择照片

hzbexzde  于 2023-05-30  发布在  Flutter
关注(0)|答案(1)|浏览(205)

我正在开发一个移动的应用程序,需要用户从图库中选择一个图像。
使用image_picker:^0.6.7+11,下面是我的代码:

if (await Permission.photos.request().isGranted) {
    try {
      final image =
          await ImagePicker().getImage(source: ImageSource.gallery);
      if (image != null) {
        photo.clearData();
        File _image = File(image.path);
        photo.addOriginal(_image);
      } else {
        print('no image selected');
      }
    } on PlatformException catch (e) {
      print('Platform exception $e');
    } catch (e) {
      print('Unknown error: $e');
    }
  }

在android模拟器中,一切正常。在iOS模拟器中,我可以选择一个图像,但如果我尝试选择第二个图像,则应用程序崩溃,并在运行选项卡中打印“与设备失去连接”-但没有错误。

问:如何修复此问题,以便我可以在iOS上多次返回图库并选择不同的图像?

在调试时,我遇到了这样的情况:

PlatformException(multiple_request, Cancelled by a second request, null, null)

我已经经历了尽可能多的类似问题,我可以在这里找到,GitHub等。我有:

  • 增强Flutter
  • 升级的pub文件
  • Flutter 清洗
  • 在Xcode中清理和构建
  • 在flutter代码中添加了'imageCache.clear()'
  • 在android studio中使缓存无效并重新启动
  • Flutter医生-v:未发现问题
  • 检查了权限(info.plist和添加的permission_handler包)
  • 重新启动模拟器
  • 清除模拟器中的所有内容和设置
  • 使用断点进行调试会奇怪地阻止问题发生几次,然后在几次选择后,应用程序再次崩溃¯*()*/¯

我确信这是一件直截了当的事情,但我觉得我已经用尽了我所有的选择,不知道从这里去哪里。

txu3uszq

txu3uszq1#

你的代码是正确的,这是一个模拟器的问题,如果你想在IOS上测试它,你必须在一个真实的的iPhone上测试,这里是一个片段,你可以如何正确地做到这一点:

final imagePicker = ImagePicker();
    PickedFile pickedFile;
    if (fileType == FileType.Camera) {
      // Camera Part
      pickedFile = await imagePicker.getImage(
        source: ImageSource.camera,
        maxWidth: 480,
        maxHeight: 640,
        imageQuality: 25, // pick your desired quality
      );
      setState(() {
        if (pickedFile != null) {
          _storedFile = File(pickedFile.path);
        } else {
          print('No image selected.');
          return;
        }
      });
    } else if (fileType == FileType.Gallery) {
      // Gallery Part
      pickedFile = await imagePicker.getImage(
        source: ImageSource.gallery,
        maxWidth: 480,
        maxHeight: 640,
        imageQuality: 25,
      );
        } else {
          print('No image selected.');
          return;
        }
      });
    }

当用户选择他想要获取图像的方式时,不要忘记枚举:

enum FileType {
  Gallery,
  Camera,
  Video,
}

编辑:每当你添加一个依赖于本机代码的包时,你应该重新启动整个应用程序构建b停止你的构建并重新启动它,这样本机代码就能很好地编译,在把这个包放到你的pubspec.yaml之前不要忘记重新启动。

相关问题