构建

按钮只报一个名字 — 按下去时宿主做了什么

作者: makemind · 2026年6月10日

第 3 讲把值送进了画面。反方向还没讲。

onTap 里没有代码

{ "type": "button", "label": "Call next", "onTap": { "type": "tool", "tool": "queue.next" } },
{ "type": "button", "label": "Take a ticket", "onTap": { "type": "tool", "tool": "queue.take" } }

onTap{ type, tool }。「按这个会调用一个叫 queue.next 的工具」就是全部,那工具做什么并没有写。

也写不了。这个文件是服务器课程里做的那台服务器发来的,活儿在那台服务器上干。

接住的一侧

rt.buildUI(
  context: c,
  // 名字到这儿。宿主不知道这名字是什么意思。
  onToolCall: (tool, params) async => fired.add(tool),
)

这就是第 1 讲留成空函数的那个位置。在真实应用里,这里放的是客户端课程第 3 讲的一行。

onToolCall: (tool, params) async {
  // 名字来自画面。原样传过去。
  final r = await client.callTool(tool, params);
  final state = jsonDecode((r.content.first as TextContent).text)
      as Map<String, dynamic>;
  state.forEach(rt.stateManager.set);
},

tool 原样传过去。没有 if (tool == 'queue.next') 这样的分支 — 一旦加进去,服务器每多一个工具就得改一次宿主。

此内容需要开发者或更高等级

登录并升级您的方案即可继续阅读。

查看方案
Twitter