From ccbc7a945a188ead9d37df690630c0d3dd5bb235 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 03:02:03 +0000 Subject: [PATCH 1/3] Initial plan From 2c82936fa04a1b166f1c707b748244540f5adca8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 03:06:29 +0000 Subject: [PATCH 2/3] Handle null drag items on web Co-authored-by: boyan01 <17426470+boyan01@users.noreply.github.com> --- .../desktop_drop/lib/desktop_drop_web.dart | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/desktop_drop/lib/desktop_drop_web.dart b/packages/desktop_drop/lib/desktop_drop_web.dart index 047e3942..bfe9dc7c 100644 --- a/packages/desktop_drop/lib/desktop_drop_web.dart +++ b/packages/desktop_drop/lib/desktop_drop_web.dart @@ -87,14 +87,34 @@ class DesktopDropWeb { final items = event.dataTransfer!.items; - Future.wait(List.generate(items.length, (index) { + Future.wait(List.generate(items.length, (index) { final item = items[index]; - final entry = item.webkitGetAsEntry()!; - return _entryToWebDropItem(entry); + final entry = item.webkitGetAsEntry(); + if (entry != null) { + return _entryToWebDropItem(entry); + } + final file = item.getAsFile(); + if (file != null) { + return WebDropItem( + uri: web.URL.createObjectURL(file), + name: file.name, + size: file.size, + lastModified: + DateTime.fromMillisecondsSinceEpoch(file.lastModified), + relativePath: null, + type: file.type, + children: [], + ); + } + return Future.value(null); })).then((webItems) { + final items = webItems.whereType().toList(); + if (items.isEmpty) { + return; + } channel.invokeMethod( "performOperation_web", - webItems.map((e) => e.toJson()).toList(), + items.map((e) => e.toJson()).toList(), ); }).catchError((e, s) { debugPrint('desktop_drop_web: $e $s'); From bbdaca1ea58918a147eb288417588af5644e2bec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 03:09:36 +0000 Subject: [PATCH 3/3] Refine web drop fallback handling Co-authored-by: boyan01 <17426470+boyan01@users.noreply.github.com> --- .../desktop_drop/lib/desktop_drop_web.dart | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/desktop_drop/lib/desktop_drop_web.dart b/packages/desktop_drop/lib/desktop_drop_web.dart index bfe9dc7c..dac3b52e 100644 --- a/packages/desktop_drop/lib/desktop_drop_web.dart +++ b/packages/desktop_drop/lib/desktop_drop_web.dart @@ -69,16 +69,26 @@ class DesktopDropWeb { final web.File file = await fileCompleter.future; + return _fileToWebDropItem( + file, + relativePath: entry.fullPath, + ); + + } + + WebDropItem _fileToWebDropItem( + web.File file, { + String? relativePath, + }) { return WebDropItem( uri: web.URL.createObjectURL(file), name: file.name, size: file.size, lastModified: DateTime.fromMillisecondsSinceEpoch(file.lastModified), - relativePath: entry.fullPath, + relativePath: relativePath, type: file.type, children: [], ); - } void _registerEvents() { @@ -87,7 +97,7 @@ class DesktopDropWeb { final items = event.dataTransfer!.items; - Future.wait(List.generate(items.length, (index) { + Future.wait(List.generate(items.length, (index) { final item = items[index]; final entry = item.webkitGetAsEntry(); if (entry != null) { @@ -95,15 +105,9 @@ class DesktopDropWeb { } final file = item.getAsFile(); if (file != null) { - return WebDropItem( - uri: web.URL.createObjectURL(file), - name: file.name, - size: file.size, - lastModified: - DateTime.fromMillisecondsSinceEpoch(file.lastModified), + return _fileToWebDropItem( + file, relativePath: null, - type: file.type, - children: [], ); } return Future.value(null);