@@ -3,6 +3,7 @@ import 'package:desktop_adb_file_browser/riverpod/package_list.dart';
3
3
import 'package:desktop_adb_file_browser/riverpod/selected_device.dart' ;
4
4
import 'package:desktop_adb_file_browser/utils/adb.dart' ;
5
5
import 'package:desktop_adb_file_browser/widgets/adb_queue_indicator.dart' ;
6
+ import 'package:desktop_drop/desktop_drop.dart' ;
6
7
import 'package:file_selector/file_selector.dart' ;
7
8
import 'package:fluentui_system_icons/fluentui_system_icons.dart' ;
8
9
import 'package:flutter/material.dart' ;
@@ -20,6 +21,8 @@ class PackageList extends ConsumerStatefulWidget {
20
21
}
21
22
22
23
class _PackageListState extends ConsumerState <PackageList > {
24
+ bool _dragging = false ;
25
+
23
26
@override
24
27
Widget build (BuildContext context) {
25
28
final packageListFuture = ref.watch (packageListProvider);
@@ -31,31 +34,52 @@ class _PackageListState extends ConsumerState<PackageList> {
31
34
actions: [
32
35
IconButton (
33
36
onPressed: () async {
34
- final path = await openFile ();
35
- if (path == null ) return ;
37
+ final file = await openFile ();
38
+ if (file == null ) return ;
36
39
37
- await uploadAndInstallAPK (path .path);
40
+ await uploadAndInstallAPK (file .path);
38
41
},
39
42
icon: const Icon (FluentIcons .arrow_upload_32_regular))
40
43
],
41
44
),
42
45
body: ADBQueueIndicator (
43
- child: packageListFuture.when (
44
- data: (packageList) => ListView .separated (
45
- itemBuilder: (c, i) => itemBuilder (c, i, packageList),
46
- itemCount: packageList.length,
47
- shrinkWrap: true ,
48
- separatorBuilder: (context, index) => const Divider (),
49
- ),
50
- error: (error, stackTrace) {
51
- debugPrint (error.toString ());
52
- debugPrint (stackTrace.toString ());
53
- return Center (
54
- child: Text ("Error: $error " ),
55
- );
56
- },
57
- loading: () => const Center (
58
- child: CircularProgressIndicator (),
46
+ child: Container (
47
+ color:
48
+ _dragging ? Theme .of (context).focusColor.withOpacity (0.4 ) : null ,
49
+ child: DropTarget (
50
+ onDragDone: (details) async {
51
+ for (final file in details.files) {
52
+ await uploadAndInstallAPK (file.path);
53
+ }
54
+ },
55
+ onDragEntered: (detail) {
56
+ setState (() {
57
+ _dragging = true ;
58
+ });
59
+ },
60
+ onDragExited: (detail) {
61
+ setState (() {
62
+ _dragging = false ;
63
+ });
64
+ },
65
+ child: packageListFuture.when (
66
+ data: (packageList) => ListView .separated (
67
+ itemBuilder: (c, i) => itemBuilder (c, i, packageList),
68
+ itemCount: packageList.length,
69
+ shrinkWrap: true ,
70
+ separatorBuilder: (context, index) => const Divider (),
71
+ ),
72
+ error: (error, stackTrace) {
73
+ debugPrint (error.toString ());
74
+ debugPrint (stackTrace.toString ());
75
+ return Center (
76
+ child: Text ("Error: $error " ),
77
+ );
78
+ },
79
+ loading: () => const Center (
80
+ child: CircularProgressIndicator (),
81
+ ),
82
+ ),
59
83
),
60
84
),
61
85
),
0 commit comments