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 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
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 {
print('触发了获取信息事件..................');
final res = await getUnreceivedMsg(userId);
print(res);
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') {
receiveFriendMsg(msg, false);
} else if (msg['event'] == 'group-chat-msg') {
@ -170,13 +172,14 @@ class _ChatScreenState extends State<ChatScreen> with GetItStateMixin {
);
return socketStatus == SocketStatus.reconnecting;
});
}
SocketStatus socketStatus =
socketStatus =
get<WebSocketManager>().socketStatus;
if (socketStatus == SocketStatus.connected) {
await _getUnreceivedMsg(userId);
}
}
},
child: ValueListenableBuilder(
valueListenable:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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