実装

ボタンは名前を呼ぶだけ — 押したときホストがすること

著者: 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