빌드

버튼은 이름만 부른다 — 눌렀을 때 호스트가 하는 일

작성: 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