收到此错误:未处理的异常:FormatException:无效的信封-添加联系人时

时间:2019-09-17 07:20:35

标签: flutter

使用联系服务添加联系人时出现错误。

Contact newContact = new Contact();

newContact.givenName ="Ajay";
newContact.familyName ="abc";

newContact.phones = [Item(label: "mobile",value: "9998887771")];

await ContactsService.addContact(newContact);

5 个答案:

答案 0 :(得分:1)

这将解决您的问题:

现在可以处理权限的最新版本是

permission_handler: ^5.0.1+1

    Future<void> saveContactInPhone() async {
    try {

      print("saving Contact");
      PermissionStatus permission = await Permission.contacts.status;

    if (permission != PermissionStatus.granted) {
      await Permission.contacts.request();
      PermissionStatus permission = await Permission.contacts.status;

      if (permission == PermissionStatus.granted) {
      Contact newContact = new Contact();

        newContact.givenName ="Ajay";
        newContact.familyName ="abc";

          newContact.phones = [Item(label: "mobile",value: "9998887771")];

        await ContactsService.addContact(newContact);

      } else {
        //_handleInvalidPermissions(context);
      }
    } else {
      Contact newContact = new Contact();

        newContact.givenName ="Ajay";
        newContact.familyName ="abc";

          newContact.phones = [Item(label: "mobile",value: "9998887771")];

        await ContactsService.addContact(newContact);
    }
      print("object");      

    } catch (e) {
      print(e);
    }
  }

这对我来说很好。

答案 1 :(得分:0)

这是我的联系人保存代码,可在Android和iOS上使用,请尝试输入

    Contact newContact = new Contact();
    newContact.givenName = NAME; //NAME = desire name
    newContact.emails = [Item(label: "email", value: EMAIL)]; //EMAIL = desire email
    newContact.phones = [Item(label: "phone", value: PHONE)]; //PHONE = desire phone
    newContact.company = COMPANY; //COMPANY = desire company name
    newContact.jobTitle = JOB_TITLE; //JOB_TITLE = desire job title
    await ContactsService.addContact(newContact); 

答案 2 :(得分:0)

我有同样的问题。为解决此问题,您应该对联系人中的写入数据应用权限。这是危险的权限,因此仅在清单中添加权限是不够的。 对于应用或拒绝权限的呼叫窗口,可以使用| id | location_id | ancestor_id | position | |----|-------------|-------------|----------| | 1 | 2 | 1 | 1 | | 2 | 3 | 2 | 1 | | 3 | 3 | 1 | 2 | | 4 | 4 | 3 | 1 | | 5 | 4 | 2 | 2 | | 6 | 4 | 1 | 3 |

permission_handler 4.2.0

调用此方法后,您可以申请许可,并且将添加联系人。 顺便说一句,只有具有Android 6.0(API级别23)或更高版本的android设备才需要此解决方案。在较低版本中,安装应用程序时,您将应用所有权限。

答案 3 :(得分:0)

尝试这样解决您的问题

 PermissionStatus permission = await PermissionHandler()
    .checkPermissionStatus(PermissionGroup.contacts);

if (permission != PermissionStatus.granted) {
  await PermissionHandler().requestPermissions([PermissionGroup.contacts]);
  PermissionStatus permission = await PermissionHandler()
      .checkPermissionStatus(PermissionGroup.contacts);

  if (permission == PermissionStatus.granted) {
   Contact newContact = new Contact();

     newContact.givenName ="Ajay";
     newContact.familyName ="abc";

      newContact.phones = [Item(label: "mobile",value: "9998887771")];

     await ContactsService.addContact(newContact);
  } else {
    //_handleInvalidPermissions(context);
  }
} else {
   Contact newContact = new Contact();

     newContact.givenName ="Ajay";
     newContact.familyName ="abc";

      newContact.phones = [Item(label: "mobile",value: "9998887771")];

     await ContactsService.addContact(newContact);
}

答案 4 :(得分:0)

如果您已经在使用 PermissionHandler,但仍然遇到此错误,请确保您在 AndroidManifest.xml 中声明您的应用使用写入联系人的权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app">
  <uses-permission android:name="android.permission.INTERNET"/>

  <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <!-- this one! -->

  other stuff....
</manifest>