Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。
详情请查看
效果图:
详情请参考Flutter高仿微信-第44篇-群聊, 这里只是群聊的图片实现代码。
实现代码:
/*** 显示群图片* @serverImageUrl 服务器图片地址* @localImageUrl 本地图片地址*/ static Widget showGroupChatImage(String serverImageUrl,String localImageUrl, {double width = 50, double height = 50, double angle = 4, final onPressed}){String defaultImageUrl = "assets/images/base/base_error.png";Widget childWidget;//本地图片为空if(localImageUrl.isEmpty){//服务器地址为空if(serverImageUrl.isEmpty){//显示默认图片childWidget = _getDefaultAssetWidget(defaultImageUrl, width, height);} else {//显示网络图片serverImageUrl = CommonUtils.BASE_URL_UPLOAD + serverImageUrl;childWidget = _getCachedNetworkImage(serverImageUrl, defaultImageUrl, width, height);}} else {//本地图片不为空,判断是否存在File file = File(localImageUrl);bool isExist = file.existsSync();if(isExist){//如果本地文件存在,在本地显示childWidget = _getFileImageWidget(localImageUrl, width, height);} else {//网络现实图片,要加载服务器地址serverImageUrl = CommonUtils.BASE_URL_UPLOAD + serverImageUrl;childWidget = _getCachedNetworkImage(serverImageUrl, defaultImageUrl, width, height);}}return ClipRRect(borderRadius: BorderRadius.circular(angle),child: childWidget); }
//刷新多媒体(图片、语音、小视频) (先刷新本地,然后小视频压缩完成再慢慢发送) void _refreshMedia(int type, String mediaURL, String thumbnailFileName, {int mediaSecond=0, String messageId = "" }) async {bool isNetwork = await CommonNetwork.isNetwork();if(!isNetwork) {CommonUtils.showNetworkError(context);return;}String addTime = WnDateUtils.getCurrentTime();//先刷新本地聊天//ChatBean chatBean = ChatBean(fromAccount: widget.account, toAccount: widget.toGroupId,addTime:addTime,messageId: messageId,isRead: 1);GroupChatBean groupChatBean = GroupChatBean(account: widget.account, groupId: widget.toGroupId, addTime: addTime, messageId: messageId);LogUtils.d("群聊刷新:${type}");groupChatBean.contentType = type;groupChatBean.localMediaUrl = mediaURL;groupChatBean.content = thumbnailFileName;groupChatBean.second = mediaSecond;if(type == CommonUtils.CHAT_CONTENT_TYPE_IMG){//状态变更,向聊天记录中插入新记录setState(() {items.add(groupChatBean);});await GroupChatRepository.getInstance().insertGroupChat(groupChatBean);} jumpToBottom(100); }
//发送多媒体(图片、语音、小视频) void _sendMedia(int type, String mediaURL, {int mediaSecond = 0, String messageId = ""}) async {bool isNetwork = await CommonNetwork.isNetwork();if(!isNetwork) {return;}//上传文件GroupChatBean? serverChatBean;String message = "";String addTime = WnDateUtils.getCurrentTime();ChatSendBean chatSendBean = ChatSendBean();chatSendBean.fromAccount = SpUtils.getAccount();chatSendBean.contentType = type;chatSendBean.messageId = messageId;chatSendBean.addTime = addTime;if(type == CommonUtils.CHAT_CONTENT_TYPE_IMG){//图片serverChatBean = await UploadUtils.getInstance().uploadGroupChatImage(widget.account, widget.toGroupId, mediaURL, messageId, addTime);}chatSendBean.content = serverChatBean?.serverMediaUrl??"";GroupChatRepository.getInstance().updateGroupChatByMessageId(serverChatBean?.messageId??"", serverChatBean?.serverMediaUrl??"");message = jsonEncode(chatSendBean);_sendMessage(message); }