Flutter高仿微信-第57篇-添加好友
创始人
2024-02-18 18:37:44

 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 createState() => _AddFriendsState();
}class _AddFriendsState extends State {@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!);},)],),);}
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...