小言_互联网的博客

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

398人阅读  评论(0)

 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});

  @override
  State<StatefulWidget> createState() => _AddGroupMemberState();

}

class _AddGroupMemberState extends State<AddGroupMember>{

  ScrollController _scrollController = ScrollController(); //listview 的控制器
  List<ContactsBeanComb> _contactList = [];
  bool isLoading = false;
  String account = SpUtils.getString(CommonUtils.LOGIN_ACCOUNT);

  @override
  void initState() {
    super.initState();
    _getData();
  }

  _getData() async {
    List<ContactsBeanComb> contactList = await ContactsRepository.getInstance().findAllContactsCombGroup(widget.groupId);
    setState(() {
      _contactList = contactList;
    });
  }

  //完成操作
  void _complete() async {
    //已选择的账户
    List<String> 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<GroupUserBean> 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<String>? avatarList =  await UserRepository.getInstance().findAvatarListByGroupId(widget.groupId);

    await GroupUserRepository.getInstance().insertGroupUserServer(groupUserList);

    //刷新群聊数据
    eventBus.emit(BaseEvent(BaseEvent.TYPE_REFRESH_GROUP, result: HashMap<String, Object>()));

    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("完成")
            ),
          ),

        ],
      ),
    );
  }


}

 


转载:https://blog.csdn.net/maoning20080808/article/details/128050550
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场