Flutter Image_Picker无法从图库中选取图像并返回应用程序

0wi1tuuw  于 2022-12-14  发布在  Flutter
关注(0)|答案(5)|浏览(298)

Here is a what's happening :我正在尝试将图片从图库上传到iOS模拟器上的应用程序。Image Picker可以打开图库,但无法选择图片并返回应用程序。以下是我的简单代码:

File _image;
  final picker = ImagePicker();

  Future getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.gallery);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {
        print('No image selected.');
      }
    });
  }

和我小部件:

body: Center(
        child: _image != null ? Image.file(_image) : Text('no Image'),
),

提前感谢大家

4nkexdtk

4nkexdtk1#

对于iOS,如documentation中所述,您需要在本机端进行一些与权限相关的配置:
将以下键添加到Info.plist文件(位于/ios/Runner/Info.plist中):

  • NSPhotoLibraryUsageDescription -描述您的应用需要照片库权限的原因。这在可视化编辑器中称为隐私-照片库使用描述。
  • NSCameraUsageDescription -描述您的应用需要访问摄像头的原因。这在可视化编辑器中称为隐私-摄像头使用描述。
  • NSMicrophoneUsageDescription -如果您打算录制视频,请描述您的应用需要访问麦克风的原因。这在可视编辑器中称为隐私-麦克风使用描述。

除此之外,它应该可以很好地与你的代码一起工作。图像应该适合像这样的Flexible,或者可能是一个SizedBox以避免溢出:

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(MaterialApp(
    home: SampleScreen(),
  ));
}

class SampleScreen extends StatefulWidget {
  @override
  _SampleScreenState createState() => _SampleScreenState();
}

class _SampleScreenState extends State<SampleScreen> {
  File _image;
  final picker = ImagePicker();

  Future getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.gallery);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {
        print('No image selected.');
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            FlatButton(onPressed: () => getImage(), child: Text('Press me')),
            Flexible(child: _image != null ? Image.file(_image) : Text('no Image')),
          ],
        ),
      ),
    );
  }
}
jtw3ybtb

jtw3ybtb2#

File _image;
 String _image1 = "";

 Future getImage() async {

    final pickedFile = await picker.getImage(source: ImageSource.gallery);
    setState(() {
      if (pickedFile != null) {
        _image1 = pickedFile.path;
        _image = File(pickedFile.path);
        print(json.encode(_image1));
        print("file path...");
      } else {
        print('No image selected.');
      }
    });
  }
q5lcpyga

q5lcpyga3#

在我的例子中,我将我的图像拾取器库从0.6.3更新为0.8.4,希望这对任何人都有帮助。

kzmpq1sx

kzmpq1sx4#

您需要在iOS模块的info.plist文件中添加用户权限(密钥)和这些权限的用途(值)。
将以下键添加到Info.plist文件(位于/ios/Runner/Info.plist中):
NSPhotoLibraryUsageDescription -描述您的应用需要照片库权限的原因。这在可视化编辑器中称为隐私-照片库使用描述。
NSCameraUsageDescription -描述您的应用需要访问摄像头的原因。这在可视化编辑器中称为隐私-摄像头使用描述。
相关性:图像选择器(_P):^0.8.4+4个
导入“软件包:图像拾取器/图像拾取器. dart”;

final picker = ImagePicker();

Future pickImage() async {
setState(() {
  picselected1 = false;
});
ImagePicker picker = ImagePicker();
PickedFile pickedFile;
pickedFile = await picker.getImage(
  source: ImageSource.gallery,
);

setState(() {
  if (pickedFile != null) {
    picselected1 = true;
    // _images.add(File(pickedFile.path));
    _image = File(pickedFile.path); // Use if you only need a single picture
  } else {
    print('No image selected.');
  }
});
}
xjreopfe

xjreopfe5#

对于每个还在处理这个问题的人
请不要在image_picker文档中出现此问题,并确保在真实的设备上进行了测试:
从版本0.8.1开始,iOS实现使用PHPicker在iOS 14或更高版本上拾取(多个)图像。由于实现了PHPicker,因此无法在iOS 14+的iOS模拟器上拾取HEIC图像。这是一个已知问题。请在真实的设备上测试此问题,或使用非HEIC图像进行测试,直到Apple解决此问题

相关问题