在 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:这适用于我的应用程序可能适用于您的应用程序。
我正在尝试为用户提供一种从他们的图库或相机中添加照片的方法,但是在按下按钮后,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:这适用于我的应用程序可能适用于您的应用程序。