第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') のような分岐は無い — 入れた瞬間、サーバーがツールを一つ増やすたびにホストを直すことになる。