Skip to content

对话框管理 (Dialogs)

zero-native 提供了原生的文件与消息对话框,可以通过 Zig 中的 PlatformServices 访问,也可以在 JavaScript 中通过内置的桥接进行调用。

打开文件对话框 (Open File Dialog)

字段类型默认值
title[]const u8""
default_path[]const u8""
filters[]const FileFilter&.
allow_directoriesboolfalse
allow_multipleboolfalse

返回一个包含选择数量(count)和路径(paths)的 OpenDialogResult

保存文件对话框 (Save File Dialog)

字段类型默认值
title[]const u8""
default_path[]const u8""
default_name[]const u8""
filters[]const FileFilter&.

返回一个可选的路径字符串(如取消选择则返回 null)。

消息对话框 (Message Dialog)

字段类型默认值
styleMessageDialogStyle.info
title[]const u8""
message[]const u8""
informative_text[]const u8""
primary_button[]const u8"OK"
secondary_button[]const u8""
tertiary_button[]const u8""
  • MessageDialogStyle: info (信息), warning (警告), critical (严重)
  • MessageDialogResult: primary (首要按钮), secondary (次要按钮), tertiary (第三按钮)

文件过滤器 (FileFilter)

zig
const filters = [_]zero_native.FileFilter{
    .{ .name = "Images", .extensions = &.{ "png", "jpg", "gif" } },
    .{ .name = "All Files", .extensions = &.{ "*" } },
};

在 JavaScript 中使用

对话框需要显式启用内置桥接(Builtin Bridge)策略。JSON 字段名称使用小驼峰(camelCase)写法:

javascript
const files = await window.zero.invoke("zero-native.dialog.openFile", {
  title: "Select a file",
  defaultPath: "/home",
  allowMultiple: true,
  allowDirectories: false,
});

const path = await window.zero.invoke("zero-native.dialog.saveFile", {
  title: "Save as",
  defaultName: "untitled.txt",
});

const result = await window.zero.invoke("zero-native.dialog.showMessage", {
  style: "warning",
  title: "Confirm",
  message: "Delete this item?",
  informativeText: "This action cannot be undone.",
  primaryButton: "Delete",
  secondaryButton: "Cancel",
});