Tauri 2.0 插件开发踩坑记录(2)

tauri2, coding

开发 Tauri 2.0 的插件时,可能会有异步返回数据的需求,这时候就需要使用到 addpluginlistener

假设要开发的插件为: tauri-plugin-mobile-onbackpressed-listener

TypeScript 的接口定义中就可以以下面的方式进行定义:

guest-js/index.ts

import {
  addPluginListener,
  invoke,
  PluginListener,
} from "@tauri-apps/api/core";

export async function registerBackEvent(
  goBack: () => void
): Promise<PluginListener> {
  await invoke("plugin:mobile-onbackpressed-listener|register_back_event");

  return await addPluginListener(
    "mobile-onbackpressed-listener",
    "mobile-onbackpressed-goback",
    (result) => {
      goBack();
    }
  );
}

定义了一个插件 command:register_back_event 和一个监听 event:mobile-onbackpressed-goback。接下来就可以在各个平台进行实现相关代码了。

在这之后,你就可以通过监听到返回,在 Android 端和 iOS 端分别触发:trigger("mobile-onbackpressed-goback", JSObject()) 来实现通知到前端代码来执行 goBack 方法。

当你以为一切都完成时,坑就出现了,你会发现 trigger 怎么都无法通知到前端,查阅官方文档也没有看到有相关的说明,而且官方似乎没有相关的示例可以查看。

后来是在看到第三方的插件时,通过对比才发现问题所在。需要将 addPluginListenercommand 也添加到你的插件的 command 中,即

tauri-plugin-mobile-onbackpressed-goback/build.rs:

const COMMANDS: &[&str] = &[
  "register_back_event",
  "registerListener",
  "remove_listener"
]

这样才能够实现 trigger 可以通知到前端。之后在使用插件时,也需要在 app 中的 capabilities/*.json 添加上相关的权限:

"permissions": [
  "mobile-onbackpressed-listener:allow-register-back-event",
  "mobile-onbackpressed-listener:allow-registerListener",
  "mobile-onbackpressed-listener:allow-remove-listener"
]

如此,这个插件就可以正常使用了。




参考文档 #