fix bug that can't convert unreceived msgs while refreshes

main
htylight 2023-10-05 12:12:56 +08:00
parent 67377bea97
commit e8ec7d9fa4
9 changed files with 55 additions and 24 deletions

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';
import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:web_socket_channel/web_socket_channel.dart';
import 'package:web_socket_channel/status.dart' as status; import 'package:web_socket_channel/status.dart' as status;

View File

@ -75,9 +75,11 @@ class _ChatScreenState extends State<ChatScreen> with GetItStateMixin {
Future<void> _getUnreceivedMsg(String userId) async { Future<void> _getUnreceivedMsg(String userId) async {
print('触发了获取信息事件..................'); print('触发了获取信息事件..................');
final res = await getUnreceivedMsg(userId); final res = await getUnreceivedMsg(userId);
print(res);
if (res['code'] == 10900) { if (res['code'] == 10900) {
for (var msg in res['data'] as List<Map<String, dynamic>>) {
for (var msg in res['data']) {
if (msg['event'] == 'friend-chat-msg') { if (msg['event'] == 'friend-chat-msg') {
receiveFriendMsg(msg, false); receiveFriendMsg(msg, false);
} else if (msg['event'] == 'group-chat-msg') { } else if (msg['event'] == 'group-chat-msg') {
@ -170,12 +172,13 @@ class _ChatScreenState extends State<ChatScreen> with GetItStateMixin {
); );
return socketStatus == SocketStatus.reconnecting; return socketStatus == SocketStatus.reconnecting;
}); });
}
SocketStatus socketStatus = socketStatus =
get<WebSocketManager>().socketStatus; get<WebSocketManager>().socketStatus;
if (socketStatus == SocketStatus.connected) {
await _getUnreceivedMsg(userId); if (socketStatus == SocketStatus.connected) {
} await _getUnreceivedMsg(userId);
} }
}, },
child: ValueListenableBuilder( child: ValueListenableBuilder(

View File

@ -36,6 +36,11 @@ class GroupChatChatTile extends StatefulWidget {
} }
class _GroupChatChatTileState extends State<GroupChatChatTile> { class _GroupChatChatTileState extends State<GroupChatChatTile> {
@override
void initState() {
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Box<ChatSetting> chatSettingBox = Hive.box('chat_setting'); Box<ChatSetting> chatSettingBox = Hive.box('chat_setting');

View File

@ -84,7 +84,7 @@ class _AttachmentContainerState extends State<AttachmentContainer>
? Image.file(File(filePath)) ? Image.file(File(filePath))
: Image.asset('assets/images/loading.gif'), : Image.asset('assets/images/loading.gif'),
), ),
if (progress < 1) if (progress < 1.0)
Positioned.fill( Positioned.fill(
child: Stack( child: Stack(
alignment: Alignment.center, alignment: Alignment.center,

View File

@ -40,6 +40,7 @@ class FriendMessageBubble extends StatefulWidget {
class _FriendMessageBubbleState extends State<FriendMessageBubble> { class _FriendMessageBubbleState extends State<FriendMessageBubble> {
// add late here so you can access widget instance // add late here so you can access widget instance
late bool _isHideMsg; late bool _isHideMsg;
Timer? _timer;
@override @override
void initState() { void initState() {
@ -50,7 +51,7 @@ class _FriendMessageBubbleState extends State<FriendMessageBubble> {
if (_isHideMsg) { if (_isHideMsg) {
if (widget.index + 1 == widget.length) { if (widget.index + 1 == widget.length) {
_isHideMsg = false; _isHideMsg = false;
Timer( _timer = Timer(
const Duration(milliseconds: 3500), const Duration(milliseconds: 3500),
() { () {
setState(() { setState(() {
@ -62,6 +63,14 @@ class _FriendMessageBubbleState extends State<FriendMessageBubble> {
} }
} }
@override
void dispose() {
super.dispose();
if (_timer != null) {
_timer!.cancel();
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
bool isFriend = widget.senderId == widget.contactId; bool isFriend = widget.senderId == widget.contactId;
@ -171,7 +180,7 @@ class _FriendMessageBubbleState extends State<FriendMessageBubble> {
tapTargetSize: MaterialTapTargetSize.shrinkWrap, tapTargetSize: MaterialTapTargetSize.shrinkWrap,
), ),
child: const Text('显示消息'), child: const Text('显示消息'),
), )
], ],
), ),
); );

View File

@ -43,18 +43,20 @@ class GroupChatMessageBubble extends StatefulWidget {
class _GroupChatMessageBubbleState extends State<GroupChatMessageBubble> { class _GroupChatMessageBubbleState extends State<GroupChatMessageBubble> {
// add late here so you can access widget instance // add late here so you can access widget instance
late bool _isHideMsg; late bool _isHideMsg;
Timer? _timer;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
final chatSettingBox = Hive.box<ChatSetting>('chat_setting'); final chatSettingBox = Hive.box<ChatSetting>('chat_setting');
late final chatSetting = chatSettingBox.get(widget.contactId); late final chatSetting = chatSettingBox.get(widget.contactId);
_isHideMsg = chatSetting!.isHideMsg; _isHideMsg = chatSetting!.isHideMsg;
if (_isHideMsg) { if (_isHideMsg) {
if (widget.index + 1 == widget.length) { if (widget.index + 1 == widget.length) {
_isHideMsg = false; _isHideMsg = false;
Timer( _timer = Timer(
const Duration(milliseconds: 3500), const Duration(milliseconds: 3500),
() { () {
setState(() { setState(() {
@ -66,6 +68,14 @@ class _GroupChatMessageBubbleState extends State<GroupChatMessageBubble> {
} }
} }
@override
void dispose() {
super.dispose();
if (_timer != null) {
_timer!.cancel();
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
@ -155,14 +165,19 @@ class _GroupChatMessageBubbleState extends State<GroupChatMessageBubble> {
), ),
], ],
), ),
TextButton( if (_isHideMsg)
onPressed: () {}, TextButton(
style: TextButton.styleFrom( onPressed: () {
padding: EdgeInsets.zero, setState(() {
tapTargetSize: MaterialTapTargetSize.shrinkWrap, _isHideMsg = false;
});
},
style: TextButton.styleFrom(
padding: EdgeInsets.zero,
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
),
child: const Text('显示信息'),
), ),
child: const Text('显示信息'),
),
], ],
), ),
); );

View File

@ -74,7 +74,6 @@ class _GroupChatMessageScreenState extends State<GroupChatMessageScreen> {
); );
} }
} }
print('22222222222222');
_isGettingNameAvatar.remove(senderId); _isGettingNameAvatar.remove(senderId);
return Future(() => true); return Future(() => true);
@ -210,7 +209,7 @@ class _GroupChatMessageScreenState extends State<GroupChatMessageScreen> {
messageT.senderId, messageT.senderId,
), ),
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.hasData) { if (snapshot.hasData || !isOther) {
return GroupChatMessageBubble( return GroupChatMessageBubble(
key: ValueKey(i), key: ValueKey(i),
index: i, index: i,

View File

@ -46,7 +46,7 @@ class SettingScreen extends StatelessWidget {
getIt.get<ApplyList>().clear(); getIt.get<ApplyList>().clear();
getIt.get<Contact>().clear(); getIt.get<Contact>().clear();
getIt.get<ContactAccountProfile>().clear(); getIt.get<ContactAccountProfile>().clear();
Hive.deleteFromDisk(); // Hive.deleteFromDisk();
await HiveDatabase.close(); await HiveDatabase.close();
}, },
); );

View File

@ -268,7 +268,7 @@ void receiveGroupChatMsg(
void receiveChatImages(Map<String, dynamic> msg) async { void receiveChatImages(Map<String, dynamic> msg) async {
print('=================收到了聊天图片事件=================='); print('=================收到了聊天图片事件==================');
// print(msg); // // print(msg);
print('======================================='); print('=======================================');
String chatImageDir = getIt.get<UserProfile>().baseImageDir; String chatImageDir = getIt.get<UserProfile>().baseImageDir;
String filename = msg['filename']; String filename = msg['filename'];
@ -292,13 +292,14 @@ void receiveChatImages(Map<String, dynamic> msg) async {
await dir.create(recursive: true); await dir.create(recursive: true);
} }
int totalChunkNum = msg['totalChunkNum']; int totalChunkNum = msg['totalChunkNum'] as int;
if (totalChunkNum == 1) { if (totalChunkNum == 1) {
await file.writeAsBytes(List<int>.from(msg['bytes'])); await file.writeAsBytes(List<int>.from(msg['bytes']));
Future.delayed( await Future.delayed(
const Duration(milliseconds: 200), const Duration(milliseconds: 200),
() { () {
print('lllllllllll');
aprBox.put( aprBox.put(
filename, filename,
AttachmentProgress(1, 1, 1.0, true, false), AttachmentProgress(1, 1, 1.0, true, false),