createIssue static method

Future<FeedbackData> createIssue({
  1. required GitHubConfig gitHubConfig,
  2. required FeedbackContent feedbackContent,
})

Implementation

static Future<FeedbackData> createIssue({
  required GitHubConfig gitHubConfig,
  required FeedbackContent feedbackContent,
}) async {
  Map<String, String> headers = {
    "Authorization": "Bearer ${gitHubConfig.accessToken}",
    "Content-Type": "application/vnd.github+json",
  };
  var userEmailText = (feedbackContent.userEmail.isNotEmpty == true)
      ? '\n\n Originally created by ${feedbackContent.userEmail}'
      : '';
  var url =
      '$kGitHubUrl/${gitHubConfig.gitHubUserName}/${gitHubConfig.repositoryName}/issues';
  try {
    var bodyData = {
      "title": feedbackContent.title,
      "body": feedbackContent.description + userEmailText,
      "labels": ["bug"]
    };

    /// return 201 usually
    var response = await post(Uri.parse(url),
        headers: headers, body: json.encode(bodyData));
    if ([200, 201, 202].contains(response.statusCode)) {
      return FeedbackData(
        status: response.statusCode,
        message: "Feedback successfully sent",
      );
    } else {
      var res = json.decode(response.body);
      if (res['errors'] != null) {
        if (kDebugMode) print(res['errors']);
        return FeedbackData(
          status: response.statusCode,
          error: res['errors'][0]['message'],
        );
      } else {
        return FeedbackData(
            status: response.statusCode,
            message: response.body,
            error: response.body);
      }
    }
  } catch (e) {
    return FeedbackData(
      status: 500,
      error: e.toString(),
      message: "Something went wrong, please try again later",
    );
  }
}