Flutter图片选择与相机及相册访问插件camera_gallery_image_picker的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter图片选择与相机及相册访问插件 camera_gallery_image_picker 的使用

camera_gallery_image_picker 是一个用于在Flutter应用中简单且可定制地从相机拍摄照片和从相册选择照片的插件。它支持同时从相机和相册中选择图片。

平台支持

Android iOS macOS Web Linux Windows

安装

在您的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  camera_gallery_image_picker: ^0.0.4

然后运行 flutter pub get 来安装该包。

iOS配置

在您的 Info.plist 文件中添加以下键值对:

<key>NSCameraUsageDescription</key>
<string>Describe why you need camera permission</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Describe why you need photo library permission</string>

Android配置

无需任何额外配置。

使用方法

首先,导入该包:

import 'package:camera_gallery_image_picker/camera_gallery_image_picker.dart';

示例代码

以下是一个完整的示例应用程序,展示了如何使用 camera_gallery_image_picker 插件来捕获或选择图片,并在UI上显示它们。

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:camera_gallery_image_picker/camera_gallery_image_picker.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example Camera Gallery Image Picker',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const CameraGalleryImagePickerExample(),
    );
  }
}

class CameraGalleryImagePickerExample extends StatefulWidget {
  const CameraGalleryImagePickerExample({super.key});

  [@override](/user/override)
  State<CameraGalleryImagePickerExample> createState() => _CameraGalleryImagePickerState();
}

class _CameraGalleryImagePickerState extends State<CameraGalleryImagePickerExample> {
  File? _imageFile;
  List<File> _multipleImageFiles = [];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Image Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            if (_imageFile != null) ...[
              Image.file(
                _imageFile!,
                height: 200,
              ),
              const SizedBox(height: 20),
            ],
            if (_multipleImageFiles.isNotEmpty) ...[
              SingleChildScrollView(
                scrollDirection: Axis.horizontal,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: _multipleImageFiles
                      .map(
                        (File file) => Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Image.file(
                            file,
                            height: 100,
                          ),
                        ),
                      )
                      .toList(),
                ),
              ),
              const SizedBox(height: 20),
            ],
            TextButton(
              onPressed: () async {
                _imageFile = await CameraGalleryImagePicker.pickImage(
                  context: context,
                  source: ImagePickerSource.camera,
                );
                setState(() {});
              },
              child: const Text(
                'Capture Image from Camera',
              ),
            ),
            const SizedBox(height: 10),
            TextButton(
              onPressed: () async {
                _imageFile = await CameraGalleryImagePicker.pickImage(
                  context: context,
                  source: ImagePickerSource.gallery,
                );
                setState(() {});
              },
              child: const Text(
                'Pick Image from Gallery',
              ),
            ),
            const SizedBox(height: 10),
            TextButton(
              onPressed: () async {
                _imageFile = await CameraGalleryImagePicker.pickImage(
                  context: context,
                  source: ImagePickerSource.both,
                );
                setState(() {});
              },
              child: const Text(
                'Pick Image from Both',
              ),
            ),
            const SizedBox(height: 10),
            TextButton(
              onPressed: () async {
                _multipleImageFiles = await CameraGalleryImagePicker.pickMultiImage();
                setState(() {});
              },
              child: const Text(
                'Pick Multiple Images',
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter图片选择与相机及相册访问插件camera_gallery_image_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片选择与相机及相册访问插件camera_gallery_image_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个使用 camera_gallery_image_picker 插件在 Flutter 中实现图片选择(从相机或相册)的示例代码。这个插件结合了相机和相册访问的功能,非常适合你的需求。

首先,确保你已经在 pubspec.yaml 文件中添加了 camera_gallery_image_picker 依赖:

dependencies:
  flutter:
    sdk: flutter
  camera_gallery_image_picker: ^latest_version  # 请替换为最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中使用以下代码来实现图片选择功能:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Image Picker Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ImagePickerScreen(),
    );
  }
}

class ImagePickerScreen extends StatefulWidget {
  @override
  _ImagePickerScreenState createState() => _ImagePickerScreenState();
}

class _ImagePickerScreenState extends State<ImagePickerScreen> {
  File? _imageFile;

  Future<void> _pickImage() async {
    final PickerOptions options = PickerOptions(
      pickType: PickType.image,
      selectCount: 1,
    );

    final PickerResult? result = await ImagePicker().pickImage(options: options);

    if (result != null && result.files.isNotEmpty) {
      setState(() {
        _imageFile = File(result.files.first.path);
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _imageFile == null
                ? Text('No image selected.')
                : Image.file(_imageFile!),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pickImage,
              child: Text('Pick Image from Camera or Gallery'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在 pubspec.yaml 中添加 camera_gallery_image_picker 依赖。
  2. 导入包:在 Dart 文件中导入 camera_gallery_image_picker 包。
  3. 定义主应用:在 MyApp 类中定义应用的主结构。
  4. 创建图片选择屏幕:在 ImagePickerScreen 类中定义图片选择屏幕的状态管理。
  5. 选择图片:定义 _pickImage 方法,用于打开图片选择器。这里使用了 PickerOptions 来设置选择类型(图片)和选择数量(1张)。
  6. 显示图片:在 build 方法中,根据 _imageFile 的值显示图片或文本。
  7. 按钮触发:使用 ElevatedButton 来触发图片选择。

这段代码展示了如何使用 camera_gallery_image_picker 插件在 Flutter 应用中实现图片选择功能。用户可以通过点击按钮从相机或相册中选择图片,并在屏幕上显示所选图片。

回到顶部