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<NewFriendsPage> createState() => _NewFriendsPageState();
}class _NewFriendsPageState extends State<NewFriendsPage> {final ScrollController _scrollController = ScrollController(); //listview 的控制器List<ContactsBeanComb> _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<String, Object> result = HashMap<String, Object>();eventBus.emit(BaseEvent(BaseEvent.TYPE_READ_FRIENDS, result: result));}//加载数据_getData() async {List<ContactsBeanComb> 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: <Widget>[Text('没有新的朋友...',style: TextStyle(fontSize: 16.0),)],),),);}Future<void> _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<String, Object> result = HashMap<String, Object>();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<void> _showDeleteDialog(String fromAccount, String toAccount) async {return showDialog<Null>(context: context,barrierDismissible: false,builder: (BuildContext context) {return AlertDialog(title: Text('确定要删除该好友吗?', style: new TextStyle(fontSize: 17.0)),actions: <Widget>[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("");}
}

Flutter高仿微信-第26篇-新的朋友相关推荐

  1. Flutter高仿微信-第36篇-单聊-语音通话

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 目前市 ...

  2. Flutter高仿微信-第47篇-群聊-语音

     Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情 ...

  3. Flutter高仿微信-第31篇-单聊-表情

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情请 ...

  4. Flutter高仿微信-第46篇-群聊-表情

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情请 ...

  5. Flutter高仿微信-第48篇-群聊-图片

     Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情 ...

  6. Flutter高仿微信-第32篇-单聊-语音

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 详情请 ...

  7. Flutter高仿微信-第28篇-好友详情-查看个人头像

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 实现代 ...

  8. Flutter高仿微信-第22篇-支付-二维码收款(二维码)

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 实现代 ...

  9. Flutter高仿微信-第21篇-支付-向商家付款(二维码)

    Flutter高仿微信系列共59篇,从Flutter客户端.Kotlin客户端.Web服务器.数据库表结构.Xmpp即时通讯服务器.视频通话服务器.腾讯云服务器全面讲解. 详情请查看 效果图: 实现代 ...

最新文章

  1. 深度丨如何理解和评价机器学习中的表达能力、训练难度和泛化性能
  2. 选择company回显appname
  3. 利用OpenCV求矩阵的特征值和特征向量
  4. 自动增益(AGC)算法FPGA实现
  5. tensorflow2.3匹配python版本_Python 包安装和管理工具 pip 19.2 发布
  6. linux驱动编写(触摸屏驱动)
  7. idea引入外部jar,运行项目不报错,使用maven打war包install/package时报程序包不存在等
  8. 将apache的htaccess转换为nginx的重写规则
  9. JavaScript-this指向问题
  10. 那些年的UC人力外包扯淡
  11. Tomcat5.5链接Oracle、DB2、MySQL数据源实现JSP下拉框的填充
  12. C语言中指针数组和数组指针
  13. 智能网联汽车云控系统第2部分:车云数据交互规范
  14. 差分码、相对码、绝对码、空号差分码、传号差分码
  15. Centos 7 开机提示 Entering emergency mode 解决方法
  16. 201771010112罗松《面向对象程序设计(java)》第六周学习总结
  17. 从GoogLeNet架构到deep dream模型
  18. [1996 TRO] Probabilistic Roadmaps for Path Planning in High-Dimensional Configuration Spaces
  19. 汉诺塔问题(C语言代码)
  20. 【VUE】图片预览放大缩小插件(推荐阅读)

热门文章

  1. php开启sockets模块,wdlinux 增加php的sockets模块
  2. 符号检验和置信区间R代码
  3. SHA-512 逻辑
  4. 三型两步验证登不上_苹果手机开启了双重认证,未信任的设备之前登入了,开启了双重认证未...
  5. Idea的GenerateAllSetter插件,快速填充对象属性
  6. 【Leetcode】Customers Who Never Order
  7. label smooth方法论文调研
  8. 第五代人工智能计算机英语,计算机专业英语——关于第五代计算机
  9. Android 网页无法访问
  10. 焦作网络赛K. Transport Ship