handle method

  1. @override
Future<bool> handle(
  1. Report report,
  2. BuildContext? context
)
override

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