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.