execute method
Future<Response>
execute(
- ToolContext context,
- Map<String, dynamic> arguments
)
override
Implementation
@override
Future<Response> execute(ToolContext context, Map<String, dynamic> arguments) async {
final result = await showShadDialog<Map<String, dynamic>>(
context: this.context,
builder: (context) {
return ControlledForm(
builder:
(context, controller, formKey) => ShadDialog(
crossAxisAlignment: CrossAxisAlignment.start,
title: Text(arguments["subject"]),
actions: [
ShadButton(
onTapDown: (_) {
if (!formKey.currentState!.saveAndValidate()) {
return;
}
final formData = formKey.currentState!.value;
final output = <String, dynamic>{};
for (var key in formData.keys) {
output[key.toString()] = formData[key];
}
Navigator.of(context).pop({"result": output});
},
child: Text("OK"),
),
],
child: Padding(
padding: EdgeInsets.symmetric(vertical: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
spacing: 16,
children: [Text(arguments["help"] ?? ""), form(context, arguments)],
),
),
),
);
},
);
if (result == null) {
throw Exception("The user cancelled the request");
} else if (result["user_feedback"] != null) {
throw Exception("The user cancelled the request");
}
return JsonResponse(json: result["result"]);
}