• Flutter高仿微信-第45篇-群聊-文本


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

     详情请查看

    效果图:

    实现代码:

     详情请参考Flutter高仿微信-第44篇-群聊, 这里只是群聊的文本实现代码。

    //我的文本
    Widget meTextWidget(){
      return Column(
        // Column被Expanded包裹起来,使其内部文本可自动换行
        crossAxisAlignment: CrossAxisAlignment.end,
        children: [
          Container(
            padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 10.0),
            decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(5.0),),color: Color(0xFF9EEA6A),),
            child: Text(
              widget.chatBean.content??"",
              textAlign: TextAlign.left,
              style: TextStyle(color: Colors.black, fontSize: 20.0),
            ),
          )
        ],
      );
    }

    //朋友的文本
    Widget toTextWidget(){
      return Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
            padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 10.0),
            decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(5.0),),color: Color(0xFFEDEDED)),
            child: Text(
              widget.chatBean.content??"",
              textAlign: TextAlign.left,
              style: TextStyle(color: Colors.black, fontSize: 20.0),
            ),
          )
        ],
      );
    }

    //定义发送文本事件的处理函数
    void _handleSubmitted(String text) async {
      if (text.length > 0) {
    
        bool isNetwork = await CommonNetwork.isNetwork();
        if(!isNetwork) {
          CommonUtils.showNetworkError(context);
          return;
        }
    
        int contentType = CommonUtils.CHAT_CONTENT_TYPE_TEXT;
        String addTime = WnDateUtils.getCurrentTime();
        String messageId = UUID.getUUID();
        ChatSendBean chatSendBean = ChatSendBean();
        chatSendBean.contentType = contentType;
        chatSendBean.content = text;
        chatSendBean.addTime = addTime;
        chatSendBean.second = 0;
        chatSendBean.messageId = messageId;
        chatSendBean.fromAccount = SpUtils.getAccount();
        String message = jsonEncode(chatSendBean);
    
    
        controller.clear(); //清空输入框
        GroupChatBean groupChatBean = GroupChatBean(account: widget.account, groupId: widget.toGroupId, content: text, contentType: contentType, addTime: addTime, messageId: messageId, localMediaUrl: "", serverMediaUrl: "", second: 0);
        //状态变更,向聊天记录中插入新记录
        setState(() {
          hideAddIcon = false;
          hideSend = true;
          items.add(groupChatBean);
        });
        await GroupChatRepository.getInstance().insertGroupChat(groupChatBean);
    
        _sendMessage(message);
    
        jumpToBottom(100);
      }
    }

    //发送消息
    _sendMessage(var message){
      int id = DateTime.now().millisecondsSinceEpoch;
      String toJid = "${widget.toGroupId}@conference.wangning";
      XmppManager.getInstance().sendGroupMessageWithType(toJid, message, "${id}", id);
    
      Map result = HashMap();
      eventBus.emit(BaseEvent(BaseEvent.TYPE_NEW_MESSAGE, result: result));
    }

  • 相关阅读:
    Mysql基础知识梳理
    人工神经网络的数学内涵,神经网络的数学表达式
    QTableView合并单元格
    从零开始一套完整的短视频运营方案,想做抖音快手短视频的速来观摩。
    day12学习总结
    装饰器模式 —— mybatis
    TCMonodepth:Enforcing Temporal Consistency in Video Depth Estimation-论文阅读
    es的must_not的踩坑
    解析java中的clone方法
    模块计算机类型“x64”与目标计算机类型“x86”冲突
  • 原文地址:https://blog.csdn.net/maoning20080808/article/details/128041705