1+ import 'package:adb_tools/providers/app_provider.dart' ;
12import 'package:adb_tools/utils/dialog_utils.dart' ;
23import 'package:cross_file/cross_file.dart' ;
34import 'package:desktop_drop/desktop_drop.dart' ;
@@ -18,15 +19,35 @@ class ApkDragTarget extends ConsumerStatefulWidget {
1819
1920class _ApkDragTargetState extends ConsumerState <ApkDragTarget > {
2021 bool _dragging = false ;
21- final List <XFile > list = [];
22+
23+ void _onDropDone (DropDoneDetails details) async {
24+ var list = ref.read (filesProvider);
25+ var files = details.files.where ((file) {
26+ return ! list.any ((item) {
27+ return item.path == file.path;
28+ });
29+ }).toList ();
30+ if (files.isEmpty) {
31+ DialogUtils .showInfoDialog (
32+ context,
33+ "No new APK files were dropped" ,
34+ "You can only drop APK files that are not already selected" ,
35+ );
36+ return ;
37+ }
38+ ref.read (filesProvider.notifier).state = [
39+ ...ref.read (filesProvider),
40+ ...files
41+ ];
42+ }
2243
2344 // start shizuku
2445 Future <void > _toggleStartShizuku () async {
2546 var serialNumber = ref.read (selectedDeviceProvider)! .serialNumber;
2647 var info = await ADBUtils .getShizukuPackageInfo (serialNumber);
27- if (int .parse (info.versionCode) < 1086 ){
48+ if (int .parse (info.versionCode) < 1086 ) {
2849 ADBUtils .startShizuku (serialNumber);
29- return ;
50+ return ;
3051 }
3152
3253 ADBUtils .startShizuku2 (serialNumber, info);
@@ -35,51 +56,35 @@ class _ApkDragTargetState extends ConsumerState<ApkDragTarget> {
3556 // start brevent
3657 Future <void > _toggleStartBrevent () async {
3758 var serialNumber = ref.read (selectedDeviceProvider)! .serialNumber;
38- ADBUtils .startBrevent (serialNumber);
59+ ADBUtils .startBrevent (serialNumber);
3960 }
4061
4162 // install apk to device
4263 void _toggleInstall () {
64+ var list = ref.read (filesProvider);
4365 ADBUtils .install (ref.read (selectedDeviceProvider), list);
4466 }
4567
4668 // push files to device
4769 void _togglePushFiles () {
70+ var list = ref.read (filesProvider);
4871 ADBUtils .push (ref.read (selectedDeviceProvider), list);
4972 }
5073
5174 // clear all files
5275 void _toggleClearAll () {
53- setState (() {
54- list.clear ();
55- });
76+ ref.read (filesProvider.notifier).state = [];
5677 }
5778
5879 @override
5980 Widget build (BuildContext context) {
6081 var selectedDevice = ref.watch (selectedDeviceProvider);
6182 var isSelectedDevice = (selectedDevice != null );
83+ var list = ref.watch (filesProvider);
6284 var isSelectedDeviceAndFiles = (selectedDevice != null && list.isNotEmpty);
6385
6486 return DropTarget (
65- onDragDone: (detail) {
66- var files = detail.files.where ((file) {
67- return ! list.any ((item) {
68- return item.path == file.path;
69- });
70- }).toList ();
71- if (files.isEmpty) {
72- DialogUtils .showInfoDialog (
73- context,
74- "No new APK files were dropped" ,
75- "You can only drop APK files that are not already selected" ,
76- );
77- return ;
78- }
79- setState (() {
80- list.addAll (files);
81- });
82- },
87+ onDragDone: _onDropDone,
8388 onDragEntered: (detail) {
8489 setState (() {
8590 _dragging = true ;
0 commit comments