繁体   English   中英

颤振:“与设备的连接丢失。” 第二次使用 image_picker 从 iOS 上的图库中选择照片

[英]Flutter: 'Lost connection to device.' second time using image_picker to select photo from gallery on iOS

我正在 Flutter 中开发一个移动应用程序,它需要用户从图库中选择一个图像。

我正在使用 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 等上找到了尽可能多的类似问题......我有:

  • 升级的颤振
  • 升级的 pub 文件
  • 扑干净
  • 在 Xcode 中清理和构建
  • 在颤振代码中添加了“imageCache.clear()”
  • 使缓存无效并在 android studio 中重新启动
  • flutter doctor -v : 没有发现问题
  • 检查权限(info.plist 并添加了permission_handler 包)
  • 重新启动模拟器
  • 删除模拟器中的所有内容和设置
  • 使用断点调试奇怪地阻止问题发生几次然后在几次选择后应用程序再次崩溃¯\\ (ツ)

我确信它是直接的,但我觉得我已经用尽了所有的选择,不知道从哪里开始。

你的代码是正确的,这是一个模拟器问题,如果你想在 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 之前重新启动

希望它有帮助,如果这个答案对您有帮助,请不要忘记标记为已回答并请点赞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM