Flutter媒体选择与创建日期选择器插件media_and_create_date_picker的使用

Flutter媒体选择与创建日期选择器插件media_and_create_date_picker的使用

插件简介

media_and_create_date_picker 是一个用于 Flutter 的插件,可以方便地从设备的相册中选择图片或视频,并获取所选媒体文件的创建日期。


安装

iOS 配置

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

<key>NSPhotoLibraryUsageDescription</key>
<string>您的应用需要访问相册权限。</string>

Android 配置

AndroidManifest.xml 文件中添加以下权限:

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

使用步骤

以下是完整的使用示例代码,展示如何使用该插件从相册中选择图片或视频,并获取其创建日期。

示例代码

import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:heic_to_jpg/heic_to_jpg.dart'; // 用于 HEIC 转换
import 'package:media_and_create_date_picker/media_and_create_date_picker.dart';
import 'package:path/path.dart' as path; // 用于路径处理
import 'package:video_thumbnail/video_thumbnail.dart'; // 用于生成视频缩略图

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late String _path; // 媒体文件路径
  late String _errorMessage; // 错误信息
  late MediaType _type; // 媒体类型(图片或视频)
  late ResultType _resultType; // 操作结果类型
  DateTime? _createDate; // 媒体文件的创建日期
  Uint8List? _videoThumbnail; // 视频缩略图数据

  [@override](/user/override)
  void initState() {
    super.initState();
    _init(); // 初始化状态
  }

  void _init() {
    _path = ''; // 清空文件路径
    _type = MediaType.unknown; // 清空媒体类型
    _resultType = ResultType.none; // 清空结果类型
    _createDate = null; // 清空创建日期
    _videoThumbnail = null; // 清空视频缩略图
    _errorMessage = ''; // 清空错误信息
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('媒体选择与创建日期选择器示例'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              // 按钮用于触发媒体选择
              RaisedButton(
                child: Text('选择媒体'),
                onPressed: () async {
                  _init(); // 初始化状态

                  // 打开媒体选择器
                  final result = await MediaAndCreateDatePicker.pickMedia;
                  if (result.mediaType == MediaType.video) {
                    // 如果选择的是视频,生成缩略图
                    _videoThumbnail = await VideoThumbnail.thumbnailData(
                      video: result.path,
                      imageFormat: ImageFormat.JPEG,
                      maxWidth: 200,
                      quality: 20,
                    );
                  }

                  // 处理 HEIC 文件(如果需要)
                  final extension = path.extension(result.path);
                  var filePath = '';
                  if (RegExp('.(heic|HEIC)').hasMatch(extension)) {
                    print('将 HEIC 转换为 JPG');
                    var convert = await HeicToJpg.convert(result.path);
                    filePath = convert ?? '';
                  } else {
                    filePath = result.path;
                  }

                  // 更新界面状态
                  setState(() {
                    _path = filePath;
                    _createDate = result.createDate;
                    _type = result.mediaType;
                    _resultType = result.resultType;
                    _errorMessage = result.error.toString();
                    print('媒体类型: $_type');
                    print('结果类型: $_resultType');
                    print('文件路径: $_path');
                    print('创建日期: $_createDate');
                    print('错误信息: $_errorMessage');
                  });
                },
              ),
              // 显示创建日期
              Center(child: Text('创建日期: $_createDate')),
              // 显示结果类型
              Center(child: Text('结果类型: ${_resultType.toString()}')),
              // 显示媒体类型
              Center(child: Text('媒体类型: ${_type.toString()}')),
              // 显示错误信息
              Center(child: Text('错误信息: $_errorMessage')),
              // 显示选择的媒体
              _path != ''
                  ? Center(
                      child: _type == MediaType.image
                          ? Image.file(
                              File(_path),
                              width: 200,
                            ) // 显示图片
                          : _videoThumbnail != null
                              ? Image.memory(_videoThumbnail!) // 显示视频缩略图
                              : SizedBox.shrink(), // 如果没有缩略图则不显示
                    )
                  : SizedBox.shrink(),
              // 显示文件路径
              _path != ''
                  ? Center(child: Text(_path))
                  : SizedBox.shrink(),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter媒体选择与创建日期选择器插件media_and_create_date_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter媒体选择与创建日期选择器插件media_and_create_date_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


media_and_create_date_picker 是一个 Flutter 插件,用于从设备的媒体库中选择媒体文件(如图片或视频),并允许用户选择或输入创建日期。这个插件结合了媒体选择和日期选择的功能,适用于需要处理媒体文件及其元数据的应用场景。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  media_and_create_date_picker: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用插件

以下是一个简单的示例,展示如何使用 media_and_create_date_picker 插件来选择媒体文件并选择创建日期。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MediaAndDatePickerDemo(),
    );
  }
}

class MediaAndDatePickerDemo extends StatefulWidget {
  [@override](/user/override)
  _MediaAndDatePickerDemoState createState() => _MediaAndDatePickerDemoState();
}

class _MediaAndDatePickerDemoState extends State<MediaAndDatePickerDemo> {
  String? _mediaPath;
  DateTime? _createDate;

  Future<void> _pickMediaAndDate() async {
    final result = await MediaAndCreateDatePicker.pickMediaAndDate(
      context,
      mediaType: MediaType.image, // 选择图片或视频
    );

    if (result != null) {
      setState(() {
        _mediaPath = result.mediaPath;
        _createDate = result.createDate;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Media and Date Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (_mediaPath != null)
              Image.file(
                File(_mediaPath!),
                height: 200,
              ),
            if (_createDate != null)
              Text(
                'Create Date: ${_createDate!.toLocal()}',
                style: TextStyle(fontSize: 18),
              ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pickMediaAndDate,
              child: Text('Pick Media and Date'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部