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 适用于所有桌面平台,支持打开和保存面板。