Я ищу предложения по оптимизации этого процесса. В частности, мне хотелось бы знать, поможет ли использование механизма кэширования, и если да, то как я могу эффективно его реализовать, чтобы ускорить получение контактов. В идеале я хотел бы загружать только часть контактов за раз, чтобы повысить производительность.
Что я пробовал:
Я реализовал следующий код для получения контактов с устройства, используя пакет flutter_contacts 1.1.9+2 и Getx для управления состоянием:
Код: Выделить всё
class PhoneBookController extends GetxController{
RxList filteredContacts = [].obs;
RxList allContacts = [].obs;
RxBool isLoading = true.obs;
@override
void onInit() {
super.onInit();
fetchContacts();
}
Future fetchContacts() async {
try {
isLoading.value = true;
// Check if the app has permission to access contacts
if (await FlutterContacts.requestPermission()) {
// Fetch contacts with properties (e.g., phone numbers) and photos
final contacts = await FlutterContacts.getContacts(
withProperties: true, withPhoto: true);
if (contacts.isNotEmpty) {
allContacts.value = contacts; // Store all fetched contacts
filteredContacts.value = contacts; // Initialize filtered contacts with all
} else {
Get.snackbar('No Contacts', 'No contacts found.');
}
} else {
// If permission is not granted, show an error message
Get.snackbar('Permission Denied', 'Please grant permission to access contacts.');
}
} catch (e) {
Get.snackbar('Error', 'Failed to fetch contacts.');
} finally{
isLoading.value = false;
}
}
}
Я ожидал, что код будет хорошо работать при получении контактов и сохранении их в списке. Однако, поскольку у меня на телефоне более 1500 контактов, каждый раз выбор всех контактов значительно замедляет работу приложения, особенно при доступе к ним через пользовательский интерфейс.
**
Что произошло на самом деле:**
Контакты извлекаются успешно, но этот процесс занимает много времени, поскольку каждый раз извлекаются все более 1500 контактов. Это влияет на производительность приложения и вызывает задержки. Мне нужен способ оптимизировать этот процесс, в идеале — путем постепенного кэширования или получения контактов.
Подробнее здесь: https://stackoverflow.com/questions/793 ... aching-for