• Flutter高仿微信-第54篇-群聊-邀请好友


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

     详情请查看

    Flutter高仿微信视频教程和源代码下载

    效果图:

    实现代码:

    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});
    
      @override
      State createState() => _AddGroupMemberState();
    
    }
    
    class _AddGroupMemberState extends State{
    
      ScrollController _scrollController = ScrollController(); //listview 的控制器
      List _contactList = [];
      bool isLoading = false;
      String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);
    
      @override
      void 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));
    
      }
    
      @override
      Widget 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("完成")
                ),
              ),
    
            ],
          ),
        );
      }
    
    
    }
    

  • 相关阅读:
    Spring- SpringBean生命周期源码解析
    GIS 数据结构整理:网格索引
    springboot初始化
    什么是DDoS引导程序IP Stresser?
    LeetCode --- 1431. Kids With the Greatest Number of Candies 解题报告
    cdh6.x 集成spark-sql
    【CV】第 17 章:将模型移至生产
    Kimi Chat,不仅仅是聊天!深度剖析Kimi Chat 5大使用场景!
    Pandas常用操作命令(七)——表格样式
    公司职位描述
  • 原文地址:https://blog.csdn.net/maoning20080808/article/details/128050550