【问题标题】:Flutter Image_Picker doesn't pick image from gallery and return to appFlutter Image_Picker 不会从图库中选择图像并返回应用程序
【发布时间】:2021-03-10 03:47:25
【问题描述】:

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

  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'),
),

提前谢谢大家

【问题讨论】:

  • 你能把挑选图片时出现的错误包括进来吗?
  • 没有错误@Bach

标签: flutter imagepicker


【解决方案1】:

对于 iOS,如 documentation 中所述,您需要在本机端进行一些与权限相关的配置:

将以下键添加到位于 /ios/Runner/Info.plist 中的 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')),
          ],
        ),
      ),
    );
  }
}

【讨论】:

  • 感谢您的回复,我确实在 info.plist 中包含了权限,并且我按照文档一步一步地进行操作,问题是我什至没有收到错误消息。当图库打开以选择它停留在那里的图像时,我无法选择任何图像,返回应用程序的唯一选择是取消请求。我会附上一个GIF文件
  • @JonVadar 您是否尝试使用我上面包含的简化代码运行?另一种测试方法是创建一个新的 Flutter 应用,进行配置,粘贴代码并再次运行以查看会发生什么
  • 我只是按照你说的做了,用你的代码和同样的问题创建了一个新的应用程序。图库打开,但未选择任何照片。 ?
  • 我放弃了这个包。 @Bach你知道任何其他类似的包,甚至没有任何包来实现它的方法吗?谢谢
  • 好的@Bach,所以显然这个问题与我正在使用的M1 Macs有关。这是我找到的一个线程的链接Link 谢谢你的指示?
【解决方案2】:
 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.');
      }
    });
  }

【讨论】:

  • 我认为使用另一个变量不会影响代码
  • 您是否已授予访问 android 和 ios 的图库或照片的权限。
【解决方案3】:

就我而言,我将图像选择器库从 0.6.3 更新为 0.8.4 希望这对任何人都有帮助。

【讨论】:

    【解决方案4】:

    您需要在 iOS 模块的 info.plist 文件中添加用户权限(键)和用途(值)。

    将以下键添加到位于 /ios/Runner/Info.plist 中的 Info.plist 文件:

    NSPhotoLibraryUsageDescription - 描述为什么您的应用需要照片库的权限。这在可视化编辑器中称为隐私 - 照片库使用说明。

    NSCameraUsageDescription - 描述您的应用需要访问相机的原因。这在可视化编辑器中称为隐私 - 相机使用说明。

    依赖: image_picker: ^0.8.4+4

    导入'package:image_picker/image_picker.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.');
      }
    });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多