execute method

  1. @override
Future<Response> execute(
  1. ToolContext context,
  2. 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"]);
}