Flutter媒体选择与查看插件smart_media_picker_and_viewer的使用
Flutter媒体选择与查看插件smart_media_picker_and_viewer的使用
简介
smart_media_picker_and_viewer
是一个多功能的 Flutter 插件,用于无缝选择和查看各种媒体类型,包括图片、PDF 和其他文件。该插件提供了可自定义的小部件,以增强您的 Flutter 应用程序中的媒体处理体验。
特性
- 媒体选择器:轻松选择文件、图片和文档,并具有可自定义的 UI。
- 媒体查看器:在应用内查看图片和 PDF 文件,内置支持。
- 可自定义:调整样式、颜色和其他 UI 元素以适应您的应用程序设计。
- 灵活支持:支持广泛的文件类型,并提供多种显示和交互选项。
截图
媒体选择器示例
媒体选择器示例 2
媒体查看器示例
媒体查看器示例 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
:调整移除图标的大小。buttonHeight
,buttonWidth
:自定义上传按钮的大小。mediaHeight
,mediaWidth
:自定义媒体项的大小。
其他
maxLinesForName
:控制媒体名称的行数。
额外信息
更多详细信息,请参阅 GitHub 仓库。
贡献
欢迎贡献!如果您遇到任何问题或有改进建议,请随时 提交问题 或提交拉取请求。
许可证
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
更多关于Flutter媒体选择与查看插件smart_media_picker_and_viewer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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,
),
);
},
),
),
],
),
);
}
}
在这个示例中:
- 我们创建了一个简单的Flutter应用,包含一个按钮和一个用于显示所选媒体文件的
GridView
。 - 当用户点击“Select Media”按钮时,会调用
SmartMediaPicker().pickMedia
方法来打开媒体选择界面。 - 用户选择的媒体文件会保存在
selectedMediaFiles
列表中。 - 在
GridView
中,我们为每个媒体文件显示一个缩略图,并且当用户点击缩略图时,会调用SmartMediaViewer.viewMedia
方法来显示媒体查看器。
确保在实际应用中处理文件路径和权限问题,特别是在Android和iOS上访问媒体文件时。你可能需要在AndroidManifest.xml
和Info.plist
中添加必要的权限声明。