原生拖放
一个允许您为Flutter应用添加原生拖放支持的包。
当前支持的功能
- 支持iPadOS 11和iOS 15及以上版本
- 仅支持放置(可以将外部数据拖入您的Flutter应用程序)
- 支持文本、URL、图片、视频、音频、PDF和自定义文件扩展名
- 一次可以放置多个项目
用法
import 'package:native_drag_n_drop/native_drag_n_drop.dart';
List<DropData> receivedData = [];
@override
Widget build(BuildContext context) {
return NativeDropView(
allowedTotal: 5,
child: receivedData.isNotEmpty
? ListView.builder(
itemCount: receivedData.length,
itemBuilder: (context, index) {
var data = receivedData[index];
if (data.type == DropDataType.text) {
return ListTile(
title: Text(data.dropText!),
);
}
return ListTile(
title: Text(data.dropFile!.path),
);
})
: const Center(
child: Text("Drop data here"),
),
loading: (loading) {
// display loading indicator / hide loading indicator
},
dataReceived: (data) {
setState(() {
receivedData.addAll(data);
});
});
}
dataReceivedCallback 返回 List<DropData>。
enum DropDataType { text, url, image, video, audio, pdf }
class DropData {
File? dropFile;
String? dropText;
Map<String, dynamic>? metadata;
DropDataType type;
DropData({this.dropFile, this.dropText, this.metadata, required this.type});
}
可以安全地假定,如果dataType是文本或URL,则dropText不会为空。
对于图片、视频、音频、PDF,可以安全地假定dropFile不会为空
待办事项
- 指定一次允许放置的项目数
- 仅允许特定数据类型
- Android 支持
- 拖动支持(将应用程序内的数据拖到Flutter应用程序外部的源)
贡献
请提交一个PR并尽可能提供示例。
