Flutter图片和视频选择插件gallery_asset_picker的使用

Flutter 图片和视频选择插件 gallery_asset_picker 的使用

Gallery Asset Picker

gallery_asset_picker 是一个集成了图库选择器和相机功能的插件。图库和相机视图都可以作为 Flutter 小部件使用。


目录


截图

折叠模式 展开模式

安装

1. 添加依赖

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

dependencies:
  gallery_asset_picker: ^latest_version
2. 导入

在你的 Dart 代码中导入该插件:

import 'package:gallery_asset_picker/gallery_asset_picker.dart';

配置

对于更详细的配置(如果需要),可以查看 Photo ManagerCamera 的文档部分。

1. Android
  • 将最低的 Android SDK 版本改为 21(或更高)在你的 android/app/build.gradle 文件中:
minSdkVersion 21
  • 添加所需的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
  • 使用 Glide 创建图像缩略图字节:
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'
                }
            }
        }
    }
}
  • 如果你发现一些与 Glide 相关的日志警告,那么主项目需要实现 AppGlideModule。参见 Generated API
2. iOS

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

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

使用

初始化图库配置

使用 GalleryAssetPicker.initialize 方法来配置图库:

GalleryAssetPicker.initialize(GalleryConfig(
    enableCamera: true,
    crossAxisCount: 3,
    colorScheme: const ColorScheme.light(primary: Colors.blue),
    onReachMaximum: () {
      Fluttertoast.showToast(
        msg: "You have reached the allowed number of images",
        toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.CENTER,
        textColor: Colors.white,
        fontSize: 16.0,
      );
    },
    textTheme: const TextTheme(
      bodyMedium: TextStyle(fontSize: 16),
      titleMedium: TextStyle(fontSize: 14, fontWeight: FontWeight.w700),
      titleSmall: TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
    ),
));
滑动图库覆盖层

为了使图库视图滑动,使用 SlidableGalleryOverlay;否则忽略它:

class SlidableGalleryDemo extends StatelessWidget {
  late final GalleryController galleryController;

  // 构造函数和其他逻辑...

  @override
  Widget build(BuildContext context) {
    return SlidableGalleryOverlay(
      controller: galleryController,
      child: Scaffold(
        body: ... // 其他内容
      ),
    );
  }
}
选择资产

使用 GalleryAssetPicker.pick() 方法来选择资产:

onPressed: () async {
  final _selectedAssets = await GalleryAssetPicker.pick(
    context,
    maxCount: 5,
    requestType: RequestType.image,
  );
}

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

1 回复

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


gallery_asset_picker 是一个用于在 Flutter 应用中从设备图库中选择图片和视频的插件。它提供了一个简洁的界面,允许用户从相册中选择多个图片或视频,并返回这些媒体文件的路径或其他相关信息。

安装

首先,你需要将 gallery_asset_picker 添加到你的 pubspec.yaml 文件中:

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

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

基本使用

  1. 导入包

    在你的 Dart 文件中导入 gallery_asset_picker

    import 'package:gallery_asset_picker/gallery_asset_picker.dart';
    
  2. 选择图片或视频

    使用 GalleryAssetPicker.pickAssets 方法来打开图库选择器并选择图片或视频。你可以通过 AssetType 来指定你想要选择的媒体类型(图片、视频或两者)。

    void pickAssets() async {
      final List<AssetEntity>? result = await GalleryAssetPicker.pickAssets(
        context: context,
        maxAssets: 5, // 最多选择5个文件
        assetType: AssetType.image, // 选择图片
      );
    
      if (result != null) {
        for (var asset in result) {
          // 获取文件路径
          String? filePath = await asset.file?.path;
          print('Selected file path: $filePath');
        }
      }
    }
    
  3. 处理选择的资产

    选择完成后,GalleryAssetPicker.pickAssets 会返回一个 List<AssetEntity>,你可以通过这些 AssetEntity 对象来获取文件路径、缩略图等信息。

    String? filePath = await asset.file?.path;
    Uint8List? thumbnail = await asset.thumbData;
    
  4. 显示选择的图片或视频

    你可以使用 Image.fileVideoPlayerController 来显示选择的图片或视频。

    Image.file(File(filePath));
    

    对于视频,你可以使用 video_player 插件来播放:

    VideoPlayerController _controller = VideoPlayerController.file(File(filePath));
    _controller.initialize().then((_) {
      setState(() {});
      _controller.play();
    });
    

高级配置

gallery_asset_picker 还提供了一些高级配置选项,例如:

  • maxAssets: 设置最多可以选择多少个文件。
  • assetType: 设置选择文件的类型(图片、视频或两者)。
  • themeColor: 设置选择器的主题颜色。
  • requestType: 设置请求类型(图片、视频或两者)。

示例代码

以下是一个完整的示例代码,展示了如何使用 gallery_asset_picker 来选择并显示图片:

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> imagePaths = [];

  void pickAssets() async {
    final List<AssetEntity>? result = await GalleryAssetPicker.pickAssets(
      context: context,
      maxAssets: 5,
      assetType: AssetType.image,
    );

    if (result != null) {
      for (var asset in result) {
        String? filePath = await asset.file?.path;
        if (filePath != null) {
          setState(() {
            imagePaths.add(filePath);
          });
        }
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gallery Asset Picker Example'),
      ),
      body: Column(
        children: [
          ElevatedButton(
            onPressed: pickAssets,
            child: Text('Pick Images'),
          ),
          Expanded(
            child: ListView.builder(
              itemCount: imagePaths.length,
              itemBuilder: (context, index) {
                return Image.file(File(imagePaths[index]));
              },
            ),
          ),
        ],
      ),
    );
  }
}

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

注意事项

  • 在 Android 上,你需要确保已经请求了读取外部存储的权限。
  • 在 iOS 上,你需要在 Info.plist 文件中添加相册访问权限的描述。

权限处理

在 Android 中,你可能需要处理运行时权限:

import 'package:permission_handler/permission_handler.dart';

void requestPermissions() async {
  if (await Permission.storage.request().isGranted) {
    // 权限已授予
  } else {
    // 权限被拒绝
  }
}

在 iOS 中,确保在 Info.plist 中添加以下内容:

<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to pick images.</string>
回到顶部