updateContact method

Future<ResendResult<ResendUpdateContactResponse>> updateContact({
  1. required String audienceId,
  2. required String contactId,
  3. String? firstName,
  4. String? lastName,
  5. bool? unsubscribed,
})

Update an existing contact.

Implementation

Future<ResendResult<ResendUpdateContactResponse>> updateContact(
    {
    /// The Audience ID.
    required String audienceId,

    /// The Contact ID.
    required String contactId,

    /// The first name of the contact.
    String? firstName,

    /// The last name of the contact.
    String? lastName,

    /// The subscription status.
    bool? unsubscribed}) async {
  // Validation
  assert(audienceId.isNotEmpty, 'The audience ID can not be empty.');
  assert(contactId.isNotEmpty, 'The contact ID can not be empty.');
  assert(firstName != null || lastName != null || unsubscribed != null,
      'At least one optional parameter is required.');

  // Construct the request URI
  final Uri uri = Uri(
      scheme: _baseUri.scheme,
      host: _baseUri.host,
      path: '${_baseUri.path}/$audienceId/contacts/$contactId');

  // Send GET request to the API
  final http.Response response = await http.patch(uri,
      headers: <String, String>{
        'Authorization': 'Bearer $_apiKey',
        'Content-Type': 'application/json'
      },
      body: jsonEncode(<String, dynamic>{
        if (firstName != null) 'first_name': firstName,
        if (lastName != null) 'last_name': lastName,
        if (unsubscribed != null) 'unsubscribed': unsubscribed
      }));

  // Decode the response
  final Json body = json.decode(response.body);

  // Return Failure when statusCode is not OK
  if (response.statusCode != 200) {
    return ResendFailure.fromJson(body);
  }

  // Return parsed data when statusCode is OK
  final ResendUpdateContactResponse result =
      ResendUpdateContactResponse.fromJson(body);
  return ResendResult<ResendUpdateContactResponse>.success(result);
}