import 'package:e2ee_chat/azlistview/azlistview.dart'; import 'package:e2ee_chat/common/api.dart'; import 'package:e2ee_chat/common/global.dart'; import 'package:e2ee_chat/model/contact_info.dart'; import 'package:e2ee_chat/model/message.dart'; import 'package:e2ee_chat/model/user.dart'; import 'package:e2ee_chat/presenter/contact_list.dart'; import 'package:e2ee_chat/presenter/chat_list.dart'; import 'package:e2ee_chat/presenter/login.dart'; import 'package:e2ee_chat/presenter/user_chat.dart'; import 'package:e2ee_chat/view/user_chat.dart'; import 'package:e2ee_chat/widgets/utils.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ContactListView extends StatefulWidget { @override _ContactListViewState createState() => _ContactListViewState(); } class _ContactListViewState extends State { final presenter = ContactListPresenter(); @override void initState() { super.initState(); presenter.freshContacts().then((_) => setState(() {})); } @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => presenter, child: Builder( builder: (context) { final provider = Provider.of(context); final contacts = provider.contacts; return RefreshIndicator( child: AzListView( data: contacts, itemCount: contacts.length, itemBuilder: (context, index) { ContactInfo info = contacts[index]; return Utils.getWeChatListItem(context, info, defHeaderBgColor: Color(0xFFE5E5E5), onTap: () { if (info.getSuspensionTag() == '↑') { Navigator.of(context).pushNamed("friend request"); } else { Navigator.of(context).pushNamed("user chat", arguments: info.name); } }); }, physics: BouncingScrollPhysics(), susItemBuilder: (BuildContext context, int index) { ContactInfo model = contacts[index]; debug('sus item build contact info: name ${model.name} tag ${model.getSuspensionTag()}'); if ('↑' == model.getSuspensionTag()) { return Container(); } return Utils.getSusItem(context, model.getSuspensionTag()); }, indexBarData: ['↑', '☆', ...kIndexBarData], indexBarOptions: IndexBarOptions( needRebuild: true, ignoreDragCancel: true, downTextStyle: TextStyle(fontSize: 12, color: Colors.white), downItemDecoration: BoxDecoration(shape: BoxShape.circle, color: Colors.green), indexHintWidth: 120 / 2, indexHintHeight: 100 / 2, indexHintDecoration: BoxDecoration( image: DecorationImage( image: AssetImage(Utils.getImgPath('ic_index_bar_bubble_gray')), fit: BoxFit.contain, ), ), indexHintAlignment: Alignment.centerRight, indexHintChildAlignment: Alignment(-0.25, 0.0), indexHintOffset: Offset(-20, 0), ), ), onRefresh: () async {}); }, ), ); } }