execute method

  1. @override
Future<FileResponse> execute(
  1. ToolContext context,
  2. Map<String, dynamic> arguments
)
override

Implementation

@override
Future<FileResponse> execute(ToolContext context, Map<String, dynamic> arguments) async {
  final result = await showShadDialog<FilePickerResult>(
    context: this.context,
    builder: (context) {
      return ControlledForm(
        builder:
            (context, controller, formKey) => ShadDialog(
              crossAxisAlignment: CrossAxisAlignment.start,
              title: Text(arguments["title"]),
              actions: [
                ShadButton(
                  onPressed: () async {
                    final result = await FilePicker.platform.pickFiles(dialogTitle: arguments["title"]);
                    if (context.mounted) Navigator.of(context).pop(result);
                  },
                  child: Text("Continue"),
                ),
              ],
              child: Padding(
                padding: EdgeInsets.symmetric(vertical: 16),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisSize: MainAxisSize.min,
                  spacing: 16,
                  children: [Text(arguments["description"] ?? "")],
                ),
              ),
            ),
      );
    },
  );

  if (result == null) {
    throw Exception("The user cancelled the request");
  } else if (result.files.isEmpty) {
    throw Exception("The user did not pick any files");
  } else {
    final file = result.files[0];

    return FileResponse(data: file.bytes!, name: file.name, mimeType: lookupMimeType(file.name) ?? "application/octet-stream");
  }
}