没有任何指令的颤振接触



我是一只新来的蜜蜂。我已从链接复制代码https://rrtutors.com/tutorials/read-contacts-from-phone-in-flutter

我正在使用flaft_contact依赖项。我创建了一个简单的联系人列表应用程序。我的问题是如何显示最后添加的联系人将是列表视图中的第一个。但我不能那样做。表示联系人顺序将最后添加的联系人将显示关于第一和其他将在下面**表示liveview将在其顶部显示最后一个订阅源联系人,其他联系人将在其下方显示**请帮忙。提前谢谢。

import 'dart:async';
import 'package:flutter_contact/contacts.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(ReadContacts());
}
class ReadContacts extends StatefulWidget {
@override
_ReadContactsState createState() => _ReadContactsState();
}
class _ReadContactsState extends State<ReadContacts> {
List<Contact> listContacts;
@override
void initState() {
// ignore: todo
// TODO: implement initState
super.initState();
// ignore: deprecated_member_use
listContacts = new List();
readContacts();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
appBar: AppBar(
title: Text("Get Phone Contact List"),
backgroundColor: Colors.green,
),
body: Container(
child: (listContacts.length > 0)
? ListView.builder(
itemCount: listContacts.length,
itemBuilder: (context, index) {
Contact contact = listContacts.get(index);
return Card(
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.green,
child: Center(
child: (contact.avatar != null)
? Image.memory(
contact.avatar,
height: 28,
width: 28,
)
: Icon(Icons.face),
),
),
title: Text("${contact.displayName}"),
subtitle: Text((contact.phones.length > 0) ? "${contact.phones.get(0)}" : "No contact"),
trailing: InkWell(
child: Icon(
Icons.call,
color: Colors.green,
),
onTap: () {
_makePhoneCall("tel:${contact.phones.length.gcd(0)}");
},
)),
);
})
: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
CircularProgressIndicator(
backgroundColor: Colors.red,
),
Text("reading Contacts...")
],
),
),
),
));
}
Future<void> _makePhoneCall(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
readContacts() async {
final PermissionStatus permissionStatus = await _getPermission();
if (permissionStatus == PermissionStatus.granted) {
//      Contact contact1 = ContactSortOrder.lastName();
Contacts.streamContacts().forEach((contact) {
print("${contact.displayName}");
setState(() {
listContacts.add(contact);
});
});
}
}
//Check contacts permission
Future<PermissionStatus> _getPermission() async {
final PermissionStatus permission = await Permission.contacts.status;
if (permission != PermissionStatus.granted && permission != PermissionStatus.denied) {
final Map<Permission, PermissionStatus> permissionStatus = await [Permission.contacts].request();
return permissionStatus[Permission.contacts] ?? PermissionStatus.undetermined;
} else {
return permission;
}
}
}

遗憾的是,flutter_contact没有为Contact对象提供createTime属性但它提供lastModified

所以你可以添加

listContacts.sort((a, b) => a.lastModified.compareTo(b.lastModified));

在您的readContact函数中

readContacts() async {
final PermissionStatus permissionStatus = await _getPermission();
if (permissionStatus == PermissionStatus.granted) {
//      Contact contact1 = ContactSortOrder.lastName();
Contacts.streamContacts().forEach((contact) {
print("${contact.displayName}");
setState(() {
listContacts.add(contact);
});
});
listContacts.sort((b, a) => a.lastModified.compareTo(b.lastModified));
}
}

最新更新