im_cubit.dart
1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import 'package:appframe/config/locator.dart';
import 'package:appframe/config/routes.dart';
import 'package:appframe/services/im_service.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tencent_cloud_chat_sdk/enum/V2TimAdvancedMsgListener.dart';
import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart';
class ImState extends Equatable {
final List<String> messages;
const ImState({this.messages = const []});
ImState copyWith({List<String>? messages}) {
return ImState(
messages: messages ?? this.messages,
);
}
@override
List<Object?> get props => [messages];
}
class ImCubit extends Cubit<ImState> {
late ImService imService;
late V2TimAdvancedMsgListener _msgListener;
ImCubit() : super(const ImState()) {
imService = getIt.get<ImService>();
_msgListener = V2TimAdvancedMsgListener(
onRecvNewMessage: _onMessageReceived,
);
init();
}
void init() async {
await imService.removeMsgListener(imService.msgListener);
await imService.addMsgListener(_msgListener);
}
void addMessage(String message) {
emit(state.copyWith(messages: [...state.messages, message]));
}
void goWeb() {
router.go('/web');
}
Future<void> _onMessageReceived(V2TimMessage message) async {
// 处理文本消息
if (message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT) {
print("page 收到IM消息-------- ${message.textElem?.text}");
// 处理接收到的消息
emit(state.copyWith(messages: [...state.messages, message.textElem?.text ?? '']));
} else {
print("page 忽略非文本消息-------- ${message.textElem?.text}");
}
}
@override
Future<void> close() async {
await imService.removeMsgListener(_msgListener);
await imService.addMsgListener(imService.msgListener);
super.close();
}
}