原生拖放

一个允许您为Flutter应用添加原生拖放支持的包。

dragndropex2

当前支持的功能

  • 支持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并尽可能提供示例。

以下是一些可能有助于您添加拖放支持的资源

GitHub

查看 Github