Flutter高仿微信-第26篇-新的朋友
创始人
2024-02-10 20:32:37
0

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。

详情请查看

效果图:

实现代码:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/8/17 15:48* Description : 新的朋友*/
class NewFriends extends StatelessWidget {const NewFriends({super.key});@overrideWidget build(BuildContext context) {return const NewFriendsPage(title: '新的朋友');}
}class NewFriendsPage extends StatefulWidget {const NewFriendsPage({super.key, required this.title});final String title;@overrideState createState() => _NewFriendsPageState();
}class _NewFriendsPageState extends State {final ScrollController _scrollController = ScrollController(); //listview 的控制器List _contactList = [];var json; //是否正在加载数据@overridevoid initState() {super.initState();_updateStatus();_getData();//下面这个方法每次都底部都会执行,上面的代码只会执行一次_scrollController.addListener(() {if (_scrollController.position.pixels >_scrollController.position.maxScrollExtent - 20) {_getData();}});}//更改状态void _updateStatus() async {ContactsRepository.getInstance().updateContactStatusRead();Map result = HashMap();eventBus.emit(BaseEvent(BaseEvent.TYPE_READ_FRIENDS, result: result));}//加载数据_getData() async {List contactList = await ContactsRepository.getInstance().findAllContactsCombNew();_contactList = [];setState(() {_contactList = contactList;});}//没有好友请求显示Widget _noDataWidget() {return Center(child: Padding(padding: EdgeInsets.all(10.0),child: Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [Text('没有新的朋友...',style: TextStyle(fontSize: 16.0),)],),),);}Future _onRefresh() async {await Future.delayed(Duration(seconds: 3), () {LogUtils.d('通讯录refresh');});}//接受好友邀请void _receiveFriends(ContactsBeanComb contactsBeanComb){XmppManager.getInstance().createRoster(contactsBeanComb.toAccount);ContactsBean contactsBean = ContactsBean();contactsBean.id = contactsBeanComb.id;contactsBean.fromAccount = contactsBeanComb.fromAccount;contactsBean.toAccount = contactsBeanComb.toAccount;contactsBean.type = ContactsBean.typeReceive;contactsBean.addTime = contactsBeanComb.addTime;ContactsRepository.getInstance().updateContactLocal(contactsBean);ContactsRepository.getInstance().updateContactServer(contactsBean);ChatSendBean chatSendBean = ChatSendBean();chatSendBean.contentType = CommonUtils.TYPE_RECEIVE_FRIENDS;chatSendBean.content = contactsBeanComb.toAccount;String message = jsonEncode(chatSendBean);_sendMessage(contactsBeanComb.fromAccount, message);Map result = HashMap();eventBus.emit(BaseEvent(BaseEvent.TYPE_RECEIVE_FRIENDS, result: result));Navigator.pop(context);}//发送消息_sendMessage(String toAccount, var message){int id = DateTime.now().millisecondsSinceEpoch;String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);String toJid = toAccount + "@wangning";XmppManager.getInstance().sendMessage(toJid, message, "$account", id);}@overrideWidget build(BuildContext context) {return Scaffold(appBar: WnAppBar.getAppBar(context, Text("${widget.title}")),body: Column(children: [Expanded(child:_contactList.length > 0? RefreshIndicator(onRefresh: _onRefresh,child: ListView.builder(itemCount: _contactList.length,controller: _scrollController,itemBuilder: (context, index) {return InkWell(onLongPress: (){_showDeleteDialog(_contactList[index].fromAccount, _contactList[index].toAccount);},onTap: (){},child: Container(decoration: BoxDecoration(border: Border(bottom:BorderSide(color: Color(0xffd9d9d9), width: 0.3))),width: double.infinity,padding: EdgeInsets.only(left: 14, top: 10, bottom: 10),child: Row(children: [CommonAvatarView.showBaseImage(_contactList[index].avatar),SizedBox(width: 12,),Text(_contactList[index].nickName, maxLines: 1,style: TextStyle(fontSize: 18, color: Colors.black, fontWeight: FontWeight.bold),),SizedBox(width: 12,),Expanded(child: SizedBox()),//自动扩展挤压_getFriendsStatus(_contactList[index]),],),),);})): _noDataWidget()),],),);}//删除对话框Future _showDeleteDialog(String fromAccount, String toAccount) async {return showDialog(context: context,barrierDismissible: false,builder: (BuildContext context) {return AlertDialog(title: Text('确定要删除该好友吗?', style: new TextStyle(fontSize: 17.0)),actions: [MaterialButton(child: Text('取消'),onPressed: (){LogUtils.d("确定取消");Navigator.of(context).pop();},),MaterialButton(child: Text('确定'),onPressed: (){LogUtils.d("确定删除");Navigator.pop(context);_deleteContacts(fromAccount, toAccount);},)],);});}//删除联系人_deleteContacts(String fromAccount, String toAccount) async{bool deleteServerFlag = await ContactsRepository.getInstance().deleteContactsByAccountServer(fromAccount, toAccount);if(deleteServerFlag){bool deleteFlag = await ContactsRepository.getInstance().deleteContactsByAccount(fromAccount, toAccount);if(deleteFlag){CommonToast.show(context, "删除成功!");_getData();} else {CommonToast.show(context, "删除失败!");}} else {CommonToast.show(context, "删除失败!");}}Widget _getFriendsStatus(ContactsBeanComb contactsBeanComb){String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);LogUtils.d("新的朋友 _getFriendsStatus ${account} , ${contactsBeanComb.fromAccount}, ${contactsBeanComb.toAccount}");if(contactsBeanComb.fromAccount == account) {LogUtils.d("已发送");return GestureDetector(onLongPress: (){_receiveFriends(contactsBeanComb);},child: Container(margin: EdgeInsets.only(left: 12.0, right: 12),child: Text("已发送"),),);} else if(contactsBeanComb.type == ContactsBean.typeRequest||contactsBeanComb.type == ContactsBean.typeRead){LogUtils.d("同意按钮");return Container(margin: EdgeInsets.only(left: 12.0, right: 12),child: MaterialButton(color: Colors.green,textColor: Colors.white,child: Text("同意"),onPressed: (){LogUtils.d("新的朋友点击添加");_receiveFriends(contactsBeanComb);},),);}return Text("");}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...