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

这篇博客详细介绍了如何使用Flutter构建一个高仿微信的群聊功能,包括朋友和我的文本展示、发送文本消息的事件处理以及即时通讯的实现。文章通过代码展示了群聊文本的UI设计和消息发送的逻辑,涉及Xmpp即时通讯服务器的集成。
摘要由CSDN通过智能技术生成

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

 详情请查看

效果图:

实现代码:

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

//我的文本
Widget meTextWidget(){
  return Column(
    // Column被Expanded包裹起来,使其内部文本可自动换行
    crossAxisAlignment: CrossAxisAlignment.end,
    children: <Widget>[
      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: <Widget>[
      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<String, Object> result = HashMap<String, Object>();
  eventBus.emit(BaseEvent(BaseEvent.TYPE_NEW_MESSAGE, result: result));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六毛六66

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值