Flutter Image Picker已处于活动状态,null异常

时间:2019-02-17 20:48:13

标签: flutter flutter-dependencies

在我的flutter项目中,每当尝试使用flutter的image_picker插件从Camera或Gallery拾取图像时,都会遇到异常。

它第一次请求许可,当我允许照相机时,它会抛出

  

java.lang.NullPointerException:尝试调用虚拟方法   'android.content.res.XmlResourceParser   android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,java.lang.String)'在空对象引用上

之后,每次后续尝试都会引发异常

  

PlatformException(已经激活,图像选择器已经处于活动状态,   空)

即使重新启动应用程序后,我仍然尝试选择相机​​或图库。

var imageSource;
if (source == CAMERA_SOURCE) {
    imageSource = ImageSource.camera;
} else {
    imageSource = ImageSource.gallery;
}

try {
     final file = await ImagePicker.pickImage(source: imageSource);
     if (file == null) {
     throw Exception('File is not available');
 }

下面是依赖项:

cupertino_icons: ^0.1.2
firebase_auth: ^0.8.1
cloud_firestore: ^0.9.0+1
firebase_core: ^0.3.0+1
firebase_messaging: ^3.0.1
firebase_storage: ^2.0.1
intl_translation: ^0.17.3
http: ^0.12.0+1
xml: ^3.3.1
uuid: ^2.0.0
shared_preferences: ^0.5.1+1
flutter_staggered_grid_view: ^0.2.7
google_sign_in: ^4.0.1
flutter_signin_button: ^0.2.5
image_picker: ^0.5.0+2
mlkit: ^0.9.0
path_provider: ^0.5.0+1

感谢您的时间!我还尝试将Flutter升级到最新版本。

7 个答案:

答案 0 :(得分:3)

更改 android/build.gradle 类路径 'com.android.tools.build:gradle:3.5.4'

这对我有用。

答案 1 :(得分:1)

我将软件包从0.5.4+3更新为^0.6.5+2,这解决了我的问题。

如果您阅读变更日志,则将看到所有已解决的问题:https://pub.dev/packages/image_picker#-changelog-tab-

答案 2 :(得分:0)

最后我能够解决它。

我更新了所有依赖项和flutter SDK,然后进行了Flutter清理并开始工作。.

感谢您的时间和帮助

答案 3 :(得分:0)

按照注释中的说明删除并重新安装应用程序可以解决此问题。

答案 4 :(得分:0)

就我而言,我没有授予对“文件”的访问权限。连接USB时,如图所示提供访问权限: enter image description here

答案 5 :(得分:0)

如果你有基于通道的代码,即原生 Android 和 Flutter 之间的桥梁.. 在主活动中 活动结果 .. 尝试添加..

<块引用>

super.onActivityResult(requestCode, resultCode, data)

答案 6 :(得分:0)

无论如何,我在使用 Image Picker 时遇到了同样的问题。

问题解决了,需要在release模式下提供访问相机和内存的权限。

在安卓上: 在文件 src/main/AndroidManifest.xml 上添加行:在清单标记内

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在IOS上: 在文件 Info.plist 上添加行:

<key>NSPhotoLibraryUsageDescription</key>
<string>Allow access to photo library</string>

<key>NSCameraUsageDescription</key>
<string>Allow access to camera to capture photos</string>

祝你好运,希望有用!