Flutter图片选择插件flutter_images_picker的使用

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

Flutter图片选择插件flutter_images_picker的使用

安装

首先,在pubspec.yaml文件中添加flutter_images_picker作为依赖项。

iOS

此插件要求iOS 14.0或更高版本。

从版本0.1.4开始,iOS实现使用ImagePicker在iOS 14或更高版本上选择(多张)图片。

<项目根目录>/ios/Runner/Info.plist文件中添加以下键:

  • NSPhotoLibraryUsageDescription - 描述为什么应用需要访问照片库。在可视化编辑器中称为“隐私 - 照片库使用描述”。
  • NSCameraUsageDescription - 描述为什么应用需要访问相机。在可视化编辑器中称为“隐私 - 相机使用描述”。
  • NSMicrophoneUsageDescription - 如果您打算录制视频,则需要描述为什么应用需要访问麦克风。在可视化编辑器中称为“隐私 - 麦克风使用描述”。

Android

从版本0.1.4开始,Android实现支持在Android 5.0或更高版本上选择(多张)图片。

无需配置 - 插件应该可以立即使用。

注意: 使用相机拍摄的图片和视频会保存到应用程序的本地缓存中,因此这些图片和视频可能只暂时存在。如果您需要永久存储所选的图片,您有责任将其移动到更持久的位置。

基本用法

void takeImage(BuildContext context) async {
  // 选择最多5张图片
  List<Uri?> images  = await FlutterImagesPicker.pickImages(maxImages: 5);
  // 关闭当前页面
  Navigator.of(context).pop();
}

示例代码

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

import 'package:flutter/services.dart';
import 'package:flutter_images_picker/flutter_images_picker.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: "Images Picker",
      home: TestPage(),
    );
  }
}

class TestPage extends StatefulWidget {
  const TestPage({Key? key}) : super(key: key);

  [@override](/user/override)
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  String _platformVersion = 'Unknown';

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    String? platformVersion;
    try {
      platformVersion = await FlutterImagesPicker.platformVersion;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion ?? "Unknown";
    });
  }

  void takeImage(BuildContext context) async {
    // 选择最多5张图片
    List<Uri?> images = await FlutterImagesPicker.pickImages(maxImages: 5);

    // 关闭当前页面
    Navigator.of(context).pop();
  }

  Future _pickImage(BuildContext context) async {
    var isPopup = false;

    // 显示对话框
    showDialog<void>(
        context: context,
        barrierDismissible: true,
        builder: (BuildContext context) {
          if (!isPopup) {
            isPopup = true;
            takeImage(context);
          }
          return const Center();
        });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行于: $_platformVersion\n'),
        ),
        floatingActionButton: Column(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.only(top: 16.0),
              child: FloatingActionButton(
                onPressed: () {
                  _pickImage(context);
                },
                tooltip: '拍摄照片',
                child: const Icon(Icons.photo_library),
              ),
            ),
          ],
        ));
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_images_picker 插件在 Flutter 应用中选择图片的示例代码。这个插件允许用户从相册或相机中选择图片。

首先,你需要在 pubspec.yaml 文件中添加 flutter_images_picker 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_images_picker: ^x.y.z  # 请替换为最新版本号

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

接下来,在你的 Flutter 项目中实现图片选择功能。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter_images_picker/flutter_images_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> {
  List<AssetEntity> _images = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Image Picker Demo'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: GridView.builder(
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 3,
                crossAxisSpacing: 4.0,
                mainAxisSpacing: 4.0,
              ),
              itemCount: _images.length,
              itemBuilder: (BuildContext context, int index) {
                AssetEntity image = _images[index];
                return Image.file(
                  File(image.originFile.path),
                  fit: BoxFit.cover,
                );
              },
            ),
          ),
          ElevatedButton(
            onPressed: _pickImages,
            child: Text('Pick Images'),
          ),
        ],
      ),
    );
  }

  Future<void> _pickImages() async {
    List<AssetEntity> resultList = await ImagePicker().pickAssets(
      maxAssets: 9,
      requestType: RequestType.image,
      config: PickConfig(
        compressQuality: 100,
        pickMode: PickMode.multiImage,
      ),
    );

    // 更新状态以显示选择的图片
    setState(() {
      _images = resultList;
    });
  }
}

在这个示例中:

  1. MyApp 是应用的根组件,它定义了主题和主页 ImagePickerScreen
  2. ImagePickerScreen 是一个有状态的组件,用于显示选中的图片和一个按钮来选择图片。
  3. _pickImages 方法使用 flutter_images_picker 插件来打开图片选择器,并获取选中的图片。
  4. 选中的图片通过 GridView 显示在屏幕上。

注意:

  • maxAssets: 9 限制了最多可以选择9张图片。
  • compressQuality: 100 表示图片质量不压缩。
  • PickMode.multiImage 表示多图选择模式。

你可以根据需要调整这些参数。确保你已经正确配置了 Android 和 iOS 的权限,以便访问相册和相机。

回到顶部