execute method
Future<FileResponse>
execute(
- ToolContext context,
- 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");
}
}