handle method
Method called when report has been accepted by user
Implementation
@override
Future<bool> handle(Report report, BuildContext? context) async {
try {
if (!(await Catcher2Utils.isInternetConnectionAvailable())) {
_printLog('No internet connection available');
return false;
}
var message = '';
if (customMessageBuilder != null) {
message = await customMessageBuilder!(report);
} else {
message = _buildMessage(report);
}
final screenshot = report.screenshot;
final data = <String, dynamic>{
'text': message,
'channel': channel,
'username': username,
'icon_emoji': iconEmoji,
};
_printLog('Sending request to Slack server...');
if (apiToken != null && screenshot != null) {
final screenshotPath = screenshot.path;
final formData = FormData.fromMap(<String, dynamic>{
'token': apiToken,
'channels': channel,
'file': await MultipartFile.fromFile(screenshotPath),
});
final responseFile = await _dio.post<dynamic>(
'https://slack.com/api/files.upload',
data: formData,
options: Options(
contentType: Headers.multipartFormDataContentType,
),
);
if (responseFile.data != null &&
responseFile.data['file'] != null &&
responseFile.data['file']['url_private'] != null) {
data.addAll({
'attachments': [
{
'image_url': responseFile.data['file']['url_private'],
'text': 'Error Screenshot',
},
],
});
}
_printLog(
'Server responded upload file with code: ${responseFile.statusCode} '
'and message upload file: ${responseFile.statusMessage}',
);
}
final response = await _dio.post<dynamic>(webhookUrl, data: data);
_printLog(
'Server responded with code: ${response.statusCode} and '
'message: ${response.statusMessage}',
);
final statusCode = response.statusCode ?? 0;
return statusCode >= 200 && statusCode < 300;
} catch (exception) {
_printLog('Failed to send slack message: $exception');
return false;
}
}