簡體   English   中英

聯系人更新在 flutter [contacts_service] 中不起作用

[英]Contact update not working in flutter [contacts_service]

我在我的 flutter 應用程序中使用contact_service插件來管理用戶的聯系人數據。

我在使用這個插件時遇到了 2 個主要問題

1.當我更新舊聯系人時,沒有出現錯誤,但手機號碼已從舊聯系人中刪除,有時它會被刪除。

我的代碼是這樣的

Contact? duplicateContact = <old contact>;
duplicateContact.givenName = <new name>;
duplicateContact.company = <company name>;
duplicateContact.phones = [Item(value: mobile, label: "mobile")];

await ContactsService.updateContact(contact);

所以我這個過程是循環的,因為我想更新多個聯系人,但聯系人沒有得到更新,而不是手機號碼字段將更新為空或整個聯系人將被刪除。

所以我不知道聯系人更新出了什么問題,我發現了很多東西,但沒有任何效果

2.我嘗試使用循環一次保存多個聯系人,所以我在循環中添加了聯系人保存代碼,如下所述

for (var element in contactData) {
    final contact = Contact(
          phones: [Item(value: <mobileNo>)],
          givenName: <name>,
          company: <companyName>,
        );
    await ContactsService.addContact(contact);
}

在這里,我遇到一個非常奇怪的問題,在這個循環中,我試圖為大約 50 個人添加聯系人,但是一個人的手機號碼與另一個人的聯系人結合在一起。 有時,一個聯系人中會保存 3 或 4 個不同人的手機號碼。

嘗試使用:

await for (var element in contactData) {
    final contact = Contact(
          phones: [Item(value: <mobileNo>)],
          givenName: <name>,
          company: <companyName>,
        );
    ContactsService.addContact(contact);
}

我認為您忘記了完成代碼的一些主要步驟:

  1. 確保您遵循插件頁面中的步驟,例如權限。
  2. 看一個示例可能會幫助您解決問題插件頁面,也許您忘記了初始化某些功能。

否則嘗試使用此插件代替flutter_contact

根據我的理解, contact_service您按照文檔中提到的iOSAndroid權限正確初始化。 所以我相信你聯系正確。仍然驗證一次。

對於contact update ,您必須需要根據文檔添加identifier 您還需要將future循環用於async任務。

嘗試像下面的代碼(在 iOS 中測試):

 import 'package:contacts_service/contacts_service.dart';
 
 // UPDATE / EDIT CONTACT
 static Future updateContact() async { 
    try {
      List<Contact> contactData = await ContactsService.getContacts();
      Contact editContact = Contact(
          givenName: "Petter",
          company: "Petter",
          phones: [Item(value: "+91 0000000000", label: "mobile")]);
    
      Future.forEach(contactData, (Contact contact) async { // Handle Async loop
        if (editContact.givenName == contact.givenName) {

          editContact.identifier = contact.identifier; // MUST ADD IDENTIFIER
    
          await ContactsService.updateContact(editContact); // UPDATE CONTACT

       // await ContactsService.deleteContact(editContact); // DELETE CONTACT
        }
      });
    } catch (ex) {
      "update contact error: $ex".printLog();
    }
 } 

// ADD MULTIPLE CONTACTS
Future addContact() async {
    List<Contact> contactData = [
      Contact(
          givenName: "Jackson",
          company: "Jackson",
          phones: [Item(value: "+91 1112223330", label: "mobile")]),
      Contact(
          givenName: "Jack",
          company: "Jack",
          phones: [Item(value: "+91 4445556660", label: "mobile")]),
      Contact(
          givenName: "Joseph",
          company: "Joseph",
          phones: [Item(value: "+91 7778889990", label: "mobile")]),
      Contact(
          givenName: "John",
          company: "John",
          phones: [Item(value: "+91 1234567890", label: "mobile")]),
      Contact(
          givenName: "Jayden",
          company: "Jayden",
          phones: [Item(value: "+91 0987654321", label: "mobile")]),
      Contact(
          givenName: "Petter",
          company: "Petter",
          phones: [Item(value: "+91 1212121212", label: "mobile")]),
    ];
    try {
      Future.forEach(contactData, (Contact contact) async { // Handle Async loop
        await ContactsService.addContact(contact);
      });
    } catch (ex) {
      debugPrint("add contact error: $ex");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM