feat:增加服务器接口模块
This commit is contained in:
@@ -1,6 +1,11 @@
|
||||
import 'package:azlistview/azlistview.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lpinyin/lpinyin.dart';
|
||||
import 'package:sweet_chat_app/apis/user_api.dart';
|
||||
import 'package:sweet_chat_app/models/user.dart';
|
||||
import 'package:sweet_chat_app/utils/SpUtil.dart';
|
||||
|
||||
import 'chat_page.dart';
|
||||
|
||||
class ContactInfo extends ISuspensionBean {
|
||||
final String name;
|
||||
@@ -29,54 +34,39 @@ class ContactsPage extends StatefulWidget {
|
||||
|
||||
class _ContactsPageState extends State<ContactsPage> {
|
||||
List<ContactInfo> contactList = [];
|
||||
List<ContactInfo> topList = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_loadFakeData();
|
||||
_loadFriends();
|
||||
}
|
||||
|
||||
void _loadFakeData() {
|
||||
contactList = [
|
||||
ContactInfo(name: '张三', avatar: 'https://picsum.photos/id/1011/200'),
|
||||
ContactInfo(name: '李四', avatar: 'https://picsum.photos/id/1012/200'),
|
||||
ContactInfo(name: '王五', avatar: 'https://picsum.photos/id/1013/200'),
|
||||
ContactInfo(name: '赵六', avatar: 'https://picsum.photos/id/1014/200'),
|
||||
ContactInfo(name: '陈七', avatar: 'https://picsum.photos/id/1015/200'),
|
||||
ContactInfo(name: '刘八', avatar: 'https://picsum.photos/id/1016/200'),
|
||||
ContactInfo(name: '周九', avatar: 'https://picsum.photos/id/1017/200'),
|
||||
ContactInfo(name: '吴十', avatar: 'https://picsum.photos/id/1018/200'),
|
||||
ContactInfo(name: '欧阳峰', avatar: 'https://picsum.photos/id/1021/200'),
|
||||
ContactInfo(name: '诸葛青', avatar: 'https://picsum.photos/id/1022/200'),
|
||||
ContactInfo(name: '司马光', avatar: 'https://picsum.photos/id/1023/200'),
|
||||
ContactInfo(name: '慕容复', avatar: 'https://picsum.photos/id/1024/200'),
|
||||
ContactInfo(name: '安琪拉', avatar: 'https://picsum.photos/id/1031/200'),
|
||||
ContactInfo(name: '亚瑟', avatar: 'https://picsum.photos/id/1032/200'),
|
||||
ContactInfo(name: '李白', avatar: 'https://picsum.photos/id/1033/200'),
|
||||
ContactInfo(name: '韩信', avatar: 'https://picsum.photos/id/1034/200'),
|
||||
ContactInfo(name: '孙尚香', avatar: 'https://picsum.photos/id/1035/200'),
|
||||
ContactInfo(name: '鲁班', avatar: 'https://picsum.photos/id/1036/200'),
|
||||
ContactInfo(name: '妲己', avatar: 'https://picsum.photos/id/1037/200'),
|
||||
ContactInfo(name: '甄姬', avatar: 'https://picsum.photos/id/1038/200'),
|
||||
];
|
||||
Future<void> _loadFriends() async {
|
||||
final userId = SpUtil.getInt('userId') ?? 0;
|
||||
final friendList = await getUserFriendsApi(userId);
|
||||
|
||||
_handleList(contactList);
|
||||
setState(() {
|
||||
_handleList(friendList);
|
||||
});
|
||||
}
|
||||
|
||||
void _handleList(List<ContactInfo> list) {
|
||||
for (var item in list) {
|
||||
final pinyin = PinyinHelper.getPinyinE(item.name);
|
||||
final tag = pinyin.substring(0, 1).toUpperCase();
|
||||
item.namePinyin = pinyin;
|
||||
item.tagIndex = RegExp(r'[A-Z]').hasMatch(tag) ? tag : '#';
|
||||
}
|
||||
void _handleList(List<User> friends) {
|
||||
contactList =
|
||||
friends.map((user) {
|
||||
final pinyin = PinyinHelper.getPinyinE(user.nickname);
|
||||
final tag = pinyin.substring(0, 1).toUpperCase();
|
||||
|
||||
SuspensionUtil.sortListBySuspensionTag(list);
|
||||
SuspensionUtil.setShowSuspensionStatus(list);
|
||||
return ContactInfo(
|
||||
name: user.nickname,
|
||||
avatar: user.avatarUrl,
|
||||
tagIndex: RegExp(r'^[A-Z]$').hasMatch(tag) ? tag : '#',
|
||||
namePinyin: pinyin,
|
||||
);
|
||||
}).toList();
|
||||
|
||||
setState(() {});
|
||||
SuspensionUtil.sortListBySuspensionTag(contactList);
|
||||
SuspensionUtil.setShowSuspensionStatus(contactList);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -112,18 +102,17 @@ class _ContactsPageState extends State<ContactsPage> {
|
||||
data: contactList,
|
||||
itemCount: contactList.length,
|
||||
itemBuilder: (_, index) {
|
||||
final c = contactList[index];
|
||||
return Container(
|
||||
child: ListTile(
|
||||
leading: CircleAvatar(
|
||||
backgroundImage: NetworkImage(c.avatar),
|
||||
onBackgroundImageError: (_, __) {},
|
||||
),
|
||||
title: Text(
|
||||
c.name,
|
||||
style: const TextStyle(fontSize: 16, color: Colors.white),
|
||||
),
|
||||
final contact = contactList[index];
|
||||
return ListTile(
|
||||
leading: CircleAvatar(
|
||||
backgroundImage: NetworkImage(contact.avatar),
|
||||
onBackgroundImageError: (_, __) {},
|
||||
),
|
||||
title: Text(
|
||||
contact.name,
|
||||
style: const TextStyle(fontSize: 16, color: Colors.white),
|
||||
),
|
||||
onTap: () => onTapContact(contact),
|
||||
);
|
||||
},
|
||||
susItemBuilder: (_, index) {
|
||||
@@ -167,4 +156,17 @@ class _ContactsPageState extends State<ContactsPage> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void onTapContact(ContactInfo contact) {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder:
|
||||
(_) => ChatPage(
|
||||
contactName: contact.name,
|
||||
avatarUrl: contact.avatar,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user