如何在 Linux 上的 Flutter 中打开图形文件选择器?
Posted
技术标签:
【中文标题】如何在 Linux 上的 Flutter 中打开图形文件选择器?【英文标题】:How to open graphical files picker in Flutter on Linux? 【发布时间】:2021-02-13 14:35:48 【问题描述】:我在 Flutter 中打开 Linux 上的图形文件选择器时遇到问题,Flutter 无法在桌面上“从盒子”中执行此操作。我正在使用 Flutter 1.24.0-3.0.pre 在 Dart 中获得桌面支持。
那么,如何在 Linux 上打开呢?
(我在解决这个问题后创建了这个问题,与您分享答案)
【问题讨论】:
【参考方案1】:我已经创建了类来做到这一点:
class FilePicker
String pickFile(String extension)
bool _noExtension = false;
String _file = "undefined";
Process.run('which', ['zenity'], runInShell: true).then((pr)
if (pr.exitCode != 0)
print("zenity not found.");
return null;
print("zenity found.");
);
if (extension == "undefined")
_noExtension = true;
print("WARNING: extension not specified.");
Process.run(
'zenity',
[
'--file-selection',
!_noExtension ? '--file-filter=' + '*.' + extension + '' : '',
],
runInShell: false)
.then((pr)
if (pr.exitCode != 0)
print("user canceled choice.");
print(pr.stderr.toString());
print(pr.stdout.toString());
return null;
_file = pr.stdout.toString();
print("File: " + _file);
return _file;
);
return null;
String pickDirectory()
String _dir = "undefined";
Process.run('which', ['zenity'], runInShell: true).then((pr)
if (pr.exitCode != 0)
print("zenity not found.");
return null;
print("zenity found.");
);
Process.run('zenity', ['--file-selection', '--directory'], runInShell: true)
.then((pr)
if (pr.exitCode != 0)
print("user canceled choice.");
print(pr.stderr.toString());
print(pr.stdout.toString());
return null;
_dir = pr.stdout.toString();
print("Directory: " + _dir);
return _dir;
);
return null;
方法:
FilePicker().pickFile("extension");
使用 GTK 图形选择器选择文件,您可以不指定扩展名,方法是在函数参数中键入“undefined”
FilePicker().pickDirectory();
使用 GTK 图形选择器选择目录
代码可能很差,我是 Dart 和 Flutter 的新手 :)
【讨论】:
启动一个单独的进程将提供比进程内对话更糟糕的用户体验。【参考方案2】:a plugin 适用于所有桌面平台,支持打开和保存面板。
【讨论】:
以上是关于如何在 Linux 上的 Flutter 中打开图形文件选择器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter 打开 iPhone 上的默认电子邮件应用程序?