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"]);
}