53 lines
1.9 KiB
Dart
53 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:loopin/IM/im_service.dart';
|
|
import 'package:loopin/utils/parse_message_summary.dart';
|
|
import 'package:shirne_dialog/shirne_dialog.dart';
|
|
import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart';
|
|
|
|
class NotificationBanner {
|
|
static void show(V2TimMessage msg) {
|
|
final nickname = msg.nameCard ?? msg.nickName ?? msg.senderProfile?.nickName ?? msg.sender ?? '未知用户';
|
|
final avatar = msg.faceUrl ?? msg.senderProfile?.faceUrl ?? '';
|
|
final text = parseMessageSummary(msg);
|
|
|
|
Get.snackbar(
|
|
nickname,
|
|
text,
|
|
duration: const Duration(seconds: 3),
|
|
snackPosition: SnackPosition.TOP,
|
|
margin: const EdgeInsets.all(12),
|
|
backgroundColor: Get.theme.cardColor,
|
|
colorText: Get.theme.textTheme.bodyLarge?.color,
|
|
icon: avatar.isNotEmpty
|
|
? CircleAvatar(
|
|
backgroundImage: NetworkImage(avatar),
|
|
radius: 16,
|
|
)
|
|
: null,
|
|
onTap: (_) async {
|
|
// 点击后立刻关闭
|
|
Get.closeCurrentSnackbar();
|
|
String? conversationID;
|
|
if (msg.groupID != null && msg.groupID!.isNotEmpty) {
|
|
conversationID = 'group_${msg.groupID}';
|
|
} else if (msg.userID != null && msg.userID!.isNotEmpty) {
|
|
conversationID = 'c2c_${msg.userID}';
|
|
}
|
|
final cRes = await ImService.instance.getConversation(conversationID: conversationID!);
|
|
if (cRes.success) {
|
|
if (msg.userID != null) {
|
|
// 单聊消息
|
|
Get.toNamed('/chat', arguments: cRes.data);
|
|
} else if (msg.groupID != null) {
|
|
Get.toNamed('/chat', arguments: cRes.data);
|
|
}
|
|
} else {
|
|
// 异常
|
|
MyDialog.toast(cRes.desc, icon: Icon(Icons.warning), style: ToastStyle(backgroundColor: Colors.red.withAlpha(200)));
|
|
}
|
|
},
|
|
);
|
|
}
|
|
}
|