fix: treeview,style,file picker (#91)

* fix: tree view,style,file picker

Co-authored-by: wuke2022 <[email protected]>
This commit is contained in:
Neginegiandwuke2022 authored and GitHub committed 2023-02-22 20:06:28 +08:00
1 parent 5b69472ac8
commit 56375c0edb
7 files changed
+73 -101

No files matched your search

@@ -163,7 +163,6 @@ class CreateView extends GetView<CreateController> {
),
child: RoundedLoadingButton(
color: Get.theme.colorScheme.secondary,
duration: const Duration(milliseconds: 100),
onPressed: () async {
try {
downloadController.start();
@@ -179,7 +178,6 @@ class CreateView extends GetView<CreateController> {
// return;
// }
// }
await createTask(CreateTask(
rid: rr.id,
opts: Options(
@@ -187,6 +185,7 @@ class CreateView extends GetView<CreateController> {
path: pathController.text,
selectFiles: controller.selectedIndexes
.cast<int>())));
Get.back();
Get.rootDelegate.offNamed(Routes.DOWNLOADING);
}
} catch (e) {
@@ -204,14 +204,16 @@ class BuildTaskListView extends GetView {
: Icon(FaIcons.allIcons[findIcon(task.meta.res.name)]),
trailing: SizedBox(
width: 180,
width: task.status == Status.done ? 80 : 180,
child: Row(
// crossAxisAlignment: CrossAxisAlignment.baseline,
// textBaseline: DefaultTextStyle.of(context).style.textBaseline,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text("${Util.fmtByte(task.progress.speed)} / s",
style: context.textTheme.titleSmall),
task.status == Status.done
? const SizedBox.shrink()
: Text("${Util.fmtByte(task.progress.speed)} / s",
style: context.textTheme.titleSmall),
...buildActions()
],
),
@@ -1,4 +1,4 @@
import 'package:file_selector/file_selector.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -41,7 +41,7 @@ class _DirectorySelectorState extends State<DirectorySelector> {
icon: const Icon(Icons.folder_open),
onPressed: () async {
if (GetPlatform.isDesktop) {
var dir = await getDirectoryPath();
var dir = await FilePicker.platform.getDirectoryPath();
if (dir != null) {
widget.controller.text = dir;
MacSecureUtil.saveBookmark(dir);
@@ -20,24 +20,27 @@ class FileListView extends GetView {
List findChildFileIdsRecursive(children) {
List res = [];
for (var i in children) {
if (fileInfos[i]['type'] == 'folder') {
findChildFileIdsRecursive(fileInfos[i]['children']);
for (var k in children) {
if (fileInfos[k]['type'] == 'folder') {
res.addAll(findChildFileIdsRecursive(fileInfos[k]['children']));
} else {
res.add(i);
res.add(fileInfos[k]['fileId']);
}
}
return res;
}
List<fluent.TreeViewItem> buildTreeViewItemsRecursive(
int level, List<fluent.TreeViewItem> treeViewItems) {
List children = fileInfos.where((e) => e['level'] == level).toList();
for (int i = 0; i < children.length; i++) {
Map fileInfo = children[i];
int level, int parentId) {
List<fluent.TreeViewItem> res = [];
List children = fileInfos
.where((e) => e['level'] == level && e['parentId'] == parentId)
.toList();
for (int j = 0; j < children.length; j++) {
Map fileInfo = children[j];
if (fileInfo['type'] == 'folder') {
// folder
treeViewItems.add(fluent.TreeViewItem(
res.add(fluent.TreeViewItem(
// expanded: false, bug on init
// value: fileInfo['id'],
onInvoked: (item, reason) async {
@@ -47,12 +50,12 @@ class FileListView extends GetView {
List childrenIds =
findChildFileIdsRecursive(fileInfo['children']);
if (item.selected == true) {
parentController.selectedIndexes
.addAll(findChildFileIdsRecursive(childrenIds));
parentController.selectedIndexes.addAll(childrenIds);
} else {
parentController.selectedIndexes
.removeWhere((index) => childrenIds.contains(index));
}
debugPrint('${parentController.selectedIndexes.cast<int>()}');
}
},
leading:
@@ -76,13 +79,13 @@ class FileListView extends GetView {
children: buildTreeViewItemsRecursive(
// fileInfos.where((e) => e['level'] > level).toList(),
level + 1,
[])));
fileInfo['id'])));
} else {
// file
// if (fileInfo['selected']) {
// parentController.selectedIndexs.add(fileInfo['fileId']);
// }
treeViewItems.add(fluent.TreeViewItem(
res.add(fluent.TreeViewItem(
value: fileInfo['fileId'],
selected: fileInfo['selected'],
onInvoked: (item, reason) async => {
@@ -91,7 +94,8 @@ class FileListView extends GetView {
? item.selected == false
? parentController.selectedIndexes.remove(item.value)
: parentController.selectedIndexes.add(item.value)
: null
: null,
debugPrint('${parentController.selectedIndexes.cast<int>()}')
},
collapsable: false,
leading: fileInfo['name'].lastIndexOf('.') == -1
@@ -115,13 +119,13 @@ class FileListView extends GetView {
));
}
}
return treeViewItems;
return res;
}
List<fluent.TreeViewItem> items(files) {
List infos = [];
int idNext = 0;
List selectedIndexs = [];
List selectedFileIds = [];
// List openedFolders = [];
//make fileInfos list
for (var i = 0; i < files.length; i++) {
@@ -166,16 +170,16 @@ class FileListView extends GetView {
//TODO add unselected logic
'selected': true
});
selectedIndexs.add(idNext);
selectedFileIds.add(i);
if (parentId != -1) {
infos[parentId]['children'].add(idNext);
}
idNext++;
}
fileInfos = infos;
parentController.selectedIndexes.value = selectedIndexs;
parentController.selectedIndexes.value = selectedFileIds;
// parentController.openedFolders.value = openedFolders;
List<fluent.TreeViewItem> treeItems = buildTreeViewItemsRecursive(0, []);
List<fluent.TreeViewItem> treeItems = buildTreeViewItemsRecursive(0, -1);
return treeItems;
}
@@ -203,19 +207,22 @@ class FileListView extends GetView {
border: Border.all(color: Colors.grey, width: 1),
borderRadius: BorderRadius.circular(5)),
child: fluent.TreeView(
// shrinkWrap: false,
// addRepaintBoundaries: false,
// usePrototypeItem: true,
// onItemInvoked: (item, reason) async => {},
onSecondaryTap: (item, details) async {
debugPrint(
'onSecondaryTap $item at ${details.globalPosition}');
},
// onSelectionChanged: (selectedItems) async => {},
narrowSpacing: true,
// scrollPrimary: true,
selectionMode: fluent.TreeViewSelectionMode.multiple,
items: items(files)))),
shrinkWrap: false,
// addRepaintBoundaries: false,
// usePrototypeItem: true,
// onItemInvoked: (item, reason) async => {},
onSecondaryTap: (item, details) async {
debugPrint(
'onSecondaryTap $item at ${details.globalPosition}');
},
// onSelectionChanged: (selectedItems) async => {},
narrowSpacing: true,
// cacheExtent: 2000,
items: items(files),
// itemExtent: fileInfos.length.toDouble(),
// scrollPrimary: true,
selectionMode: fluent.TreeViewSelectionMode.multiple,
))),
],
));
}
+12
View File
@@ -138,6 +138,18 @@ const List iconMaps = [
'type': 'Powerpoint Document',
'thumbnail': 'file_powerpoint'
},
//windows
{
'extensions': ['exe'],
'type': 'Microsoft',
'thumbnail': 'windows'
},
//android
{
'extensions': ['apk'],
'type': 'Android',
'thumbnail': 'windows'
},
//other
{
'extensions': ['lnk'],
+13 -61
View File
@@ -257,62 +257,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.4"
file_selector:
file_picker:
dependency: "direct main"
description:
name: file_selector
sha256: c348bc79073db2d22599ab86ac3e3baec9079ec90c04ed3b9a92f674a7a4db9f
name: file_picker
sha256: d090ae03df98b0247b82e5928f44d1b959867049d18d73635e2e0bc3f49542b9
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.2"
file_selector_ios:
dependency: transitive
description:
name: file_selector_ios
sha256: fdfc0578fa31b853780e2fadacf51bd85553071d8c49f5edd0d1ec159406e0ab
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.5.0+1"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
sha256: "0c2043aba4b644e44bc17197589e80f59b1445ecd22d52878055e163d314a8d3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.0"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "5fd8239766e90f16693517608c15b89fe1970a83efc395a834734fab3f9bfe27"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.0+1"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: "92b924983d18c53d9d354b95be261af869f2a8efa125b293d2db6569c32dd9c3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
file_selector_web:
dependency: transitive
description:
name: file_selector_web
sha256: "8e9ca06d07a7fe60e487e3647792552c5b9722139aeb51b8f462be0336b47456"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.0"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: b592a4815363438a00db50c3b03072e2899c0ffe2adf1fb9a868bf22eebedac2
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.1+2"
version: "5.2.5"
fixnum:
dependency: transitive
description:
@@ -356,6 +308,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "60fc7b78455b94e6de2333d2f95196d32cf5c22f4b0b0520a628804cb463503b"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.7"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -891,14 +851,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.0+3"
stylish_bottom_bar:
dependency: "direct main"
description:
name: stylish_bottom_bar
sha256: "24aab3e66a3e16b4fe786d4efb87b4111c94d75964b03c7a6dd17174c56d710c"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
term_glyph:
dependency: transitive
description:
@@ -1052,5 +1004,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.18.2 <4.0.0"
dart: ">=2.18.0 <4.0.0"
flutter: ">=3.3.0"
+1 -1
View File
@@ -42,7 +42,7 @@ dependencies:
json_annotation: ^4.6.0
dio: ^4.0.6
path_provider: ^2.0.11
file_selector: ^0.9.2
file_picker: ^5.2.5
macos_secure_bookmarks: ^0.2.1
rounded_loading_button: ^2.1.0
url_launcher: ^6.1.6