Flutter图片选择插件image_picker_updated的使用

Flutter图片选择插件image_picker_updated的使用

image picker updated

Platform Pub Package Likes Forks

一个类似于Facebook Messenger相册选择器和相机的Flutter插件,结合为单一组件。相册视图和相机视图也可以作为Flutter小部件使用。其底层使用了[Photo Manager](https://pub.dev/packages/photo_manager)和[Camera](https://pub.dev/packages/camera)。


目录


安装

1. 添加依赖

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

dependencies:
  image_picker_updated: ^最新版本号

2. 安装依赖

可以通过以下命令安装包:

通过pub

$ pub get

通过Flutter

$ flutter pub get

3. 导入包

在Dart代码中导入以下包:

import 'package:image_picker_updated/image_picker_updated.dart';

平台设置

更多详细信息可以查看Photo ManagerCamera的文档。

Android

android/app/build.gradle文件中将最低Android SDK版本设置为21或更高:

minSdkVersion 21

所需权限:

  • INTERNET
  • READ_EXTERNAL_STORAGE
  • WRITE_EXTERNAL_STORAGE
  • ACCESS_MEDIA_LOCATION

如果不需要ACCESS_MEDIA_LOCATION权限,可以参考禁用ACCESS_MEDIA_LOCATION权限部分。

Glide

Android原生使用Glide来生成图像缩略图,版本为4.11.0。

如果您的其他Android库也使用了该库且版本不同,则需要编辑Android项目的build.gradle文件:

rootProject.allprojects {

    subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'com.github.bumptech.glide'
                        && details.requested.name.contains('glide')) {
                    details.useVersion '4.11.0'
                }
            }
        }
    }
}

如果需要使用ProGuard,可以参考Glide的ProGuard文档

移除媒体位置权限

Android默认包含ACCESS_MEDIA_LOCATION权限。此权限从Android Q开始引入。如果您的应用不需要此权限,可以在应用的Android清单文件中添加以下节点:

<uses-permission
  android:name="android.permission.ACCESS_MEDIA_LOCATION"
  tools:node="remove"
/>

如果遇到与Glide相关的警告日志,则主项目需要实现AppGlideModule。详见Generated API

iOS

Info.plist文件中添加以下内容:

<key>NSPhotoLibraryUsageDescription</key>
<string>替换为您的权限描述...</string>
<key>NSCameraUsageDescription</key>
<string>替换为您的权限描述...</string>
<key>NSMicrophoneUsageDescription</key>
<string>替换为您的权限描述...</string>

相册

1. 使用SlidableGallery使相册视图可滑动,否则忽略。

class PickerDemo extends StatelessWidget {
  late final GalleryController controller;

  ...

  @override
  Widget build(BuildContext context) {
    return SlidableGallery(
      controller: controller,
      child: Scaffold(
        body: ...,
      ),
    );
  }
}

2. 使用GallerySetting为媒体选择提供更多设置。

  • 使用pick()函数在控制器上选择媒体。
class PickerDemo extends StatelessWidget {
  late final GalleryController controller;

  @override
  void initState() {
    super.initState();
    controller = GalleryController();
  }

  final _gallerySetting = GallerySetting(
      enableCamera: true,
      maximumCount: 10,
      requestType: RequestType.all,
      editorSetting: EditorSetting(colors: _colors, stickers: _stickers1),
      cameraSetting: const CameraSetting(videoDuration: Duration(seconds: 15)),
      cameraTextEditorSetting: EditorSetting(
        backgrounds: _defaultBackgrounds,
        colors: _colors.take(4).toList(),
        stickers: _stickers2,
      ),
      cameraPhotoEditorSetting: EditorSetting(
        colors: _colors.skip(4).toList(),
        stickers: _stickers3,
      ),
    );

  ...

  onPressed: () async {
    final entities = await controller.pick(context, setting: _gallerySetting);
  }

  ...
}

3. 使用GalleryViewField类似于Flutter的TextField来选择媒体。(推荐方法,因为创建和销毁控制器已经处理好了)

  • onChanged – 当用户选择/取消选择媒体时触发。
  • onSubmitted – 当用户完成选择时触发。
GalleryViewField(
  selectedEntities: [],
  onChanged: (entity, removed) {
     ...
  },
  onSubmitted: (list) {
     ...
  },
  child: const Icon(Icons.camera),
),

4. 您还可以将GalleryView作为Widget使用。

  • 浏览示例应用程序以了解更多深入的实现和自定义。

相机

1. 在CameraView上使用pick()函数选择媒体。

...
onPressed: () async {
  final entity = await CameraView.pick();
}
...

2. 使用CameraViewField类似于Flutter的TextField来选择媒体。

  • onCapture – 当照片/视频捕获完成时触发。
GalleryViewField(
  onCapture: (entity) {
     ...
  },
  child: const Icon(Icons.camera),
),

更多关于Flutter图片选择插件image_picker_updated的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


image_picker_updatedimage_picker 插件的一个更新版本,用于在 Flutter 应用中选择图片或拍摄照片。它的使用方式与 image_picker 类似,但可能包含了一些新的功能或修复了旧版本中的一些问题。

以下是使用 image_picker_updated 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 image_picker_updated 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  image_picker_updated: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 image_picker_updated 插件:

import 'package:image_picker_updated/image_picker_updated.dart';

3. 使用 ImagePickerUpdated 选择图片

你可以使用 ImagePickerUpdated 类来选择图片或拍摄照片。以下是一个简单的示例:

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

class ImagePickerExample extends StatefulWidget {
  @override
  _ImagePickerExampleState createState() => _ImagePickerExampleState();
}

class _ImagePickerExampleState extends State<ImagePickerExample> {
  PickedFile? _imageFile;

  Future<void> _pickImage(ImageSource source) async {
    final picker = ImagePickerUpdated();
    final pickedFile = await picker.getImage(source: source);

    setState(() {
      _imageFile = pickedFile;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker Example'),
      ),
      body: Center(
        child: _imageFile == null
            ? Text('No image selected.')
            : Image.file(File(_imageFile!.path)),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[
          FloatingActionButton(
            onPressed: () => _pickImage(ImageSource.camera),
            tooltip: 'Pick Image',
            child: Icon(Icons.camera),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: () => _pickImage(ImageSource.gallery),
            tooltip: 'Pick Image',
            child: Icon(Icons.photo_library),
          ),
        ],
      ),
    );
  }
}

4. 处理权限

在使用相机或访问相册时,你可能需要处理权限。在 Android 和 iOS 上,你需要在 AndroidManifest.xmlInfo.plist 中添加相应的权限声明。

Android:android/app/src/main/AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

iOS:ios/Runner/Info.plist 中添加以下键值对:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to select photos.</string>
回到顶部