Flutter媒体选择与查看插件smart_media_picker_and_viewer的使用

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

Flutter媒体选择与查看插件smart_media_picker_and_viewer的使用

简介

smart_media_picker_and_viewer 是一个多功能的 Flutter 插件,用于无缝选择和查看各种媒体类型,包括图片、PDF 和其他文件。该插件提供了可自定义的小部件,以增强您的 Flutter 应用程序中的媒体处理体验。

特性

  • 媒体选择器:轻松选择文件、图片和文档,并具有可自定义的 UI。
  • 媒体查看器:在应用内查看图片和 PDF 文件,内置支持。
  • 可自定义:调整样式、颜色和其他 UI 元素以适应您的应用程序设计。
  • 灵活支持:支持广泛的文件类型,并提供多种显示和交互选项。

截图

媒体选择器示例

Media Picker Example 1

媒体选择器示例 2

Media Picker Example 2

媒体查看器示例

Media Viewer Example 1

媒体查看器示例 2

Media Viewer Example 2

安装

在您的 pubspec.yaml 文件中添加 smart_media_picker_and_viewer

dependencies:
  flutter:
    sdk: flutter
  smart_media_picker_and_viewer: ^0.0.1

然后运行:

flutter pub get

使用

要使用该插件,将其导入到您的 Dart 文件中:

import 'package:smart_media_picker_and_viewer/smart_media_picker_and_viewer.dart';

示例

以下是一个简单的示例,展示如何使用 SmartMediaPickerAndViewer 小部件:

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Smart Media Picker And Viewer',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const PackageView(),
    );
  }
}

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

  @override
  State<PackageView> createState() => _PackageViewState();
}

class _PackageViewState extends State<PackageView> {
  List<File> documentList = [];
  List<File> bankStatementList = [File("pdf")];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.white,
        title: const Text("Smart Media Picker And Viewer"),
      ),
      body: Container(
        margin: const EdgeInsets.all(12),
        padding: const EdgeInsets.all(12),
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.circular(12),
          boxShadow: [
            BoxShadow(
              blurRadius: 12,
              color: Colors.black.withOpacity(.1),
              spreadRadius: 12,
            )
          ],
        ),
        child: ListView(
          children: [
            const Text(
              "Upload Documents",
              textAlign: TextAlign.start,
              style: TextStyle(color: Colors.black, fontSize: 15, height: 1.2),
            ),
            const SizedBox(height: 12),
            SmartMediaPickerAndViewer(
              list: documentList,
              isHideUploadButton: false,
              uploadButtonColor: Colors.blueGrey,
              uploadButtonTextStyle: const TextStyle(fontSize: 8, fontStyle: FontStyle.italic, color: Colors.blueGrey),
              mediaTextStyle: const TextStyle(fontSize: 8, fontStyle: FontStyle.italic, color: Colors.blueGrey),
              removeIconColor: Colors.red,
              removeIconSize: 20,
              buttonHeight: 80,
              buttonWidth: 60,
              buttonPadding: 0,
              mediaHeight: 80,
              mediaWidth: 60,
              onSelect: (list) {
                documentList = list;
              },
            ),
            const Divider(height: 50),
            const Text(
              "here you can pass your docs and view",
              textAlign: TextAlign.start,
              style: TextStyle(color: Colors.black, fontSize: 15, height: 1.2),
            ),
            const Text(
              "Your Documents",
              textAlign: TextAlign.start,
              style: TextStyle(color: Colors.black, fontSize: 15, height: 1.2),
            ),
            const SizedBox(height: 12),
            SmartMediaPickerAndViewer(
              list: bankStatementList,
              isHideUploadButton: true,
              mediaHeight: 80,
              mediaWidth: 60,
              maxLinesForName: 3,
              onSelect: (list) {
                documentList = list;
              },
            ),
          ],
        ),
      ),
    );
  }
}

自定义

您可以自定义 SmartMediaPickerAndViewer 小部件的各个方面:

上传按钮

  • isHideUploadButton:隐藏或显示上传按钮。
  • uploadButtonColor:设置上传按钮的颜色。
  • uploadButtonTextStyle:自定义上传按钮的文本样式。
  • uploadButtonIcon:使用自定义图标作为上传按钮。

媒体显示

  • mediaTextStyle:自定义媒体项的文本样式。
  • removeIconColor:设置移除图标的颜色。
  • removeIconSize:调整移除图标的大小。
  • buttonHeightbuttonWidth:自定义上传按钮的大小。
  • mediaHeightmediaWidth:自定义媒体项的大小。

其他

  • maxLinesForName:控制媒体名称的行数。

额外信息

更多详细信息,请参阅 GitHub 仓库

贡献

欢迎贡献!如果您遇到任何问题或有改进建议,请随时 提交问题 或提交拉取请求。

许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。


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

1 回复

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


当然,以下是如何在Flutter项目中使用smart_media_picker_and_viewer插件的示例代码。这个插件允许用户从设备中选择媒体文件(图片和视频),并查看这些文件。

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

dependencies:
  flutter:
    sdk: flutter
  smart_media_picker_and_viewer: ^最新版本号  # 替换为实际最新版本号

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

接下来,你可以在你的Flutter项目中使用这个插件。下面是一个简单的示例,展示如何使用smart_media_picker_and_viewer来选择和查看媒体文件。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Smart Media Picker and Viewer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MediaPickerDemo(),
    );
  }
}

class MediaPickerDemo extends StatefulWidget {
  @override
  _MediaPickerDemoState createState() => _MediaPickerDemoState();
}

class _MediaPickerDemoState extends State<MediaPickerDemo> {
  List<MediaFile> selectedMediaFiles = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Smart Media Picker and Viewer Demo'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: () async {
              List<MediaFile> result = await SmartMediaPicker().pickMedia(
                context,
                type: MediaType.all, // MediaType.image 或 MediaType.video
                maxCount: 10,
              );

              if (result != null && result.isNotEmpty) {
                setState(() {
                  selectedMediaFiles = result;
                });
              }
            },
            child: Text('Select Media'),
          ),
          SizedBox(height: 20),
          Expanded(
            child: selectedMediaFiles.isEmpty
                ? Center(child: Text('No media selected'))
                : GridView.builder(
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 2,
                      crossAxisSpacing: 4.0,
                      mainAxisSpacing: 4.0,
                    ),
                    itemCount: selectedMediaFiles.length,
                    itemBuilder: (context, index) {
                      return GestureDetector(
                        onTap: () {
                          SmartMediaViewer.viewMedia(
                            context,
                            selectedMediaFiles,
                            initialIndex: index,
                          );
                        },
                        child: Image.file(
                          File(selectedMediaFiles[index].path),
                          fit: BoxFit.cover,
                        ),
                      );
                    },
                  ),
          ),
        ],
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个简单的Flutter应用,包含一个按钮和一个用于显示所选媒体文件的GridView
  2. 当用户点击“Select Media”按钮时,会调用SmartMediaPicker().pickMedia方法来打开媒体选择界面。
  3. 用户选择的媒体文件会保存在selectedMediaFiles列表中。
  4. GridView中,我们为每个媒体文件显示一个缩略图,并且当用户点击缩略图时,会调用SmartMediaViewer.viewMedia方法来显示媒体查看器。

确保在实际应用中处理文件路径和权限问题,特别是在Android和iOS上访问媒体文件时。你可能需要在AndroidManifest.xmlInfo.plist中添加必要的权限声明。

回到顶部