如何在Flutter中打开本机文件浏览器以定位目录?

7
有没有办法调用本地文件浏览器并获取所选目录的路径?

1
file_picker 包可能是你正在寻找的。 - soupjake
4个回答

2
我也曾寻找同样的东西,但未能找到 UI 类型的插件,因此我建立了一个页面,它更像是一个文件浏览器。 我利用 flutter_file_manager 插件获取所需目录中的文件列表,然后通过 ListView.builder 将(未来的)列表返回为一系列 ListTile。
List<FileSystemEntity> _fileList;

Future<void> _loadFiles() async {
  _loadingFiles = true;

  var root = await getExternalStorageDirectory();
  _fileList = await FileManager(root: root).walk().toList();

  _loadingFiles = false;

  this.setState(() {});
}

一旦您拥有了 _fileList 对象,您基本上可以随心所欲地进行操作。例如,我在我的 AppBar 中添加了一个 PopupMenuButton,并在其中允许文件删除、打开等操作。

对于 _fileList 列表中的每个项目,您还可以在 ListTile 中显示文件名、大小、修改日期等信息。


1
你可以尝试使用插件 filesystem_picker,它支持移动和桌面平台,并且在最新的 2.0+ 版本中也支持空安全。
import 'package:filesystem_picker/filesystem_picker.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';

Directory rootPath = await getTemporaryDirectory();
String? path = await FilesystemPicker.open(title: 'Save to folder',
      context: context,
      rootDirectory: rootPath,
      fsType: FilesystemType.folder,
      pickText: 'Save file to this folder',
      folderIconColor: Colors.teal,
);

1

在 Kotlin/Java 中编写一个方法,并通过 MethodChannels 从 Flutter 中调用它。 如下启动本地文件管理器...

startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS));

请参考下面的链接了解关于MethodChannels的许多内容


1
我没有找到官方的方法来实现它,所以我用另一种方式来做。我使用了库 "path_provider",通过 "Directory" 方法,例如通过 "directory.list" 方法获取目录中的文件。这样,您可以遍历所有目录和文件。然后编写一个页面来显示目录,以实现本地文件浏览的效果。此外,不要忘记权限。
_getSDCardDirectory() async {
  Directory directory = await getExternalStorageDirectory();
  print(directory.path);
  await directory.list().toList().then((filesList) => print(filesList));
  print(directory.parent.path);
}

1
它没有提供下载目录路径。 - Adnan haider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接