iOS 的 flutter 应用程序中的图像拾取错误
Getting error in Image picking in flutter application for iOS
我在 flutter 应用程序中有两个图像按钮可以从图库中选择图像,当我按下任何一个 ImageButton 并尝试 select 它被成功选择的图像时。之后,当我尝试使用其他图像按钮选择另一张图像时,应用程序崩溃 iOS
每次为获取图像完成不同的调用时选择图像。
下面是每次调用的方法
Future getImage2() async {
print("get image");
PickedFile image = await _picker2.getImage(source: ImageSource.gallery);
// File image = await ImagePicker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
final File file = File(image.path);
avatarImageFile2 = file;
isLoading2 = true;
});
}
}
Future getImage1() async {
print("get image");
PickedFile image = await _picker1.getImage(source: ImageSource.gallery);
// File image = await ImagePicker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
final File file = File(image.path);
avatarImageFile1 = file;
isLoading1 = true;
});
}
}
请指导我该如何解决
如果你没有被添加权限,那么
将以下键添加到您的 Info.plist 文件,位于 /ios/Runner/Info.plist:
NSPhotoLibraryUsageDescription - 描述您的应用需要照片库权限的原因。这在可视化编辑器中称为隐私 - 照片库使用说明。
NSCameraUsageDescription - 描述您的应用需要访问相机的原因。这在可视化编辑器中称为隐私 - 相机使用说明。
NSMicrophoneUsageDescription - 说明如果您打算录制视频,您的应用需要访问麦克风的原因。这在可视化编辑器中称为隐私 - 麦克风使用说明。
如果你已经添加了这个
试试这个代码。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp( home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget { @override
_MyHomePageState createState() =>
_MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File _image; final picker = ImagePicker();
Future getImage() async {
final pickedFile = await picker.getImage(source: ImageSource.camera);
setState(() {
if (pickedFile != null) {
_image = File(pickedFile.path);
} else {
print('No image selected.');
}
});
} @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Picker Example'),
),
body: Center( child: _image == null ? Text('No image selected.') : Image.file(_image),
),
floatingActionButton: FloatingActionButton( onPressed: getImage,
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
}
我在 flutter 应用程序中有两个图像按钮可以从图库中选择图像,当我按下任何一个 ImageButton 并尝试 select 它被成功选择的图像时。之后,当我尝试使用其他图像按钮选择另一张图像时,应用程序崩溃 iOS
每次为获取图像完成不同的调用时选择图像。
下面是每次调用的方法
Future getImage2() async {
print("get image");
PickedFile image = await _picker2.getImage(source: ImageSource.gallery);
// File image = await ImagePicker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
final File file = File(image.path);
avatarImageFile2 = file;
isLoading2 = true;
});
}
}
Future getImage1() async {
print("get image");
PickedFile image = await _picker1.getImage(source: ImageSource.gallery);
// File image = await ImagePicker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
final File file = File(image.path);
avatarImageFile1 = file;
isLoading1 = true;
});
}
}
请指导我该如何解决
如果你没有被添加权限,那么 将以下键添加到您的 Info.plist 文件,位于 /ios/Runner/Info.plist:
NSPhotoLibraryUsageDescription - 描述您的应用需要照片库权限的原因。这在可视化编辑器中称为隐私 - 照片库使用说明。
NSCameraUsageDescription - 描述您的应用需要访问相机的原因。这在可视化编辑器中称为隐私 - 相机使用说明。
NSMicrophoneUsageDescription - 说明如果您打算录制视频,您的应用需要访问麦克风的原因。这在可视化编辑器中称为隐私 - 麦克风使用说明。
如果你已经添加了这个 试试这个代码。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp( home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget { @override
_MyHomePageState createState() =>
_MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File _image; final picker = ImagePicker();
Future getImage() async {
final pickedFile = await picker.getImage(source: ImageSource.camera);
setState(() {
if (pickedFile != null) {
_image = File(pickedFile.path);
} else {
print('No image selected.');
}
});
} @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Picker Example'),
),
body: Center( child: _image == null ? Text('No image selected.') : Image.file(_image),
),
floatingActionButton: FloatingActionButton( onPressed: getImage,
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
}