getContactDetails method

Future<Map<String, dynamic>> getContactDetails(
  1. String? atSign,
  2. String? nickName
)

Function to get firstname, lastname and profile picture of an atsign

Implementation

Future<Map<String, dynamic>> getContactDetails(
    String? atSign, String? nickName) async {
  var contactDetails = <String, dynamic>{};

  if (atClientManager.atClient == null || atSign == null) {
    return contactDetails;
  } else if (!atSign.contains('@')) {
    atSign = '@' + atSign;
  }
  var metadata = Metadata();
  metadata.isPublic = true;
  metadata.namespaceAware = false;
  var key = AtKey();
  key.sharedBy = atSign;
  key.metadata = metadata;
  List contactFields = TextStrings().contactFields;

  try {
    // firstname
    key.key = contactFields[0];
    var result = await atClientManager.atClient.get(key).catchError((e) {
      print('error in get ${e.errorCode} ${e.errorMessage}');
    });
    var firstname = result.value;

    // lastname
    key.key = contactFields[1];
    result = await atClientManager.atClient.get(key);
    var lastname = result.value;

    // construct name
    var name = ((firstname ?? '') + ' ' + (lastname ?? '')).trim();
    if (name.length == 0) {
      name = atSign.substring(1);
    }

    // profile picture
    key.metadata?.isBinary = true;
    key.key = contactFields[2];
    result = await atClientManager.atClient.get(key);
    var image = result.value;
    contactDetails['name'] = name;
    contactDetails['image'] = image;
    contactDetails['nickname'] = nickName != '' ? nickName : null;
  } catch (e) {
    contactDetails['name'] = null;
    contactDetails['image'] = null;
    contactDetails['nickname'] = null;
  }
  return contactDetails;
}