简体   繁体   中英

How to read contact phone number and address in Flutter using contacts_service?

I am using contacts_service package to fetch contacts from mobile into a flutter application. I want to create a JSON object of all that data and for that, I'll need to fetch the details like name, phone, address etc. But, I am getting an error in doing so.

Here is how I am fetching it.

Future<void> getContacts() async {
  final Iterable<Contact> contacts = await ContactsService.getContacts();
  var _contactArray = contacts.toList();
  var _contactsJson = [];
  for (var i = 0; i < _contactArray.length; i++) {
    Contact contact = contacts?.elementAt(i);
    Iterable<Item> phone = contact?.phones;
    print('single contact phone');
    print(phone?.elementAt(0)?.value.toString());
    PostalAddress postalAddress = contact?.postalAddresses?.elementAt(0);
    String address = postalAddress?.street.toString() +
        postalAddress?.region.toString() +
        postalAddress?.city.toString() +
        postalAddress?.country.toString() +
        postalAddress?.postcode.toString();
    print('single contact address');
    print(address ?? '');
    _contactsJson.add(singleContact);
  }
}

Here is the error that I am getting.

E/flutter (26989): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 0
E/flutter (26989): #0      List.[]  (dart:core-patch/array.dart:14:52)
E/flutter (26989): #1      ListMixin.elementAt  (dart:collection/list.dart:59:33)
E/flutter (26989): #2      MappedListIterable.elementAt  (dart:_internal/iterable.dart:417:40)
E/flutter (26989): #3      _ContactsPageState.getContacts 
package:delivero_demo_app/contacts_page.dart:49
E/flutter (26989): <asynchronous suspension>
E/flutter (26989): #4      _ContactsPageState.initState 
package:delivero_demo_app/contacts_page.dart:29
E/flutter (26989): #5      StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:4684
E/flutter (26989): #6      ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4520
E/flutter (26989): #7      Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #8      Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #9      SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5874
E/flutter (26989): #10     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #11     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #12     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4571
E/flutter (26989): #13     Element.rebuild 
package:flutter/…/widgets/framework.dart:4262
E/flutter (26989): #14     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:4525
E/flutter (26989): #15     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4520
E/flutter (26989): #16     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #17     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #18     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5874
E/flutter (26989): #19     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #20     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #21     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5874
E/flutter (26989): #22     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #23     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #24     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4571
E/flutter (26989): #25     StatefulElement.performRebuild 
package:flutter/…/widgets/framework.dart:4719
E/flutter (26989): #26     Element.rebuild 
package:flutter/…/widgets/framework.dart:4262
E/flutter (26989): #27     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:4525
E/flutter (26989): #28     StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:4710
E/flutter (26989): #29     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4520
E/flutter (26989): #30     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #31     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #32     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5874
E/flutter (26989): #33     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #34     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #35     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5874
E/flutter (26989): #36     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #37     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #38     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4571
E/flutter (26989): #39     StatefulElement.performRebuild 
package:flutter/…/widgets/framework.dart:4719
E/flutter (26989): #40     Element.rebuild 
package:flutter/…/widgets/framework.dart:4262
E/flutter (26989): #41     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:4525
E/flutter (26989): #42     StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:4710
E/flutter (26989): #43     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4520
E/flutter (26989): #44     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3490
E/flutter (26989): #45     Element.updateChild 
package:flutter/…/widgets/framework.dart:3258
E/flutter (26989): #46     C

What is the correct way to fetch the phone and address from a single contact? Any help would be great. Thank you

On an individual Contact you can call toMap() method.

Maybe something like:

Iterable<Contact> _contacts = await ContactsService.getContacts();
List<Contact> _contactList = _contacts.toList();
List _contactMaps = _contactList.map((e) => e.toMap()).toList();

String json = jsonEncode(_contactMaps);
print(json);

There is probably better way, but that's how I made it work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM