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