Flutter高仿微信-第42篇-创建群
创始人
2024-02-16 09:44:53
0

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

 详情请查看

效果图:

实现代码:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/11/6 19:46* Description : 发起群聊*/class AddGroup extends StatefulWidget{@overrideState createState() => _AddGroupState();}class _AddGroupState extends State{final ScrollController _scrollController = ScrollController(); //listview 的控制器List _contactList = [];bool isLoading = false;String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);UserBean? _userBean;@overridevoid initState() {super.initState();_getData();}_getData() async {List contactList = await ContactsRepository.getInstance().findAllContactsComb(account);_userBean = await UserRepository.getInstance().findUserByAccount(account);setState(() {_contactList = contactList;});}//完成操作void _complete() async {//已选择的账户List selectAccounts = [];//已选择的头像List selectAvatars = [];//选择多个好友for(int i = 0; i < _contactList.length;i++){ContactsBeanComb contactsBeanComb = _contactList[i];if(contactsBeanComb.isCheck){String selectAccount = "";String selectAvatar = "";if(account == contactsBeanComb.toAccount){selectAccount = contactsBeanComb.fromAccount??"";} else {selectAccount = contactsBeanComb.toAccount??"";}selectAvatar = contactsBeanComb.avatar;selectAccounts.add(selectAccount);selectAvatars.add(selectAvatar);}}if(selectAccounts.isEmpty){CommonToast.show(context, "请选择一个好友!");return;}LoadingDialogUtils.showLoadingDialog(context, msg: "请稍后...");selectAvatars.add(_userBean?.avatar??"");selectAccounts.add(account);int max = 1000000000;int ran = Random().nextInt(max) + max;String groupId = "g${ran}";//创建群bool isSuccess = await XmppManager.getInstance().createMUC(groupId, true);if(isSuccess){String addTime = WnDateUtils.getCurrentTime();//加入群await XmppManager.getInstance().joinMucGroup(groupId);GroupBean groupBean = GroupBean(groupId: groupId, groupName: groupId, avatar: "", addTime: addTime);GroupRepository.getInstance().insertGroup(groupBean);//邀请好友入群await XmppManager.getInstance().addMembersInGroup(groupId, selectAccounts);List groupUserList = [];GroupUserBean groupUserBean = GroupUserBean(groupId: groupId, account: account, accountType: GroupUserBean.ACCOUNT_TYPE_OWNER, addTime: addTime);LogUtils.d("添加群主:${groupUserBean.toJson()}");//插入群主到本地数据库GroupUserRepository.getInstance().insertGroupUser(groupUserBean);groupUserList.add(groupUserBean);selectAccounts.forEach((selectAccount) {if(selectAccount != account){//只添加群员GroupUserBean groupUserBean2 = GroupUserBean(groupId: groupId, account: selectAccount, accountType: GroupUserBean.ACCOUNT_TYPE_MEMBER, addTime: addTime);LogUtils.d("添加成员:${groupUserBean2.toJson()}");//插入群员到本地数据库GroupUserRepository.getInstance().insertGroupUser(groupUserBean2);groupUserList.add(groupUserBean2);}});await GroupRepository.getInstance().insertGroupServer(groupBean);await GroupUserRepository.getInstance().insertGroupUserServer(groupUserList);await ImageUtils.processMergeAvatarImage(groupId, selectAvatars);LoadingDialogUtils.dimissLoadingDialog(context);Navigator.pop(context);Navigator.pushNamed(context, Routes.group_chat_main, arguments: {"groupId":groupId   //参数map});} else {LoadingDialogUtils.dimissLoadingDialog(context);CommonToast.show(context, "创建群聊失败!");}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: WnAppBar.getAppBar(context, Text("发起群聊")),body: Column(children: [SizedBox(height: 10,),Container(child: Text("请选择好友", style: TextStyle(fontSize: 22, color: Colors.black54, fontWeight: FontWeight.bold),),),Expanded(child:ListView.builder(itemCount: _contactList.length,controller: _scrollController,itemBuilder: (context, index) {return InkWell(onLongPress: (){LogUtils.d("长按。${index}");},onTap: (){//_goDetails(_contactList[index]);},child: Container(decoration: BoxDecoration(border: Border(bottom:BorderSide(color: Color(0xffd9d9d9), width: 0.3))),padding: EdgeInsets.only(left: 14, top: 10, bottom: 10),child: Row(children: [CommonAvatarView.showBaseImage(_contactList[index].avatar, 44, 44),SizedBox(width: 12,),Text(_contactList[index].nickName, maxLines: 1,style: TextStyle(fontSize: 18, color: Colors.black, fontWeight: FontWeight.bold),),Expanded(child: Text("")),Checkbox(value: _contactList[index].isCheck, onChanged: (isCheck){//LogUtils.d("点击:${isCheck}");_contactList[index].isCheck = isCheck!;setState(() {});}),],),),);})),Container(alignment: Alignment.centerRight,margin: EdgeInsets.only(right: 12, bottom: 6),child: ElevatedButton(style: ElevatedButton.styleFrom(backgroundColor: Colors.green,textStyle: TextStyle(fontSize: 20)),onPressed: (){_complete();},child: Text("完成")),),],),);}}

相关内容

热门资讯

祥源系实控人俞发祥涉嫌犯罪被采... 12月22日晚间,祥源文旅(600576.SH)、交建股份(603815.SH)、海昌海洋公园(02...
日本281名教职人员因性犯罪等... 据日本广播协会(NHK)等日媒报道,当地时间22日,日本文部科学省表示,日本2024财年(2024年...
长期护理保险制度已覆盖约3亿人 本报浙江宁波12月22日电(记者张菁)2025年全国长期护理保险高质量发展大会今天在浙江宁波召开。会...
学生遭霸凌被打骨折,校规不能替... 来源:红网 作者:高家千 近日,网上有家长发帖称,广西南宁琼林学校多名学生反锁教室门殴打同学,导...
央行发布一次性信用修复政策助力... 本报北京12月22日电(记者 姜雨晴)中国人民银行今天发布《关于实施一次性信用修复政策有关安排的通知...
最高法发布修改后的《民事案件案... 本报讯(记者卢越)日前,最高人民法院正式发布《关于修改〈民事案件案由规定〉的决定》《关于印发修改后的...
关于《河南省烟草专卖管理条例(... 主任、各位副主任、秘书长、各位委员: 现就《河南省烟草专卖管理条例(修订草案)》(以下简称《条例(修...
揭露硅谷血检巨骗的记者起诉xA... 来源:环球市场播报 当地时间周一,一名因揭露硅谷血液检测初创公司Theranos欺诈行为而闻名的调查...
跨境之和 “咖啡+茶” 一体调... 在日常调解中,中心通常会运用“咖啡+茶”涉外调解工作法对纠纷双方进行调解。受访者供图 12月15日,...