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

详情请查看

效果图:

实现代码:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/8/11 12:16* Description : 添加好友*/
Color themeDef = Color(0xffEDEDED);class AddFriends extends StatelessWidget {UserBean userBean;AddFriends({required this.userBean});@overrideWidget build(BuildContext context) {return AddFriendsPage(title: '添加好友', userBean: userBean,);}
}class AddFriendsPage extends StatefulWidget {UserBean userBean;AddFriendsPage({super.key, required this.title, required this.userBean});final String title;@overrideState<AddFriendsPage> createState() => _AddFriendsState();
}class _AddFriendsState extends State<AddFriendsPage> {@overridevoid initState() {super.initState();_checkAvailable();}//检查状态, 如果不可以,先登录void _checkAvailable() async{var isAvailable = await XmppManager.getInstance().isAvailable();if(!isAvailable){String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);String password = SpUtils.getString(CommonUtils.LOGIN_PASSWORD);XmppManager.getInstance().connect(account, password);}}bool bCanPress = true;//添加好友void _createRoster(String toAccount) async {if(!bCanPress){return;}bCanPress = false;bool isNetwork = await CommonNetwork.isNetwork();if(!isNetwork) {CommonUtils.showNetworkError(context);return;}var isAvailable = await XmppManager.getInstance().isAvailable();LogUtils.d("连接状态:${isAvailable} , ${toAccount}");if(!isAvailable){_checkAvailable();CommonToast.show(context, "添加失败,请重试!");return;}CommonToast.show(context, "请稍后。。。");UserBean toUserBean = await UserRepository.getInstance().getUserServer(toAccount);if(toUserBean != null){UserRepository.getInstance().insertUserLocal(toUserBean);String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);String addTime = WnDateUtils.getCurrentTime();//添加好友之前, 先删除await ContactsRepository.getInstance().deleteContactsByAccount(account, toAccount);ContactsBean contactsBean  = ContactsBean();contactsBean.fromAccount = account;contactsBean.toAccount = toAccount;contactsBean.type = ContactsBean.typeRequest;contactsBean.addTime = addTime;ContactsRepository.getInstance().insertContactsLocal(contactsBean);ContactsRepository.getInstance().insertContactsServer(contactsBean);XmppManager.getInstance().createRoster(toAccount);//获取对方账号信息//String message = "${CommonUtils.CHAT_CONTENT_TYPE_ADD_FRIENDS}${CommonUtils.CHAT_MESSAGE_SPILE}${account}${CommonUtils.CHAT_MESSAGE_SPILE}${addTime}";ChatSendBean chatSendBean = ChatSendBean();chatSendBean.contentType = CommonUtils.TYPE_ADD_FRIENDS;chatSendBean.content = account;chatSendBean.addTime = addTime;String message = jsonEncode(chatSendBean);_sendMessage(toAccount, message);CommonToast.show(context, "添加成功!");Navigator.pop(context);} else {CommonToast.show(context, "添加失败,请重试!");}//2秒后才可以继续点击Future.delayed(Duration(seconds: 2), (){bCanPress = true;});}_sendMessage(String toAccount, var message){int id = DateTime.now().millisecondsSinceEpoch;String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);String toJid = toAccount + "@wangning";LogUtils.d("添加好友发送消息:${toJid} , ${message}");XmppManager.getInstance().sendMessage(toJid, message, "$account", id);}String results = "";//原来的内容是空的final TextEditingController controller = TextEditingController(text: "");@overrideWidget build(BuildContext context) {return Scaffold(appBar: WnAppBar.getAppBar(context, Text("${widget.title}")),body: Column(children: [_getAccountWidget(),_getAddFriendsWidget(),],),);}//显示用户信息控件Widget _getAccountWidget(){String avatarUrl = widget.userBean.avatar??"";return Container(height: 140,alignment: Alignment.bottomCenter,padding: const EdgeInsets.all(10.0),//上下左右都设置边距child: Row(crossAxisAlignment: CrossAxisAlignment.center,children: [GestureDetector(onTap: (){Navigator.push(context, MaterialPageRoute(builder: (context) => CommonImagePreview(fileName : CommonUtils.getReallyImage(avatarUrl), isNetwork: true, defaultUrl: CommonUtils.getDefaultAvatar(),)));},child: CommonAvatarView.showBaseImage(avatarUrl, 80, 80),),SizedBox(width: 12),Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.center,children: [Text("${widget.userBean.nickName}", style: TextStyle(fontSize: 20, color: Colors.black),),Text("账号:${widget.userBean.account}", style: TextStyle(fontSize: 16, color: Colors.black),),],),],),);}//添加控件Widget _getAddFriendsWidget(){return Container(padding: const EdgeInsets.all(10.0),//上下左右都设置边距child: Row(mainAxisAlignment: MainAxisAlignment.center,children: [MaterialButton(color: Colors.blue,textColor: Colors.white,padding: EdgeInsets.only(left: 28, top: 8, right: 28, bottom: 8),child: Text('添加到通讯录',style: TextStyle(fontSize: 16),),onPressed: () {LogUtils.d("点击  添加到通讯录 ");_createRoster(widget.userBean.account!);},)],),);}
}

Flutter高仿微信-第57篇-添加好友相关推荐

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

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

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

    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高仿微信-第58篇-扫一扫

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

  8. Flutter高仿微信-第3篇-主页

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

  9. Flutter高仿微信-第26篇-新的朋友

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

最新文章

  1. 安卓下使用 dropbear 开启SSH And arm 下的busybox
  2. angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2
  3. CodeForces - 1323C Unusual Competitions(贪心)
  4. PyTorch-训练
  5. 如果有一天,小夕不再萌...
  6. mysql max嵌套select_使用嵌套select子式 解决mysql不能叠加使用如max(sum())的问题
  7. 深度优先搜索 - 最短路径
  8. 计算机用固态硬盘无法启动不了,新固态硬盘装完系统无法进入解决教程
  9. 博途的多步过程控制, 寄存器寻址
  10. 联想拯救者y7000怎么配置Java环境_联想拯救者Y7000装win7详细教程(包含BIOS设置和新USB驱动)...
  11. win7休眠 计算机管理,Win7休眠功能怎么关闭?
  12. Linux键盘输入读取
  13. 十二个“一”的演义小故事
  14. 通信教程 | I²C基础原理及通信协议
  15. JDOM解析xml文件
  16. 线性表:链表的基本操作
  17. Linux 磁盘空间释放问题
  18. 三极管放大概念和性能指标
  19. 阿里又孵出一只2000亿猛兽,马云当年的眼光太狠了
  20. “国产”操作系统UOS(Deepin V20专业版)

热门文章

  1. 戴尔计算机进入安全模式后黑屏,戴尔笔记本电脑开机黑屏怎么办?
  2. ch340t电路_USB转串口CH340各封装官方原理图、PCB参考电路图下载2018-3-23
  3. 「Adobe国际认证」关于 Adobe Photoshop启动“选择并遮住”工作区
  4. 用 BOX-COX 变换进行数据正态性处理
  5. 识别PDF关键词,在文件页数和坐标
  6. 【idea】智能花盆
  7. table固定单元格宽度
  8. hibernate查询结果映射到实体和map的方法
  9. 笔记本有线网络共享为WiFi
  10. 全双工和半双工的区别?