fetchContacts method

Future<List<AtContact>?> fetchContacts()

gives list of AtContact. returns null if some error occurred.

Implementation

Future<List<AtContact>?> fetchContacts() async {
  try {
    /// if contact list is already present, data is not fetched again
    if (baseContactList.isNotEmpty) {
      List<AtContact?> baseContacts =
          baseContactList.map((e) => e.contact).toList();
      baseContacts.sort((a, b) {
        int? index = a?.atSign
            .toString()
            .substring(1)
            .compareTo((b?.atSign).toString().substring(1));
        return index ?? 0;
      });
      if (baseContacts == contactList) {
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
          contactSink.add(baseContacts);
        });
        return contactList;
      }
    }
    selectedContacts = [];
    contactList = [];
    allContactsList = [];
    contactList = await atContactImpl.listContacts();
    var tempContactList = <AtContact>[...contactList];
    var range = contactList.length;
    for (var i = 0; i < range; i++) {
      allContactsList.add(contactList[i].atSign!);
      if (contactList[i].blocked!) {
        tempContactList.remove(contactList[i]);
      }
    }
    contactList = tempContactList;
    contactList.sort((a, b) {
      int? index = a.atSign
          .toString()
          .substring(1)
          .compareTo(b.atSign!.toString().substring(1));
      return index;
    });

    compareContactListForUpdatedState();
    contactSink.add(baseContactList);
    return contactList;
  } catch (e) {
    print('error in fetchContacts => $e');
    return null;
  }
}