[英]Flutter: 'Lost connection to device.' second time using image_picker to select photo from gallery on iOS
I am developing a mobile app in flutter that requires the user to select an image from the gallery.我正在 Flutter 中开发一个移动应用程序,它需要用户从图库中选择一个图像。
I am using image_picker: ^0.6.7+11 and here is my code:我正在使用 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');
}
}
In the android emulator, everything works fine.在 android 模拟器中,一切正常。 In the iOS simulator I am able to choose an image, but if I try to choose a second image then the app crashes and 'Lost connection to device.'
在 iOS 模拟器中,我可以选择一个图像,但如果我尝试选择第二个图像,则应用程序会崩溃并显示“与设备的连接丢失”。 is printed in the run tab - but no errors.
打印在运行选项卡中 - 但没有错误。
Question: How can I fix this so that I can go back to the gallery and select a different image as many times as I want on iOS?问题:如何解决此问题,以便我可以返回图库并在 iOS 上根据需要多次选择不同的图像?
When debugging I have come across this:调试时我遇到了这个:
PlatformException(multiple_request, Cancelled by a second request, null, null)
I have gone through as many similar questions as I can find on here, GitHub etc... I have:我已经在这里、GitHub 等上找到了尽可能多的类似问题......我有:
I'm sure its something straight forward but I feel like I have exhausted all my options and not sure where to go from here.我确信它是直接的,但我觉得我已经用尽了所有的选择,不知道从哪里开始。
Your code is right and it is a simulator problem,if you want to test it on IOS, you have to test on a real IPhone and here is a snippet on how properly you can do it:你的代码是正确的,这是一个模拟器问题,如果你想在 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;
}
});
}
and don't forget the enum when the user picks the way he wants to get the image:并且当用户选择他想要获取图像的方式时不要忘记枚举:
enum FileType {
Gallery,
Camera,
Video,
}
Edit: whenever you add a package that depends on native code, you should restart the whole app build b stopping your build and restarting it again so the native code compiles well, don't forget to restart before putting this package in your pubspec.yaml编辑:每当您添加依赖于本机代码的包时,您应该重新启动整个应用程序构建 b 停止您的构建并再次重新启动它以便本机代码编译良好,不要忘记在将此包放入您的 pubspec.yaml 之前重新启动
Hope it helps, if this answer helped you, don't forget to mark as answered and upvote it please.希望它有帮助,如果这个答案对您有帮助,请不要忘记标记为已回答并请点赞。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.