Linux 如何在 Flutter 中打开图形文件选择器?
How to open graphical files picker in Flutter on Linux?
我在 Flutter 的 Linux 上打开图形文件选择器时遇到问题,Flutter 无法在桌面上“从框中”执行此操作。我正在使用 Flutter 1.24.0-3。0.pre 在 Dart 中获得桌面支持。
那么,如何在 Linux 上打开它?
(我在解决这个问题后创建了这个问题,以便与您分享答案)
我创建了 class 来做到这一点:
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("扩展名");
使用 GTK 图形选择器选择文件,您可以不指定扩展名,方法是在函数参数中键入“undefined”
FilePicker().pickDirectory();
使用 GTK 图形选择器选择目录
代码可能会很糟糕,我是 Dart 和 Flutter 的新手:)
a plugin 适用于所有桌面平台,支持打开和保存面板。
我在 Flutter 的 Linux 上打开图形文件选择器时遇到问题,Flutter 无法在桌面上“从框中”执行此操作。我正在使用 Flutter 1.24.0-3。0.pre 在 Dart 中获得桌面支持。
那么,如何在 Linux 上打开它?
(我在解决这个问题后创建了这个问题,以便与您分享答案)
我创建了 class 来做到这一点:
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("扩展名");
使用 GTK 图形选择器选择文件,您可以不指定扩展名,方法是在函数参数中键入“undefined”
FilePicker().pickDirectory();
使用 GTK 图形选择器选择目录
代码可能会很糟糕,我是 Dart 和 Flutter 的新手:)
a plugin 适用于所有桌面平台,支持打开和保存面板。