在 Flutter 中从图库或相机中选择图像

Selecting image from Gallery or Camera in Flutter

我正在尝试为用户提供一种从他们的图库或相机中添加照片的方法,但是在按下按钮后,flutter 一直崩溃。

我已经实施了图像选择器依赖项以及 Dart:io,迁移到了 Android X,但是,仍然没有成功。这是我的一些代码:

class _PreferencesState extends State<_Preferences>
    with TickerProviderStateMixin {


File _image;
getImage(bool isCamera) async {
   File image;

if (isCamera) {
  image = await ImagePicker.pickImage(source: ImageSource.camera);
} else {
  image = await ImagePicker.pickImage(source: ImageSource.gallery);
}

setState(() {
  _image = image;
  });
}

然后在这里调用:

  FlatButton(
      textColor: Theme.of(context).primaryColor,
      child: Text('Use Camera'),
      onPressed: () {
          getImage(true);
      },
  ),
  _image == null
      ? Container()
      : Image.file(
          _image,
          height: 300,
          width: 300,
      ),    

每次调用该方法时都会出现此错误:

Exception has occurred. PlatformException (PlatformException(error, Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference, null))

我以为我将图像类型从 null 更改为它不会被调用,但是我不确定在这里还能做什么。

崩溃可能是由于相机许可。 Image picker 插件移除了相机权限条件。当我们访问相机时,应用程序会要求我们获得许可,但不再支持这种情况。我们需要使用 permission_handler 插件手动请求权限。阅读有关此更改的更多详细信息 here and see this link 如何使用 permission_handler 添加运行时权限。希望这能解决您的问题。

这可能不是最好的方法,但如果您想更快、更轻松地解决问题,您可以清理所有包并删除项目,然后重新构建它。整个过程使用以下命令:

导航到包含 pubspec.yaml 文件的文件夹并在您的终端上执行以下功能:

[user@machine~]$ flutter clean
[user@machine~]$ adb uninstall com.example.myfirst
[user@machine~]$ flutter build apk
[user@machine~]$ flutter pub get
[user@machine~]$ flutter doctor -v
[user@machine~]$ flutter pub upgrade --major-versions
[user@machine~]$ flutter run

当 android sdk phone 启动时,确保您允许该应用程序访问您的 phone 文件,当您单击按钮从图库上传 images/files 时

N/B:这适用于我的应用程序可能适用于您的应用程序。