Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。
详情请查看
效果图:
实现代码:
import 'package:flutter/material.dart'; import 'package:wnchat2/bean/contacts/contacts_bean_comb.dart'; import 'package:wnchat2/bean/groupchat/group_user_bean.dart'; import 'package:wnchat2/common/common_utils.dart'; import 'package:wnchat2/common/sp_utils.dart'; import 'package:wnchat2/common/wn_app_bar.dart'; import 'package:wnchat2/event/base_event.dart'; import 'package:wnchat2/repository/user_repository.dart'; import 'package:wnchat2/routers/routers.dart'; import 'package:wnchat2/utils/image_utils.dart'; import 'package:wnchat2/utils/loading_dialog_utils.dart'; import 'package:wnchat2/utils/wn_date_utils.dart'; import 'package:wnchat2/views/common_avatar_view.dart';import '../common/event_bus_utils.dart'; import '../repository/contacts_repository.dart'; import '../repository/group_user_repository.dart'; import '../utils/common_toast.dart'; import '../utils/log_utils.dart';/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/11/6 19:46* Description : 添加群成员*/class AddGroupMember extends StatefulWidget{String groupId;AddGroupMember({required this.groupId});@overrideStatecreateState() => _AddGroupMemberState();}class _AddGroupMemberState extends State {ScrollController _scrollController = ScrollController(); //listview 的控制器List _contactList = [];bool isLoading = false;String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);@overridevoid initState() {super.initState();_getData();}_getData() async {List contactList = await ContactsRepository.getInstance().findAllContactsCombGroup(widget.groupId);setState(() {_contactList = contactList;});}//完成操作void _complete() async {//已选择的账户List selectAccounts = [];//选择多个好友for(int i = 0; i < _contactList.length;i++){ContactsBeanComb contactsBeanComb = _contactList[i];if(contactsBeanComb.isCheck){String selectAccount = "";if(account == contactsBeanComb.toAccount){selectAccount = contactsBeanComb.fromAccount??"";} else {selectAccount = contactsBeanComb.toAccount??"";}selectAccounts.add(selectAccount);}}if(selectAccounts.isEmpty){CommonToast.show(context, "请选择一个好友!");return;}LoadingDialogUtils.showLoadingDialog(context, msg: "请稍后...");String addTime = WnDateUtils.getCurrentTime();List groupUserList = [];for(int i = 0; i < selectAccounts.length; i++){String selectAccount = selectAccounts[i];if(selectAccount != account){//只添加群员GroupUserBean groupUserBean = GroupUserBean(groupId: widget.groupId, account: selectAccount, accountType: GroupUserBean.ACCOUNT_TYPE_MEMBER, addTime: addTime);LogUtils.d("添加成员:${groupUserBean.toJson()}");//插入群员到本地数据库await GroupUserRepository.getInstance().insertGroupUser(groupUserBean);groupUserList.add(groupUserBean);}}List ? avatarList = await UserRepository.getInstance().findAvatarListByGroupId(widget.groupId);await GroupUserRepository.getInstance().insertGroupUserServer(groupUserList);//刷新群聊数据eventBus.emit(BaseEvent(BaseEvent.TYPE_REFRESH_GROUP, result: HashMap ()));if(avatarList != null && avatarList.isNotEmpty) {await ImageUtils.processMergeAvatarImage(widget.groupId, avatarList);}LoadingDialogUtils.dimissLoadingDialog(context);CommonToast.show(context, "邀请好友成功!");Navigator.popUntil(context, ModalRoute.withName(Routes.group_chat_main));}@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("完成")),),],),);}}