feat: Upgrade to 2.3.3
This commit is contained in:
parent
038a3d483d
commit
9c11e66fd5
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -1,3 +1,13 @@
|
||||||
|
# 2.3.3
|
||||||
|
|
||||||
|
## New Features
|
||||||
|
|
||||||
|
* Added a new lifecycle hook, `messageListShouldMount`.
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
* Fixed an issue on time tag creator.
|
||||||
|
|
||||||
# 2.3.2
|
# 2.3.2
|
||||||
|
|
||||||
## Improvements
|
## Improvements
|
||||||
|
|
|
||||||
|
|
@ -85,26 +85,26 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image
|
name: cached_network_image
|
||||||
sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15
|
sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.3"
|
version: "3.3.0"
|
||||||
cached_network_image_platform_interface:
|
cached_network_image_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image_platform_interface
|
name: cached_network_image_platform_interface
|
||||||
sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7
|
sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "3.0.0"
|
||||||
cached_network_image_web:
|
cached_network_image_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image_web
|
name: cached_network_image_web
|
||||||
sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0
|
sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.1.0"
|
||||||
camera:
|
camera:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -237,18 +237,18 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: dart_internal
|
name: dart_internal
|
||||||
sha256: dae3976f383beddcfcd07ad5291a422df2c8c0a8a03c52cda63ac7b4f26e0f4e
|
sha256: "689dccc3d5f62affd339534cca548dce12b3a6b32f0f10861569d3025efc0567"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.8"
|
version: "0.2.9"
|
||||||
desktop_drop:
|
desktop_drop:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: desktop_drop
|
name: desktop_drop
|
||||||
sha256: "4ca4d960f4b11c032e9adfd2a0a8ac615bc3fddb4cbe73dcf840dd8077582186"
|
sha256: d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.1"
|
version: "0.4.4"
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -414,14 +414,6 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
flutter_blurhash:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_blurhash
|
|
||||||
sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.7.0"
|
|
||||||
flutter_cache_manager:
|
flutter_cache_manager:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -796,10 +788,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: octo_image
|
name: octo_image
|
||||||
sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143"
|
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "2.0.0"
|
||||||
open_file:
|
open_file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -1211,7 +1203,7 @@ packages:
|
||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "2.3.0"
|
version: "2.3.3-preview.0"
|
||||||
tencent_cloud_uikit_core:
|
tencent_cloud_uikit_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -1565,5 +1557,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.1.0-185.0.dev <3.2.0"
|
dart: ">=3.1.0-185.0.dev <3.3.0"
|
||||||
flutter: ">=3.13.0"
|
flutter: ">=3.13.0"
|
||||||
|
|
|
||||||
|
|
@ -1,50 +1,46 @@
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:tencent_im_base/tencent_im_base.dart';
|
|
||||||
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart';
|
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart';
|
||||||
|
import 'package:tencent_im_base/tencent_im_base.dart';
|
||||||
|
|
||||||
typedef MessageFunction = Future<V2TimMessage?> Function(V2TimMessage message);
|
typedef MessageFunction = Future<V2TimMessage?> Function(V2TimMessage message);
|
||||||
|
|
||||||
typedef MessageFunctionNullCallback = Function(V2TimValueCallback<V2TimMessage> res);
|
typedef MessageFunctionNullCallback = Function(V2TimValueCallback<V2TimMessage> res);
|
||||||
|
|
||||||
typedef MessageFunctionOptional = Future<V2TimMessage?> Function(
|
typedef MessageFunctionOptional = Future<V2TimMessage?> Function(V2TimMessage message);
|
||||||
V2TimMessage message);
|
|
||||||
|
|
||||||
typedef MessageListFunction = Future<List<V2TimMessage>> Function(
|
typedef MessageListFunction = Future<List<V2TimMessage>> Function(List<V2TimMessage> messageList);
|
||||||
List<V2TimMessage> messageList);
|
|
||||||
|
typedef MessageListFunctionAsync = List<V2TimMessage> Function(List<V2TimMessage> messageList);
|
||||||
|
|
||||||
typedef FutureBool = Future<bool>;
|
typedef FutureBool = Future<bool>;
|
||||||
|
|
||||||
typedef AddFriendFunction = Function(
|
typedef AddFriendFunction = Function(String userID, String? remark, String? friendGroup, String? addWording);
|
||||||
String userID, String? remark, String? friendGroup, String? addWording);
|
|
||||||
|
|
||||||
typedef ConversationListFunction = Future<List<V2TimConversation?>> Function(
|
typedef ConversationListFunction = Future<List<V2TimConversation?>> Function(List<V2TimConversation?> conversationList);
|
||||||
List<V2TimConversation?> conversationList);
|
|
||||||
|
|
||||||
typedef FriendListFunction = Future<List<V2TimFriendInfo>> Function(
|
typedef FriendListFunction = Future<List<V2TimFriendInfo>> Function(List<V2TimFriendInfo> friendList);
|
||||||
List<V2TimFriendInfo> friendList);
|
|
||||||
|
|
||||||
typedef FriendInfoFunction = Future<V2TimFriendInfo?> Function(
|
typedef FriendInfoFunction = Future<V2TimFriendInfo?> Function(V2TimFriendInfo? friendInfo);
|
||||||
V2TimFriendInfo? friendInfo);
|
|
||||||
|
|
||||||
/// Here is the default life cycle hooks implementation for all the hooks in TUIKit.
|
/// Here is the default life cycle hooks implementation for all the hooks in TUIKit.
|
||||||
abstract class DefaultLifeCycle {
|
abstract class DefaultLifeCycle {
|
||||||
static Future<List<V2TimConversation?>> defaultConversationListSolution(
|
static Future<List<V2TimConversation?>> defaultConversationListSolution(List<V2TimConversation?> list) async {
|
||||||
List<V2TimConversation?> list) async {
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<List<V2TimFriendInfo>> defaultFriendListSolution(
|
static Future<List<V2TimFriendInfo>> defaultFriendListSolution(List<V2TimFriendInfo> list) async {
|
||||||
List<V2TimFriendInfo> list) async {
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<V2TimMessage> defaultMessageSolution(
|
static Future<V2TimMessage> defaultMessageSolution(V2TimMessage message) async {
|
||||||
V2TimMessage message) async {
|
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<List<V2TimMessage>> defaultMessageListSolution(
|
static Future<List<V2TimMessage>> defaultMessageListSolution(List<V2TimMessage> list) async {
|
||||||
List<V2TimMessage> list) async {
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
static List<V2TimMessage> defaultMessageListSolutionAsync(List<V2TimMessage> list) {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,31 +52,23 @@ abstract class DefaultLifeCycle {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static defaultNullCallbackSolution(dynamic) {
|
static defaultNullCallbackSolution(dynamic) {}
|
||||||
}
|
|
||||||
|
|
||||||
static Future<bool> defaultAddFriend(
|
static Future<bool> defaultAddFriend(String userID, String? remark, String? friendGroup, String? addWording, [BuildContext? context]) async {
|
||||||
String userID, String? remark, String? friendGroup, String? addWording,
|
|
||||||
[BuildContext? context]) async {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<bool> defaultAddGroup(String groupID, String message,
|
static Future<bool> defaultAddGroup(String groupID, String message, [BuildContext? context]) async {
|
||||||
[BuildContext? context]) async {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<V2TimFriendInfo?> defaultFriendInfoSolution(
|
static Future<V2TimFriendInfo?> defaultFriendInfoSolution(V2TimFriendInfo? friendInfo) async {
|
||||||
V2TimFriendInfo? friendInfo) async {
|
|
||||||
return friendInfo;
|
return friendInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> defaultPopBackRemind() async {
|
static Future<void> defaultPopBackRemind() async {
|
||||||
// You have to implement the exact life cycle hook in this case.
|
// You have to implement the exact life cycle hook in this case.
|
||||||
TIMUIKitClass.onTIMCallback(TIMCallback(
|
TIMUIKitClass.onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("请传入离开群组生命周期函数,提供返回首页或其他页面的导航方法。"), infoCode: 6661402));
|
||||||
type: TIMCallbackType.INFO,
|
|
||||||
infoRecommendText: TIM_t("请传入离开群组生命周期函数,提供返回首页或其他页面的导航方法。"),
|
|
||||||
infoCode: 6661402));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,16 +34,19 @@ class ChatLifeCycle {
|
||||||
/// Before rendering a message to message list.
|
/// Before rendering a message to message list.
|
||||||
bool Function(V2TimMessage msg) messageShouldMount;
|
bool Function(V2TimMessage msg) messageShouldMount;
|
||||||
|
|
||||||
|
/// Before all message will be rendered on the message list.
|
||||||
|
/// You may add or delete some messages here.
|
||||||
|
MessageListFunctionAsync messageListShouldMount;
|
||||||
|
|
||||||
ChatLifeCycle({
|
ChatLifeCycle({
|
||||||
this.shouldClearHistoricalMessageList =
|
this.shouldClearHistoricalMessageList = DefaultLifeCycle.defaultAsyncBooleanSolution,
|
||||||
DefaultLifeCycle.defaultAsyncBooleanSolution,
|
|
||||||
this.shouldDeleteMessage = DefaultLifeCycle.defaultAsyncBooleanSolution,
|
this.shouldDeleteMessage = DefaultLifeCycle.defaultAsyncBooleanSolution,
|
||||||
this.messageDidSend = DefaultLifeCycle.defaultNullCallbackSolution,
|
this.messageDidSend = DefaultLifeCycle.defaultNullCallbackSolution,
|
||||||
this.didGetHistoricalMessageList =
|
this.didGetHistoricalMessageList = DefaultLifeCycle.defaultMessageListSolution,
|
||||||
DefaultLifeCycle.defaultMessageListSolution,
|
|
||||||
this.messageWillSend = DefaultLifeCycle.defaultMessageSolution,
|
this.messageWillSend = DefaultLifeCycle.defaultMessageSolution,
|
||||||
this.modifiedMessageWillMount = DefaultLifeCycle.defaultMessageSolution,
|
this.modifiedMessageWillMount = DefaultLifeCycle.defaultMessageSolution,
|
||||||
this.newMessageWillMount = DefaultLifeCycle.defaultMessageSolution,
|
this.newMessageWillMount = DefaultLifeCycle.defaultMessageSolution,
|
||||||
this.messageShouldMount = DefaultLifeCycle.defaultBooleanSolution,
|
this.messageShouldMount = DefaultLifeCycle.defaultBooleanSolution,
|
||||||
|
this.messageListShouldMount = DefaultLifeCycle.defaultMessageListSolutionAsync,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart';
|
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart';
|
||||||
|
|
@ -14,18 +15,13 @@ import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.
|
||||||
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart';
|
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart';
|
||||||
|
import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
|
||||||
|
|
||||||
enum ConvType { none, c2c, group }
|
enum ConvType { none, c2c, group }
|
||||||
|
|
||||||
enum HistoryMessagePosition {
|
enum HistoryMessagePosition { bottom, inTwoScreen, awayTwoScreen, notShowLatest }
|
||||||
bottom,
|
|
||||||
inTwoScreen,
|
|
||||||
awayTwoScreen,
|
|
||||||
notShowLatest
|
|
||||||
}
|
|
||||||
|
|
||||||
class CurrentConversation {
|
class CurrentConversation {
|
||||||
final String conversationID;
|
final String conversationID;
|
||||||
|
|
@ -49,8 +45,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
|
|
||||||
ChatLifeCycle? _lifeCycle;
|
ChatLifeCycle? _lifeCycle;
|
||||||
bool _isDownloading = false;
|
bool _isDownloading = false;
|
||||||
final List<Map<String, String>> _waitingDownloadList =
|
final List<Map<String, String>> _waitingDownloadList = List.empty(growable: true); // example {"savePath":"","url":"",msgId:""}
|
||||||
List.empty(growable: true); // example {"savePath":"","url":"",msgId:""}
|
|
||||||
int _totalUnreadCount = 0;
|
int _totalUnreadCount = 0;
|
||||||
String localKeyPrefix = "TUIKit_conversation_stored_";
|
String localKeyPrefix = "TUIKit_conversation_stored_";
|
||||||
String localMsgIDListKey = "TUIKit_conversation_list";
|
String localMsgIDListKey = "TUIKit_conversation_list";
|
||||||
|
|
@ -63,8 +58,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
TIMUIKitChatConfig chatConfig = const TIMUIKitChatConfig();
|
TIMUIKitChatConfig chatConfig = const TIMUIKitChatConfig();
|
||||||
List<V2TimGroupApplication>? _groupApplicationList;
|
List<V2TimGroupApplication>? _groupApplicationList;
|
||||||
String Function(V2TimMessage message)? _abstractMessageBuilder;
|
String Function(V2TimMessage message)? _abstractMessageBuilder;
|
||||||
final Map<String, int> _c2cMessageEditStatusMap =
|
final Map<String, int> _c2cMessageEditStatusMap = Map.from({}); // 0 normal 1 sending
|
||||||
Map.from({}); // 0 normal 1 sending
|
|
||||||
final Map<String, bool> _c2cMessageFromUserActiveMap = Map.from({});
|
final Map<String, bool> _c2cMessageFromUserActiveMap = Map.from({});
|
||||||
final Map<String, Timer> _c2cMessageActiveTimer = Map.from({});
|
final Map<String, Timer> _c2cMessageActiveTimer = Map.from({});
|
||||||
bool _showC2cMessageEditStatus = true;
|
bool _showC2cMessageEditStatus = true;
|
||||||
|
|
@ -91,8 +85,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
onRecvMessageModified: (V2TimMessage newMsg) {
|
onRecvMessageModified: (V2TimMessage newMsg) {
|
||||||
onMessageModified(newMsg);
|
onMessageModified(newMsg);
|
||||||
},
|
},
|
||||||
onMessageDownloadProgressCallback:
|
onMessageDownloadProgressCallback: (V2TimMessageDownloadProgress messageProgress) {
|
||||||
(V2TimMessageDownloadProgress messageProgress) {
|
|
||||||
onMessageDownloadProgressCallback(messageProgress);
|
onMessageDownloadProgressCallback(messageProgress);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -188,24 +181,15 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
|
|
||||||
int get unreadCountForConversation => _unreadCountForConversation;
|
int get unreadCountForConversation => _unreadCountForConversation;
|
||||||
|
|
||||||
List<V2TimGroupApplication> get groupApplicationList =>
|
List<V2TimGroupApplication> get groupApplicationList => _groupApplicationList ?? [];
|
||||||
_groupApplicationList ?? [];
|
|
||||||
|
|
||||||
String Function(V2TimMessage message)? get abstractMessageBuilder =>
|
String Function(V2TimMessage message)? get abstractMessageBuilder => _abstractMessageBuilder;
|
||||||
_abstractMessageBuilder;
|
|
||||||
|
|
||||||
Map<String, V2TimMessageReceipt> get messageReadReceiptMap =>
|
Map<String, V2TimMessageReceipt> get messageReadReceiptMap => _messageReadReceiptMap;
|
||||||
_messageReadReceiptMap;
|
|
||||||
|
|
||||||
String get currentSelectedConv => _currentConversationList.isNotEmpty
|
String get currentSelectedConv => _currentConversationList.isNotEmpty ? _currentConversationList[_currentConversationList.length - 1].conversationID : "";
|
||||||
? _currentConversationList[_currentConversationList.length - 1]
|
|
||||||
.conversationID
|
|
||||||
: "";
|
|
||||||
|
|
||||||
ConvType? get currentSelectedConvType => _currentConversationList.isNotEmpty
|
ConvType? get currentSelectedConvType => _currentConversationList.isNotEmpty ? _currentConversationList[_currentConversationList.length - 1].conversationType : null;
|
||||||
? _currentConversationList[_currentConversationList.length - 1]
|
|
||||||
.conversationType
|
|
||||||
: null;
|
|
||||||
|
|
||||||
setCurrentConversation(CurrentConversation value) {
|
setCurrentConversation(CurrentConversation value) {
|
||||||
_currentConversationList.add(value);
|
_currentConversationList.add(value);
|
||||||
|
|
@ -214,9 +198,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
|
|
||||||
clearCurrentConversation() {
|
clearCurrentConversation() {
|
||||||
// Only keep the last 20 messages when existing a chat.
|
// Only keep the last 20 messages when existing a chat.
|
||||||
_messageListMap[currentSelectedConv] =
|
_messageListMap[currentSelectedConv] = (_messageListMap[currentSelectedConv] ?? []).sublist(max(0, ((_messageListMap[currentSelectedConv] ?? []).length - 20)));
|
||||||
(_messageListMap[currentSelectedConv] ?? []).sublist(
|
|
||||||
max(0, ((_messageListMap[currentSelectedConv] ?? []).length - 20)));
|
|
||||||
_currentConversationList.removeLast();
|
_currentConversationList.removeLast();
|
||||||
// notifyListeners();
|
// notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
@ -239,8 +221,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
_c2cMessageEditStatusMap[userID] = 0;
|
_c2cMessageEditStatusMap[userID] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_c2cMessageStatusShowTimer[userID] =
|
_c2cMessageStatusShowTimer[userID] = Timer.periodic(const Duration(seconds: 5), (timer) {
|
||||||
Timer.periodic(const Duration(seconds: 5), (timer) {
|
|
||||||
_c2cMessageEditStatusMap[userID] = 0;
|
_c2cMessageEditStatusMap[userID] = 0;
|
||||||
Timer? t = _c2cMessageStatusShowTimer[userID];
|
Timer? t = _c2cMessageStatusShowTimer[userID];
|
||||||
if (t != null && t.isActive) {
|
if (t != null && t.isActive) {
|
||||||
|
|
@ -282,23 +263,17 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
chatConfig = config;
|
chatConfig = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
initMessageMapFromLocalDatabase(
|
initMessageMapFromLocalDatabase(List<V2TimConversation?> conversations) async {
|
||||||
List<V2TimConversation?> conversations) async {
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (V2TimConversation? conversationItem in conversations) {
|
for (V2TimConversation? conversationItem in conversations) {
|
||||||
if (conversationItem == null || conversationItem.type == null) {
|
if (conversationItem == null || conversationItem.type == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final conversationID = conversationItem.userID ??
|
final conversationID = conversationItem.userID ?? conversationItem.groupID ?? conversationItem.conversationID;
|
||||||
conversationItem.groupID ??
|
if (messageListMap[conversationID] == null || messageListMap[conversationID]!.isEmpty) {
|
||||||
conversationItem.conversationID;
|
|
||||||
if (messageListMap[conversationID] == null ||
|
|
||||||
messageListMap[conversationID]!.isEmpty) {
|
|
||||||
index++;
|
index++;
|
||||||
Future.delayed(Duration(milliseconds: 500 * index), () {
|
Future.delayed(Duration(milliseconds: 500 * index), () {
|
||||||
preloadMessageForConversation(
|
preloadMessageForConversation(conversationID: conversationID, conversationType: ConvType.values[conversationItem.type!]);
|
||||||
conversationID: conversationID,
|
|
||||||
conversationType: ConvType.values[conversationItem.type!]);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -309,12 +284,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
required String conversationID,
|
required String conversationID,
|
||||||
}) async {
|
}) async {
|
||||||
final response = await _messageService.getHistoryMessageList(
|
final response = await _messageService.getHistoryMessageList(
|
||||||
count: 10,
|
count: 10, getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, userID: conversationType == ConvType.c2c ? conversationID : null, groupID: conversationType == ConvType.group ? conversationID : null);
|
||||||
getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
if (_messageListMap[conversationID] == null || _messageListMap[conversationID]!.isEmpty) {
|
||||||
userID: conversationType == ConvType.c2c ? conversationID : null,
|
|
||||||
groupID: conversationType == ConvType.group ? conversationID : null);
|
|
||||||
if (_messageListMap[conversationID] == null ||
|
|
||||||
_messageListMap[conversationID]!.isEmpty) {
|
|
||||||
_messageListMap[conversationID] = response;
|
_messageListMap[conversationID] = response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -332,15 +303,9 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
prefs.remove(localMsgIDListKey);
|
prefs.remove(localMsgIDListKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateMessageFromController(
|
Future<void> updateMessageFromController({required String msgID, required String conversationID, required ConvType conversationType}) async {
|
||||||
{required String msgID,
|
|
||||||
required String conversationID,
|
|
||||||
required ConvType conversationType}) async {
|
|
||||||
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
|
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
|
||||||
V2TimMessage? newMessage = await tools.getExistingMessageByID(
|
V2TimMessage? newMessage = await tools.getExistingMessageByID(msgID: msgID, conversationID: conversationID, conversationType: conversationType);
|
||||||
msgID: msgID,
|
|
||||||
conversationID: conversationID,
|
|
||||||
conversationType: conversationType);
|
|
||||||
if (newMessage != null) {
|
if (newMessage != null) {
|
||||||
onMessageModified(newMessage, currentSelectedConv);
|
onMessageModified(newMessage, currentSelectedConv);
|
||||||
}
|
}
|
||||||
|
|
@ -363,14 +328,10 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
_preLoadImage(List<V2TimMessage> msgList) {
|
_preLoadImage(List<V2TimMessage> msgList) {
|
||||||
List<V2TimMessage> needPreViewList =
|
List<V2TimMessage> needPreViewList = msgList.sublist(0, max(0, min(5, msgList.length - 1)));
|
||||||
msgList.sublist(0, max(0, min(5, msgList.length - 1)));
|
|
||||||
for (var msgItem in needPreViewList) {
|
for (var msgItem in needPreViewList) {
|
||||||
V2TimImage? getImageFromList(V2TimImageTypesEnum imgType) {
|
V2TimImage? getImageFromList(V2TimImageTypesEnum imgType) {
|
||||||
V2TimImage? img = MessageUtils.getImageFromImgList(
|
V2TimImage? img = MessageUtils.getImageFromImgList(msgItem.imageElem?.imageList, HistoryMessageDartConstant.imgPriorMap[imgType] ?? HistoryMessageDartConstant.oriImgPrior);
|
||||||
msgItem.imageElem?.imageList,
|
|
||||||
HistoryMessageDartConstant.imgPriorMap[imgType] ??
|
|
||||||
HistoryMessageDartConstant.oriImgPrior);
|
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -380,12 +341,9 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
ImageConfiguration configuration = const ImageConfiguration();
|
ImageConfiguration configuration = const ImageConfiguration();
|
||||||
final image = FileImage(File((originalImg.localUrl!)));
|
final image = FileImage(File((originalImg.localUrl!)));
|
||||||
|
|
||||||
image.resolve(configuration).addListener(
|
image.resolve(configuration).addListener(ImageStreamListener((ImageInfo image, bool synchronousCall) {
|
||||||
ImageStreamListener((ImageInfo image, bool synchronousCall) {
|
|
||||||
final tempImg = image.image;
|
final tempImg = image.image;
|
||||||
_preloadImageMap[msgItem.seq! +
|
_preloadImageMap[msgItem.seq! + msgItem.timestamp.toString() + (msgItem.msgID ?? "")] = tempImg;
|
||||||
msgItem.timestamp.toString() +
|
|
||||||
(msgItem.msgID ?? "")] = tempImg;
|
|
||||||
outputLogger.i("cacheImage ${msgItem.msgID}");
|
outputLogger.i("cacheImage ${msgItem.msgID}");
|
||||||
}));
|
}));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
@ -429,8 +387,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
|
|
||||||
_editStatusCheck(V2TimMessage msg) {
|
_editStatusCheck(V2TimMessage msg) {
|
||||||
bool isStatusMessage = false;
|
bool isStatusMessage = false;
|
||||||
if (msg.customElem != null &&
|
if (msg.customElem != null && TencentUtils.checkString(msg.groupID) == null) {
|
||||||
TencentUtils.checkString(msg.groupID) == null) {
|
|
||||||
V2TimCustomElem customElem = msg.customElem!;
|
V2TimCustomElem customElem = msg.customElem!;
|
||||||
String sender = msg.sender ?? "";
|
String sender = msg.sender ?? "";
|
||||||
if (customElem.data!.isNotEmpty) {
|
if (customElem.data!.isNotEmpty) {
|
||||||
|
|
@ -450,8 +407,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
if (userAction != null) {
|
if (userAction != null) {
|
||||||
if (userAction == 14) {
|
if (userAction == 14) {
|
||||||
if (actionParam != null) {
|
if (actionParam != null) {
|
||||||
setC2cMessageEditStatus(sender,
|
setC2cMessageEditStatus(sender, actionParam == "EIMAMSG_InputStatus_Ing" ? 1 : 0);
|
||||||
actionParam == "EIMAMSG_InputStatus_Ing" ? 1 : 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -486,8 +442,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
t.cancel();
|
t.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_c2cMessageActiveTimer[msg.sender ?? ""] =
|
_c2cMessageActiveTimer[msg.sender ?? ""] = Timer.periodic(const Duration(seconds: 30), (timer) {
|
||||||
Timer.periodic(const Duration(seconds: 30), (timer) {
|
|
||||||
_c2cMessageFromUserActiveMap[msg.sender ?? ""] = false;
|
_c2cMessageFromUserActiveMap[msg.sender ?? ""] = false;
|
||||||
Timer? t = _c2cMessageActiveTimer[msg.sender ?? ""];
|
Timer? t = _c2cMessageActiveTimer[msg.sender ?? ""];
|
||||||
if (t != null && t.isActive) {
|
if (t != null && t.isActive) {
|
||||||
|
|
@ -511,15 +466,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
V2TimMsgCreateInfoResult? res = await _messageService.createCustomMessage(
|
V2TimMsgCreateInfoResult? res = await _messageService.createCustomMessage(
|
||||||
data: json.encode({
|
data: json.encode({"businessID": "user_typing_status", "typingStatus": isEditing == true ? 1 : 0, "userAction": 14, "version": 0, "actionParam": isEditing == true ? "EIMAMSG_InputStatus_Ing" : "EIMAMSG_InputStatus_End"}));
|
||||||
"businessID": "user_typing_status",
|
|
||||||
"typingStatus": isEditing == true ? 1 : 0,
|
|
||||||
"userAction": 14,
|
|
||||||
"version": 0,
|
|
||||||
"actionParam": isEditing == true
|
|
||||||
? "EIMAMSG_InputStatus_Ing"
|
|
||||||
: "EIMAMSG_InputStatus_End"
|
|
||||||
}));
|
|
||||||
if (res != null) {
|
if (res != null) {
|
||||||
_sendMessage(
|
_sendMessage(
|
||||||
id: res.id!,
|
id: res.id!,
|
||||||
|
|
@ -555,9 +502,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
_onReceiveNewMsg(V2TimMessage msgComing) async {
|
_onReceiveNewMsg(V2TimMessage msgComing) async {
|
||||||
final V2TimMessage? newMsg = _lifeCycle?.newMessageWillMount != null
|
final V2TimMessage? newMsg = _lifeCycle?.newMessageWillMount != null ? await _lifeCycle?.newMessageWillMount(msgComing) : msgComing;
|
||||||
? await _lifeCycle?.newMessageWillMount(msgComing)
|
|
||||||
: msgComing;
|
|
||||||
if (newMsg == null) {
|
if (newMsg == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -571,16 +516,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
|
|
||||||
_checkFromUserisActive(msgComing);
|
_checkFromUserisActive(msgComing);
|
||||||
final convID = TencentUtils.checkString(newMsg.userID) ?? newMsg.groupID;
|
final convID = TencentUtils.checkString(newMsg.userID) ?? newMsg.groupID;
|
||||||
final convType = TencentUtils.checkString(newMsg.groupID) != null
|
final convType = TencentUtils.checkString(newMsg.groupID) != null ? ConvType.group : ConvType.c2c;
|
||||||
? ConvType.group
|
|
||||||
: ConvType.c2c;
|
|
||||||
if (convID != null && convID == currentSelectedConv) {
|
if (convID != null && convID == currentSelectedConv) {
|
||||||
final position = getMessageListPosition(convID);
|
final position = getMessageListPosition(convID);
|
||||||
if (position == HistoryMessagePosition.notShowLatest) {
|
if (position == HistoryMessagePosition.notShowLatest) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (position == HistoryMessagePosition.bottom &&
|
if (position == HistoryMessagePosition.bottom && unreadCountForConversation == 0) {
|
||||||
unreadCountForConversation == 0) {
|
|
||||||
_unreadCountForConversation = 0;
|
_unreadCountForConversation = 0;
|
||||||
if (chatConfig.isAutoReportRead) {
|
if (chatConfig.isAutoReportRead) {
|
||||||
Future.delayed(const Duration(seconds: 1), () {
|
Future.delayed(const Duration(seconds: 1), () {
|
||||||
|
|
@ -596,11 +538,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
final messageID = newMsg.msgID;
|
final messageID = newMsg.msgID;
|
||||||
final needReadReceipt = newMsg.needReadReceipt ?? false;
|
final needReadReceipt = newMsg.needReadReceipt ?? false;
|
||||||
if (needReadReceipt &&
|
if (needReadReceipt && messageID != null && msgComing.groupID != null && chatConfig.isReportGroupReadingStatus && chatConfig.isAutoReportRead) {
|
||||||
messageID != null &&
|
|
||||||
msgComing.groupID != null &&
|
|
||||||
chatConfig.isReportGroupReadingStatus &&
|
|
||||||
chatConfig.isAutoReportRead) {
|
|
||||||
// only group message send message read receipt
|
// only group message send message read receipt
|
||||||
Future.delayed(const Duration(seconds: 1), () {
|
Future.delayed(const Duration(seconds: 1), () {
|
||||||
sendMessageReadReceipts([messageID]);
|
sendMessageReadReceipts([messageID]);
|
||||||
|
|
@ -623,19 +561,16 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessageReadReceipts(List<String> messageIDList) async {
|
sendMessageReadReceipts(List<String> messageIDList) async {
|
||||||
final res = await _messageService.sendMessageReadReceipts(
|
final res = await _messageService.sendMessageReadReceipts(messageIDList: messageIDList);
|
||||||
messageIDList: messageIDList);
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
onMessageRevoked(String msgID, [String? convID]) {
|
onMessageRevoked(String msgID, [String? convID]) {
|
||||||
final activeMessageList = _messageListMap[convID ?? currentSelectedConv];
|
final activeMessageList = _messageListMap[convID ?? currentSelectedConv];
|
||||||
if (activeMessageList != null) {
|
if (activeMessageList != null) {
|
||||||
final findeIndex =
|
final findeIndex = activeMessageList.indexWhere((element) => element.msgID == msgID);
|
||||||
activeMessageList.indexWhere((element) => element.msgID == msgID);
|
|
||||||
if (findeIndex != -1) {
|
if (findeIndex != -1) {
|
||||||
final findeIndex =
|
final findeIndex = activeMessageList.indexWhere((element) => element.msgID == msgID);
|
||||||
activeMessageList.indexWhere((element) => element.msgID == msgID);
|
|
||||||
if (findeIndex != -1) {
|
if (findeIndex != -1) {
|
||||||
final targetItem = activeMessageList[findeIndex];
|
final targetItem = activeMessageList[findeIndex];
|
||||||
targetItem.status = MessageStatus.V2TIM_MSG_STATUS_LOCAL_REVOKED;
|
targetItem.status = MessageStatus.V2TIM_MSG_STATUS_LOCAL_REVOKED;
|
||||||
|
|
@ -650,15 +585,12 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
|
|
||||||
onMessageModified(V2TimMessage modifiedMessage, [String? convID]) async {
|
onMessageModified(V2TimMessage modifiedMessage, [String? convID]) async {
|
||||||
modifiedMessage.id = DateTime.now().millisecondsSinceEpoch.toString();
|
modifiedMessage.id = DateTime.now().millisecondsSinceEpoch.toString();
|
||||||
final String? exactId = TencentUtils.checkString(modifiedMessage.userID) ??
|
final String? exactId = TencentUtils.checkString(modifiedMessage.userID) ?? TencentUtils.checkString(modifiedMessage.groupID);
|
||||||
TencentUtils.checkString(modifiedMessage.groupID);
|
|
||||||
final activeMessageList = _messageListMap[convID ?? exactId];
|
final activeMessageList = _messageListMap[convID ?? exactId];
|
||||||
if (activeMessageList == null || activeMessageList.isEmpty) {
|
if (activeMessageList == null || activeMessageList.isEmpty) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final V2TimMessage newMsg =
|
final V2TimMessage newMsg = await _lifeCycle?.modifiedMessageWillMount(modifiedMessage) ?? modifiedMessage;
|
||||||
await _lifeCycle?.modifiedMessageWillMount(modifiedMessage) ??
|
|
||||||
modifiedMessage;
|
|
||||||
final msgID = newMsg.msgID;
|
final msgID = newMsg.msgID;
|
||||||
_messageListMap[convID ?? exactId ?? ""] = activeMessageList.map((item) {
|
_messageListMap[convID ?? exactId ?? ""] = activeMessageList.map((item) {
|
||||||
if (item.msgID == msgID) {
|
if (item.msgID == msgID) {
|
||||||
|
|
@ -704,13 +636,11 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
outputLogger.i("message progress: $progress");
|
outputLogger.i("message progress: $progress");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> onMessageDownloadProgressCallback(
|
Future<void> onMessageDownloadProgressCallback(V2TimMessageDownloadProgress messageProgress) async {
|
||||||
V2TimMessageDownloadProgress messageProgress) async {
|
|
||||||
final currentProgress = getMessageProgress(messageProgress.msgID);
|
final currentProgress = getMessageProgress(messageProgress.msgID);
|
||||||
|
|
||||||
if (messageProgress.isFinish && currentProgress < 100) {
|
if (messageProgress.isFinish && currentProgress < 100) {
|
||||||
V2TimMessage? message =
|
V2TimMessage? message = await _findAndRetrieveMessage(messageProgress.msgID);
|
||||||
await _findAndRetrieveMessage(messageProgress.msgID);
|
|
||||||
_handleFinishedDownload(messageProgress, message);
|
_handleFinishedDownload(messageProgress, message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -719,25 +649,19 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<V2TimMessage?> _findAndRetrieveMessage(String messageId) async {
|
Future<V2TimMessage?> _findAndRetrieveMessage(String messageId) async {
|
||||||
final messages =
|
final messages = await _messageService.findMessages(messageIDList: [messageId]);
|
||||||
await _messageService.findMessages(messageIDList: [messageId]);
|
|
||||||
return messages?.first;
|
return messages?.first;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleFinishedDownload(
|
void _handleFinishedDownload(V2TimMessageDownloadProgress messageProgress, V2TimMessage? message) {
|
||||||
V2TimMessageDownloadProgress messageProgress, V2TimMessage? message) {
|
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
bool isImageType =
|
bool isImageType = message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE;
|
||||||
message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE;
|
bool isVideoType = message.elemType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO;
|
||||||
bool isVideoType =
|
|
||||||
message.elemType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO;
|
|
||||||
final originalImageType = PlatformUtils().isIOS ? 1 : 0;
|
final originalImageType = PlatformUtils().isIOS ? 1 : 0;
|
||||||
if (!isImageType && !isVideoType) {
|
if (!isImageType && !isVideoType) {
|
||||||
_updateMessageLocationAndDownloadFile(messageProgress);
|
_updateMessageLocationAndDownloadFile(messageProgress);
|
||||||
} else if ((isImageType && messageProgress.type == originalImageType) ||
|
} else if ((isImageType && messageProgress.type == originalImageType) || isVideoType) {
|
||||||
isVideoType) {
|
Future.delayed(const Duration(seconds: 1), () => _updateMessageAndDownloadFile(message, messageProgress));
|
||||||
Future.delayed(const Duration(seconds: 1),
|
|
||||||
() => _updateMessageAndDownloadFile(message, messageProgress));
|
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -746,32 +670,22 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateMessageAndDownloadFile(
|
void _updateMessageAndDownloadFile(V2TimMessage message, V2TimMessageDownloadProgress messageProgress) {
|
||||||
V2TimMessage message, V2TimMessageDownloadProgress messageProgress) {
|
updateAsyncMessage(message, TencentUtils.checkString(message.userID) ?? TencentUtils.checkString(message.groupID) ?? "");
|
||||||
updateAsyncMessage(
|
|
||||||
message,
|
|
||||||
TencentUtils.checkString(message.userID) ??
|
|
||||||
TencentUtils.checkString(message.groupID) ??
|
|
||||||
"");
|
|
||||||
|
|
||||||
_updateMessageLocationAndDownloadFile(messageProgress);
|
_updateMessageLocationAndDownloadFile(messageProgress);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateMessageLocationAndDownloadFile(
|
void _updateMessageLocationAndDownloadFile(V2TimMessageDownloadProgress messageProgress) {
|
||||||
V2TimMessageDownloadProgress messageProgress) {
|
|
||||||
setFileMessageLocation(messageProgress.msgID, messageProgress.path);
|
setFileMessageLocation(messageProgress.msgID, messageProgress.path);
|
||||||
setMessageProgress(messageProgress.msgID, 100);
|
setMessageProgress(messageProgress.msgID, 100);
|
||||||
downloadFile();
|
downloadFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateProgressIfNeeded(
|
void _updateProgressIfNeeded(V2TimMessageDownloadProgress messageProgress, int currentProgress) {
|
||||||
V2TimMessageDownloadProgress messageProgress, int currentProgress) {
|
|
||||||
try {
|
try {
|
||||||
if (messageProgress.totalSize != -1 && !messageProgress.isFinish) {
|
if (messageProgress.totalSize != -1 && !messageProgress.isFinish) {
|
||||||
int progress = min(
|
int progress = min(99, (messageProgress.currentSize / messageProgress.totalSize * 100).floor());
|
||||||
99,
|
|
||||||
(messageProgress.currentSize / messageProgress.totalSize * 100)
|
|
||||||
.floor());
|
|
||||||
if (progress > 1 && progress > currentProgress) {
|
if (progress > 1 && progress > currentProgress) {
|
||||||
setMessageProgress(messageProgress.msgID, progress);
|
setMessageProgress(messageProgress.msgID, progress);
|
||||||
}
|
}
|
||||||
|
|
@ -815,13 +729,10 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
|
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
|
||||||
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
|
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
|
||||||
if (messageInfo != null) {
|
if (messageInfo != null) {
|
||||||
final messageInfoWithSender = messageInfo.sender == null
|
final messageInfoWithSender = messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id!) : messageInfo;
|
||||||
? tools.setUserInfoForMessage(messageInfo, messageInfo.id!)
|
|
||||||
: messageInfo;
|
|
||||||
currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList];
|
currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList];
|
||||||
setMessageList(convID, currentHistoryMsgList);
|
setMessageList(convID, currentHistoryMsgList);
|
||||||
if (loadingMessage[convID] != null &&
|
if (loadingMessage[convID] != null && loadingMessage[convID]!.isNotEmpty) {
|
||||||
loadingMessage[convID]!.isNotEmpty) {
|
|
||||||
loadingMessage[convID]!.add(messageInfoWithSender);
|
loadingMessage[convID]!.add(messageInfoWithSender);
|
||||||
} else {
|
} else {
|
||||||
loadingMessage[convID] = <V2TimMessage>[messageInfoWithSender];
|
loadingMessage[convID] = <V2TimMessage>[messageInfoWithSender];
|
||||||
|
|
@ -837,9 +748,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
setInputField: setInputField,
|
setInputField: setInputField,
|
||||||
id: messageInfo.id as String,
|
id: messageInfo.id as String,
|
||||||
convType: ConvType.values[convType.index],
|
convType: ConvType.values[convType.index],
|
||||||
offlinePushInfo: offlinePushInfo ??
|
offlinePushInfo: offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]),
|
||||||
tools.buildMessagePushInfo(
|
|
||||||
messageInfo, convID, ConvType.values[convType.index]),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -863,36 +772,23 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
|
final TUIChatModelTools tools = serviceLocator<TUIChatModelTools>();
|
||||||
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
|
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
|
||||||
V2TimMsgCreateInfoResult? textMessageInfo =
|
V2TimMsgCreateInfoResult? textMessageInfo = await _messageService.createTextMessage(text: text);
|
||||||
await _messageService.createTextMessage(text: text);
|
|
||||||
|
|
||||||
textMessageInfo = await _messageService.createTextAtMessage(
|
textMessageInfo = await _messageService.createTextAtMessage(
|
||||||
text: text +
|
text: text + "\n@${TencentUtils.checkString(messageBeenReplied.nickName) ?? TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID)}",
|
||||||
"\n@${TencentUtils.checkString(messageBeenReplied.nickName) ?? TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID)}",
|
atUserList: [TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID) ?? ""]);
|
||||||
atUserList: [
|
|
||||||
TencentUtils.checkString(messageBeenReplied.sender) ??
|
|
||||||
TencentUtils.checkString(messageBeenReplied.userID) ??
|
|
||||||
""
|
|
||||||
]);
|
|
||||||
|
|
||||||
final V2TimMessage? messageInfo = textMessageInfo!.messageInfo;
|
final V2TimMessage? messageInfo = textMessageInfo!.messageInfo;
|
||||||
|
|
||||||
if (messageInfo != null) {
|
if (messageInfo != null) {
|
||||||
final messageInfoWithSender = messageInfo.sender == null
|
final messageInfoWithSender = messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id ?? textMessageInfo.id ?? "") : messageInfo;
|
||||||
? tools.setUserInfoForMessage(
|
|
||||||
messageInfo, messageInfo.id ?? textMessageInfo.id ?? "")
|
|
||||||
: messageInfo;
|
|
||||||
|
|
||||||
final hasNickName = messageBeenReplied.nickName != null &&
|
final hasNickName = messageBeenReplied.nickName != null && messageBeenReplied.nickName != "";
|
||||||
messageBeenReplied.nickName != "";
|
|
||||||
final cloudCustomData = {
|
final cloudCustomData = {
|
||||||
"messageReply": {
|
"messageReply": {
|
||||||
"messageID": messageBeenReplied.msgID,
|
"messageID": messageBeenReplied.msgID,
|
||||||
"messageAbstract": tools.getMessageAbstract(
|
"messageAbstract": tools.getMessageAbstract(messageBeenReplied, abstractMessageBuilder),
|
||||||
messageBeenReplied, abstractMessageBuilder),
|
"messageSender": hasNickName ? messageBeenReplied.nickName : messageBeenReplied.sender,
|
||||||
"messageSender": hasNickName
|
|
||||||
? messageBeenReplied.nickName
|
|
||||||
: messageBeenReplied.sender,
|
|
||||||
"messageType": messageBeenReplied.elemType,
|
"messageType": messageBeenReplied.elemType,
|
||||||
"version": 1
|
"version": 1
|
||||||
}
|
}
|
||||||
|
|
@ -905,9 +801,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
return _sendMessage(
|
return _sendMessage(
|
||||||
cloudCustomData: json.encode(cloudCustomData),
|
cloudCustomData: json.encode(cloudCustomData),
|
||||||
id: textMessageInfo.id as String,
|
id: textMessageInfo.id as String,
|
||||||
offlinePushInfo: offlinePushInfo ??
|
offlinePushInfo: offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]),
|
||||||
tools.buildMessagePushInfo(
|
|
||||||
messageInfo, convID, ConvType.values[convType.index]),
|
|
||||||
priority: priority,
|
priority: priority,
|
||||||
onlineUserOnly: onlineUserOnly,
|
onlineUserOnly: onlineUserOnly,
|
||||||
isExcludedFromUnreadCount: isExcludedFromUnreadCount,
|
isExcludedFromUnreadCount: isExcludedFromUnreadCount,
|
||||||
|
|
@ -921,10 +815,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setLocalCustomData(
|
Future<bool> setLocalCustomData(String msgID, String localCustomData, String conversationID) async {
|
||||||
String msgID, String localCustomData, String conversationID) async {
|
final res = await _messageService.setLocalCustomData(msgID: msgID, localCustomData: localCustomData);
|
||||||
final res = await _messageService.setLocalCustomData(
|
|
||||||
msgID: msgID, localCustomData: localCustomData);
|
|
||||||
List<V2TimMessage> messageList = _messageListMap[conversationID] ?? [];
|
List<V2TimMessage> messageList = _messageListMap[conversationID] ?? [];
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
messageList = messageList.map((item) {
|
messageList = messageList.map((item) {
|
||||||
|
|
@ -934,17 +826,14 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}).toList();
|
}).toList();
|
||||||
setMessageList(conversationID, messageList,
|
setMessageList(conversationID, messageList, needResetNewMessageCount: false);
|
||||||
needResetNewMessageCount: false);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> setLocalCustomInt(
|
Future<bool> setLocalCustomInt(String msgID, int localCustomInt, String conversationID) async {
|
||||||
String msgID, int localCustomInt, String conversationID) async {
|
final res = await _messageService.setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt);
|
||||||
final res = await _messageService.setLocalCustomInt(
|
|
||||||
msgID: msgID, localCustomInt: localCustomInt);
|
|
||||||
List<V2TimMessage> messageList = _messageListMap[conversationID] ?? [];
|
List<V2TimMessage> messageList = _messageListMap[conversationID] ?? [];
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
messageList = messageList.map((item) {
|
messageList = messageList.map((item) {
|
||||||
|
|
@ -954,8 +843,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}).toList();
|
}).toList();
|
||||||
setMessageList(conversationID, messageList,
|
setMessageList(conversationID, messageList, needResetNewMessageCount: false);
|
||||||
needResetNewMessageCount: false);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -978,20 +866,15 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}) async {
|
}) async {
|
||||||
String receiver = convType == ConvType.c2c ? convID : '';
|
String receiver = convType == ConvType.c2c ? convID : '';
|
||||||
String groupID = convType == ConvType.group ? convID : '';
|
String groupID = convType == ConvType.group ? convID : '';
|
||||||
final oldGroupType =
|
final oldGroupType = groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
|
||||||
groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
|
|
||||||
final sendMsgRes = await _messageService.sendMessage(
|
final sendMsgRes = await _messageService.sendMessage(
|
||||||
id: id,
|
id: id,
|
||||||
receiver: receiver,
|
receiver: receiver,
|
||||||
needReadReceipt: needReadReceipt ??
|
needReadReceipt: needReadReceipt ??
|
||||||
chatConfig.isShowGroupReadingStatus &&
|
chatConfig.isShowGroupReadingStatus &&
|
||||||
convType == ConvType.group &&
|
convType == ConvType.group &&
|
||||||
((chatConfig.groupReadReceiptPermissionList != null &&
|
((chatConfig.groupReadReceiptPermissionList != null && chatConfig.groupReadReceiptPermissionList!.contains(groupType)) ||
|
||||||
chatConfig.groupReadReceiptPermissionList!
|
(chatConfig.groupReadReceiptPermisionList != null && chatConfig.groupReadReceiptPermisionList!.contains(oldGroupType))),
|
||||||
.contains(groupType)) ||
|
|
||||||
(chatConfig.groupReadReceiptPermisionList != null &&
|
|
||||||
chatConfig.groupReadReceiptPermisionList!
|
|
||||||
.contains(oldGroupType))),
|
|
||||||
groupID: groupID,
|
groupID: groupID,
|
||||||
priority: priority,
|
priority: priority,
|
||||||
localCustomData: localCustomData,
|
localCustomData: localCustomData,
|
||||||
|
|
@ -1015,8 +898,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
return sendMsgRes;
|
return sendMsgRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMessageList(String conversationID, List<V2TimMessage> messageList,
|
void setMessageList(String conversationID, List<V2TimMessage> messageList, {bool needResetNewMessageCount = true}) {
|
||||||
{bool needResetNewMessageCount = true}) {
|
|
||||||
_messageListMap[conversationID] = messageList;
|
_messageListMap[conversationID] = messageList;
|
||||||
if (needResetNewMessageCount) {
|
if (needResetNewMessageCount) {
|
||||||
_receivedNewMessageCount = 0;
|
_receivedNewMessageCount = 0;
|
||||||
|
|
@ -1024,27 +906,15 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateMessage(
|
updateMessage(V2TimValueCallback<V2TimMessage> sendMsgRes, String convID, String id, ConvType convType, GroupReceiptAllowType? groupType, ValueChanged<String>? setInputField) {
|
||||||
V2TimValueCallback<V2TimMessage> sendMsgRes,
|
|
||||||
String convID,
|
|
||||||
String id,
|
|
||||||
ConvType convType,
|
|
||||||
GroupReceiptAllowType? groupType,
|
|
||||||
ValueChanged<String>? setInputField) {
|
|
||||||
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
|
List<V2TimMessage> currentHistoryMsgList = _messageListMap[convID] ?? [];
|
||||||
final V2TimMessage sendMsgResData = sendMsgRes.data as V2TimMessage;
|
final V2TimMessage sendMsgResData = sendMsgRes.data as V2TimMessage;
|
||||||
if ([80001, 80002].contains(sendMsgRes.code) &&
|
if ([80001, 80002].contains(sendMsgRes.code) && sendMsgRes.data?.textElem?.text != null && setInputField != null) {
|
||||||
sendMsgRes.data?.textElem?.text != null &&
|
|
||||||
setInputField != null) {
|
|
||||||
setInputField(sendMsgRes.data!.textElem!.text ?? "");
|
setInputField(sendMsgRes.data!.textElem!.text ?? "");
|
||||||
}
|
}
|
||||||
|
|
||||||
final findIdIndex =
|
final findIdIndex = currentHistoryMsgList.indexWhere((element) => element.id == id);
|
||||||
currentHistoryMsgList.indexWhere((element) => element.id == id);
|
final targetIndex = findIdIndex == -1 ? currentHistoryMsgList.indexWhere((element) => element.msgID == sendMsgResData.msgID) : findIdIndex;
|
||||||
final targetIndex = findIdIndex == -1
|
|
||||||
? currentHistoryMsgList
|
|
||||||
.indexWhere((element) => element.msgID == sendMsgResData.msgID)
|
|
||||||
: findIdIndex;
|
|
||||||
if (targetIndex != -1) {
|
if (targetIndex != -1) {
|
||||||
currentHistoryMsgList[targetIndex] = sendMsgResData;
|
currentHistoryMsgList[targetIndex] = sendMsgResData;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1053,19 +923,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
if (loadingMessage[convID] != null && loadingMessage[convID]!.isNotEmpty) {
|
if (loadingMessage[convID] != null && loadingMessage[convID]!.isNotEmpty) {
|
||||||
loadingMessage[convID]!.removeWhere((element) => element.id == id);
|
loadingMessage[convID]!.removeWhere((element) => element.id == id);
|
||||||
}
|
}
|
||||||
final oldGroupType =
|
final oldGroupType = groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
|
||||||
groupType != null ? GroupReceptAllowType.values[groupType.index] : null;
|
|
||||||
if (chatConfig.isShowGroupReadingStatus &&
|
if (chatConfig.isShowGroupReadingStatus &&
|
||||||
convType == ConvType.group &&
|
convType == ConvType.group &&
|
||||||
sendMsgRes.data?.msgID != null &&
|
sendMsgRes.data?.msgID != null &&
|
||||||
((chatConfig.groupReadReceiptPermissionList != null &&
|
((chatConfig.groupReadReceiptPermissionList != null && chatConfig.groupReadReceiptPermissionList!.contains(groupType)) ||
|
||||||
chatConfig.groupReadReceiptPermissionList!
|
(chatConfig.groupReadReceiptPermisionList != null && chatConfig.groupReadReceiptPermisionList!.contains(oldGroupType)))) {
|
||||||
.contains(groupType)) ||
|
_messageReadReceiptMap[sendMsgRes.data!.msgID!] = V2TimMessageReceipt(timestamp: 0, userID: "", readCount: 0);
|
||||||
(chatConfig.groupReadReceiptPermisionList != null &&
|
|
||||||
chatConfig.groupReadReceiptPermisionList!
|
|
||||||
.contains(oldGroupType)))) {
|
|
||||||
_messageReadReceiptMap[sendMsgRes.data!.msgID!] =
|
|
||||||
V2TimMessageReceipt(timestamp: 0, userID: "", readCount: 0);
|
|
||||||
}
|
}
|
||||||
_messageListMap[convID] = currentHistoryMsgList;
|
_messageListMap[convID] = currentHistoryMsgList;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
@ -1094,20 +958,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
List<V2TimMessage>? getMessageList(String conversationID) {
|
List<V2TimMessage>? getMessageList(String conversationID) {
|
||||||
final list = (messageListMap[conversationID]?.reversed.toList() ?? [])
|
final list = (messageListMap[conversationID]?.reversed.toList() ?? []).where((element) => _lifeCycle?.messageShouldMount(element) ?? true).toList();
|
||||||
.where((element) => _lifeCycle?.messageShouldMount(element) ?? true);
|
final finalList = _lifeCycle?.messageListShouldMount(list) ?? list;
|
||||||
final List<V2TimMessage> listWithTimestamp = [];
|
final List<V2TimMessage> listWithTimestamp = [];
|
||||||
final interval = chatConfig.timeDividerConfig?.timeInterval ?? 300;
|
final interval = chatConfig.timeDividerConfig?.timeInterval ?? 300;
|
||||||
for (var item in list) {
|
for (var item in finalList) {
|
||||||
{
|
{
|
||||||
if (listWithTimestamp.isEmpty ||
|
if (listWithTimestamp.isEmpty || (listWithTimestamp[listWithTimestamp.length - 1].timestamp != null && item.timestamp != null && (item.timestamp! - listWithTimestamp[listWithTimestamp.length - 1].timestamp! > interval))) {
|
||||||
(listWithTimestamp[listWithTimestamp.length - 1].timestamp !=
|
|
||||||
null &&
|
|
||||||
item.timestamp != null &&
|
|
||||||
(item.timestamp! -
|
|
||||||
listWithTimestamp[listWithTimestamp.length - 1]
|
|
||||||
.timestamp! >
|
|
||||||
interval))) {
|
|
||||||
listWithTimestamp.add(V2TimMessage(
|
listWithTimestamp.add(V2TimMessage(
|
||||||
userID: '',
|
userID: '',
|
||||||
isSelf: false,
|
isSelf: false,
|
||||||
|
|
@ -1123,19 +980,16 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoryMessagePosition getMessageListPosition(String? conversationID) {
|
HistoryMessagePosition getMessageListPosition(String? conversationID) {
|
||||||
final HistoryMessagePosition? position =
|
final HistoryMessagePosition? position = _historyMessagePositionMap[conversationID];
|
||||||
_historyMessagePositionMap[conversationID];
|
|
||||||
if (position == null) {
|
if (position == null) {
|
||||||
_historyMessagePositionMap[conversationID ?? currentSelectedConv] =
|
_historyMessagePositionMap[conversationID ?? currentSelectedConv] = HistoryMessagePosition.bottom;
|
||||||
HistoryMessagePosition.bottom;
|
|
||||||
return HistoryMessagePosition.bottom;
|
return HistoryMessagePosition.bottom;
|
||||||
} else {
|
} else {
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMessageListPosition(
|
void setMessageListPosition(String conversationID, HistoryMessagePosition position) {
|
||||||
String conversationID, HistoryMessagePosition position) {
|
|
||||||
_historyMessagePositionMap[conversationID] = position;
|
_historyMessagePositionMap[conversationID] = position;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:tencent_im_base/tencent_im_base.dart';
|
|
||||||
import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart';
|
import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart';
|
import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
|
||||||
|
import 'package:tencent_im_base/tencent_im_base.dart';
|
||||||
|
|
||||||
class MessageServiceImpl extends MessageService {
|
class MessageServiceImpl extends MessageService {
|
||||||
final CoreServicesImpl _coreService = serviceLocator<CoreServicesImpl>();
|
final CoreServicesImpl _coreService = serviceLocator<CoreServicesImpl>();
|
||||||
|
|
@ -16,8 +16,7 @@ class MessageServiceImpl extends MessageService {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MessageListResponse> getHistoryMessageListV2({
|
Future<MessageListResponse> getHistoryMessageListV2({
|
||||||
HistoryMsgGetTypeEnum getType =
|
HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
||||||
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
|
||||||
String? userID,
|
String? userID,
|
||||||
String? groupID,
|
String? groupID,
|
||||||
int lastMsgSeq = -1,
|
int lastMsgSeq = -1,
|
||||||
|
|
@ -26,16 +25,8 @@ class MessageServiceImpl extends MessageService {
|
||||||
List<int>? messageTypeList,
|
List<int>? messageTypeList,
|
||||||
}) async {
|
}) async {
|
||||||
bool haveMoreData = true;
|
bool haveMoreData = true;
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res =
|
||||||
.getMessageManager()
|
await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: count, getType: getType, userID: userID, groupID: groupID, lastMsgID: lastMsgID, lastMsgSeq: lastMsgSeq, messageTypeList: messageTypeList);
|
||||||
.getHistoryMessageList(
|
|
||||||
count: count,
|
|
||||||
getType: getType,
|
|
||||||
userID: userID,
|
|
||||||
groupID: groupID,
|
|
||||||
lastMsgID: lastMsgID,
|
|
||||||
lastMsgSeq: lastMsgSeq,
|
|
||||||
messageTypeList: messageTypeList);
|
|
||||||
final List<V2TimMessage> responsedMessageList = res.data ?? [];
|
final List<V2TimMessage> responsedMessageList = res.data ?? [];
|
||||||
final conversationID = userID ?? groupID;
|
final conversationID = userID ?? groupID;
|
||||||
final cachedMessageList = messgaeListMap[conversationID];
|
final cachedMessageList = messgaeListMap[conversationID];
|
||||||
|
|
@ -45,41 +36,29 @@ class MessageServiceImpl extends MessageService {
|
||||||
combinedMessageList = [...cachedMessageList, ...responsedMessageList];
|
combinedMessageList = [...cachedMessageList, ...responsedMessageList];
|
||||||
// 首次加载
|
// 首次加载
|
||||||
} else {
|
} else {
|
||||||
final bool existSendingMessage = sendingMessage[conversationID] != null &&
|
final bool existSendingMessage = sendingMessage[conversationID] != null && sendingMessage[conversationID]!.isNotEmpty;
|
||||||
sendingMessage[conversationID]!.isNotEmpty;
|
|
||||||
// 存在未发送完成的消息
|
// 存在未发送完成的消息
|
||||||
if (existSendingMessage) {
|
if (existSendingMessage) {
|
||||||
combinedMessageList = [
|
combinedMessageList = [...sendingMessage[conversationID]!, ...responsedMessageList];
|
||||||
...sendingMessage[conversationID]!,
|
|
||||||
...responsedMessageList
|
|
||||||
];
|
|
||||||
} else {
|
} else {
|
||||||
sendingMessage.remove(conversationID);
|
sendingMessage.remove(conversationID);
|
||||||
combinedMessageList = responsedMessageList;
|
combinedMessageList = responsedMessageList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (res.code != 0) {
|
if (res.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
}
|
}
|
||||||
if (responsedMessageList.isEmpty ||
|
if (responsedMessageList.isEmpty || (!PlatformUtils().isWeb && responsedMessageList.length < count) || (PlatformUtils().isWeb && responsedMessageList.length < min(count, 20))) {
|
||||||
(!PlatformUtils().isWeb && responsedMessageList.length < count) ||
|
|
||||||
(PlatformUtils().isWeb &&
|
|
||||||
responsedMessageList.length < min(count, 20))) {
|
|
||||||
haveMoreData = false;
|
haveMoreData = false;
|
||||||
} else {
|
} else {
|
||||||
haveMoreData = true;
|
haveMoreData = true;
|
||||||
}
|
}
|
||||||
return MessageListResponse(
|
return MessageListResponse(haveMoreData: haveMoreData, data: combinedMessageList);
|
||||||
haveMoreData: haveMoreData, data: combinedMessageList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<V2TimMessage>> getHistoryMessageList({
|
Future<List<V2TimMessage>> getHistoryMessageList({
|
||||||
HistoryMsgGetTypeEnum getType =
|
HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
||||||
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
|
||||||
String? userID,
|
String? userID,
|
||||||
String? groupID,
|
String? groupID,
|
||||||
int lastMsgSeq = -1,
|
int lastMsgSeq = -1,
|
||||||
|
|
@ -87,30 +66,18 @@ class MessageServiceImpl extends MessageService {
|
||||||
String? lastMsgID,
|
String? lastMsgID,
|
||||||
List<int>? messageTypeList,
|
List<int>? messageTypeList,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res =
|
||||||
.getMessageManager()
|
await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList(count: count, getType: getType, userID: userID, groupID: groupID, lastMsgID: lastMsgID, lastMsgSeq: lastMsgSeq, messageTypeList: messageTypeList);
|
||||||
.getHistoryMessageList(
|
|
||||||
count: count,
|
|
||||||
getType: getType,
|
|
||||||
userID: userID,
|
|
||||||
groupID: groupID,
|
|
||||||
lastMsgID: lastMsgID,
|
|
||||||
lastMsgSeq: lastMsgSeq,
|
|
||||||
messageTypeList: messageTypeList);
|
|
||||||
final reponseMessageList = res.data ?? [];
|
final reponseMessageList = res.data ?? [];
|
||||||
if (res.code != 0) {
|
if (res.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
}
|
}
|
||||||
return reponseMessageList;
|
return reponseMessageList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMessageListResult?> getHistoryMessageListWithComplete({
|
Future<V2TimMessageListResult?> getHistoryMessageListWithComplete({
|
||||||
HistoryMsgGetTypeEnum getType =
|
HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
||||||
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG,
|
|
||||||
String? userID,
|
String? userID,
|
||||||
String? groupID,
|
String? groupID,
|
||||||
int lastMsgSeq = -1,
|
int lastMsgSeq = -1,
|
||||||
|
|
@ -118,22 +85,11 @@ class MessageServiceImpl extends MessageService {
|
||||||
String? lastMsgID,
|
String? lastMsgID,
|
||||||
List<int>? messageTypeList,
|
List<int>? messageTypeList,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res =
|
||||||
.getMessageManager()
|
await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageListV2(count: count, getType: getType, userID: userID, groupID: groupID, lastMsgID: lastMsgID, lastMsgSeq: lastMsgSeq, messageTypeList: messageTypeList);
|
||||||
.getHistoryMessageListV2(
|
|
||||||
count: count,
|
|
||||||
getType: getType,
|
|
||||||
userID: userID,
|
|
||||||
groupID: groupID,
|
|
||||||
lastMsgID: lastMsgID,
|
|
||||||
lastMsgSeq: lastMsgSeq,
|
|
||||||
messageTypeList: messageTypeList);
|
|
||||||
final responseMessageList = res.data;
|
final responseMessageList = res.data;
|
||||||
if (res.code != 0) {
|
if (res.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
}
|
}
|
||||||
return responseMessageList;
|
return responseMessageList;
|
||||||
}
|
}
|
||||||
|
|
@ -142,45 +98,31 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future addSimpleMsgListener({
|
Future addSimpleMsgListener({
|
||||||
required V2TimSimpleMsgListener listener,
|
required V2TimSimpleMsgListener listener,
|
||||||
}) async {
|
}) async {
|
||||||
return TencentImSDKPlugin.v2TIMManager
|
return TencentImSDKPlugin.v2TIMManager.addSimpleMsgListener(listener: listener);
|
||||||
.addSimpleMsgListener(listener: listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> removeSimpleMsgListener({V2TimSimpleMsgListener? listener}) {
|
Future<void> removeSimpleMsgListener({V2TimSimpleMsgListener? listener}) {
|
||||||
return TencentImSDKPlugin.v2TIMManager
|
return TencentImSDKPlugin.v2TIMManager.removeSimpleMsgListener(listener: listener);
|
||||||
.removeSimpleMsgListener(listener: listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> addAdvancedMsgListener({
|
Future<void> addAdvancedMsgListener({
|
||||||
required V2TimAdvancedMsgListener listener,
|
required V2TimAdvancedMsgListener listener,
|
||||||
}) {
|
}) {
|
||||||
return TencentImSDKPlugin.v2TIMManager
|
return TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener);
|
||||||
.getMessageManager()
|
|
||||||
.addAdvancedMsgListener(listener: listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimValueCallback<V2TimGroupMessageReadMemberList>>
|
Future<V2TimValueCallback<V2TimGroupMessageReadMemberList>> getGroupMessageReadMemberList({
|
||||||
getGroupMessageReadMemberList({
|
|
||||||
required String messageID,
|
required String messageID,
|
||||||
required GetGroupMessageReadMemberListFilter filter,
|
required GetGroupMessageReadMemberListFilter filter,
|
||||||
int nextSeq = 0,
|
int nextSeq = 0,
|
||||||
int count = 100,
|
int count = 100,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getGroupMessageReadMemberList(messageID: messageID, filter: filter, nextSeq: nextSeq, count: count);
|
||||||
.getMessageManager()
|
|
||||||
.getGroupMessageReadMemberList(
|
|
||||||
messageID: messageID,
|
|
||||||
filter: filter,
|
|
||||||
nextSeq: nextSeq,
|
|
||||||
count: count);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -189,14 +131,9 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimValueCallback<List<V2TimMessageReceipt>>> getMessageReadReceipts({
|
Future<V2TimValueCallback<List<V2TimMessageReceipt>>> getMessageReadReceipts({
|
||||||
required List<String> messageIDList,
|
required List<String> messageIDList,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageReadReceipts(messageIDList: messageIDList);
|
||||||
.getMessageManager()
|
|
||||||
.getMessageReadReceipts(messageIDList: messageIDList);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -205,66 +142,43 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimCallback> sendMessageReadReceipts({
|
Future<V2TimCallback> sendMessageReadReceipts({
|
||||||
required List<String> messageIDList,
|
required List<String> messageIDList,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessageReadReceipts(messageIDList: messageIDList);
|
||||||
.getMessageManager()
|
|
||||||
.sendMessageReadReceipts(messageIDList: messageIDList);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createTextMessage(
|
Future<V2TimMsgCreateInfoResult?> createTextMessage({required String text}) async {
|
||||||
{required String text}) async {
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: text);
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createTextMessage(text: text);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
final messageResult = res.data;
|
final messageResult = res.data;
|
||||||
return messageResult;
|
return messageResult;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createCustomMessage(
|
Future<V2TimMsgCreateInfoResult?> createCustomMessage({required String data}) async {
|
||||||
{required String data}) async {
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(data: data);
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createCustomMessage(data: data);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
final messageResult = res.data;
|
final messageResult = res.data;
|
||||||
return messageResult;
|
return messageResult;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createFaceMessage(
|
Future<V2TimMsgCreateInfoResult?> createFaceMessage({required int index, required String data}) async {
|
||||||
{required int index, required String data}) async {
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFaceMessage(index: index, data: data);
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createFaceMessage(index: index, data: data);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
final messageResult = res.data;
|
final messageResult = res.data;
|
||||||
return messageResult;
|
return messageResult;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -272,51 +186,31 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimValueCallback<V2TimMessage>> reSendMessage(
|
Future<V2TimValueCallback<V2TimMessage>> reSendMessage(
|
||||||
{required String msgID, // 自己创建的ID
|
{required String msgID, // 自己创建的ID
|
||||||
bool? onlineUserOnly}) async {
|
bool? onlineUserOnly}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().reSendMessage(msgID: msgID, onlineUserOnly: onlineUserOnly ?? false);
|
||||||
.getMessageManager()
|
|
||||||
.reSendMessage(msgID: msgID, onlineUserOnly: onlineUserOnly ?? false);
|
|
||||||
if (res.code != 0) {
|
if (res.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createTextAtMessage(
|
Future<V2TimMsgCreateInfoResult?> createTextAtMessage({required String text, required List<String> atUserList}) async {
|
||||||
{required String text, required List<String> atUserList}) async {
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextAtMessage(text: text, atUserList: atUserList);
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createTextAtMessage(text: text, atUserList: atUserList);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
final messageResult = res.data;
|
final messageResult = res.data;
|
||||||
return messageResult;
|
return messageResult;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createImageMessage(
|
Future<V2TimMsgCreateInfoResult?> createImageMessage({String? imageName, String? imagePath, dynamic inputElement}) async {
|
||||||
{String? imageName, String? imagePath, dynamic inputElement}) async {
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createImageMessage(imageName: imageName, imagePath: imagePath ?? "", inputElement: inputElement);
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createImageMessage(
|
|
||||||
imageName: imageName,
|
|
||||||
imagePath: imagePath ?? "",
|
|
||||||
inputElement: inputElement);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -325,16 +219,11 @@ class MessageServiceImpl extends MessageService {
|
||||||
required String soundPath,
|
required String soundPath,
|
||||||
required int duration,
|
required int duration,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createSoundMessage(soundPath: soundPath, duration: duration);
|
||||||
.getMessageManager()
|
|
||||||
.createSoundMessage(soundPath: soundPath, duration: duration);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -351,23 +240,19 @@ class MessageServiceImpl extends MessageService {
|
||||||
String? cloudCustomData,
|
String? cloudCustomData,
|
||||||
String? localCustomData,
|
String? localCustomData,
|
||||||
}) async {
|
}) async {
|
||||||
final result =
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
|
||||||
await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
|
id: id,
|
||||||
id: id,
|
receiver: receiver,
|
||||||
receiver: receiver,
|
groupID: groupID,
|
||||||
groupID: groupID,
|
priority: priority,
|
||||||
priority: priority,
|
onlineUserOnly: onlineUserOnly,
|
||||||
onlineUserOnly: onlineUserOnly,
|
offlinePushInfo: offlinePushInfo,
|
||||||
offlinePushInfo: offlinePushInfo,
|
needReadReceipt: needReadReceipt,
|
||||||
needReadReceipt: needReadReceipt,
|
localCustomData: localCustomData,
|
||||||
localCustomData: localCustomData,
|
cloudCustomData: cloudCustomData,
|
||||||
cloudCustomData: cloudCustomData,
|
);
|
||||||
);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -379,36 +264,22 @@ class MessageServiceImpl extends MessageService {
|
||||||
}) async {
|
}) async {
|
||||||
V2TimCallback result;
|
V2TimCallback result;
|
||||||
if (kIsWeb) {
|
if (kIsWeb) {
|
||||||
result = await TencentImSDKPlugin.v2TIMManager
|
result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessages(msgIDs: [], webMessageInstanceList: [webMessageInstance]);
|
||||||
.getMessageManager()
|
|
||||||
.deleteMessages(
|
|
||||||
msgIDs: [], webMessageInstanceList: [webMessageInstance]);
|
|
||||||
} else {
|
} else {
|
||||||
result = await TencentImSDKPlugin.v2TIMManager
|
result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessageFromLocalStorage(msgID: msgID);
|
||||||
.getMessageManager()
|
|
||||||
.deleteMessageFromLocalStorage(msgID: msgID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimCallback> revokeMessage(
|
Future<V2TimCallback> revokeMessage({required String msgID, Object? webMessageInstance}) async {
|
||||||
{required String msgID, Object? webMessageInstance}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().revokeMessage(msgID: msgID, webMessageInstatnce: webMessageInstance);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.revokeMessage(msgID: msgID, webMessageInstatnce: webMessageInstance);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -417,14 +288,9 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimCallback> clearC2CHistoryMessage({
|
Future<V2TimCallback> clearC2CHistoryMessage({
|
||||||
required String userID,
|
required String userID,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().clearC2CHistoryMessage(userID: userID);
|
||||||
.getMessageManager()
|
|
||||||
.clearC2CHistoryMessage(userID: userID);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -433,14 +299,9 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimCallback> clearGroupHistoryMessage({
|
Future<V2TimCallback> clearGroupHistoryMessage({
|
||||||
required String groupID,
|
required String groupID,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().clearGroupHistoryMessage(groupID: groupID);
|
||||||
.getMessageManager()
|
|
||||||
.clearGroupHistoryMessage(groupID: groupID);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -449,14 +310,9 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimCallback> markC2CMessageAsRead({
|
Future<V2TimCallback> markC2CMessageAsRead({
|
||||||
required String userID,
|
required String userID,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().markC2CMessageAsRead(userID: userID);
|
||||||
.getMessageManager()
|
|
||||||
.markC2CMessageAsRead(userID: userID);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -465,24 +321,16 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimCallback> markGroupMessageAsRead({
|
Future<V2TimCallback> markGroupMessageAsRead({
|
||||||
required String groupID,
|
required String groupID,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().markGroupMessageAsRead(groupID: groupID);
|
||||||
.getMessageManager()
|
|
||||||
.markGroupMessageAsRead(groupID: groupID);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> removeAdvancedMsgListener(
|
Future<void> removeAdvancedMsgListener({V2TimAdvancedMsgListener? listener}) async {
|
||||||
{V2TimAdvancedMsgListener? listener}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().removeAdvancedMsgListener(listener: listener);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.removeAdvancedMsgListener(listener: listener);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -490,16 +338,11 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<List<V2TimMessage>?> downloadMergerMessage({
|
Future<List<V2TimMessage>?> downloadMergerMessage({
|
||||||
required String msgID,
|
required String msgID,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMergerMessage(msgID: msgID);
|
||||||
.getMessageManager()
|
|
||||||
.downloadMergerMessage(msgID: msgID);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -507,16 +350,11 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<V2TimMsgCreateInfoResult?> createForwardMessage({
|
Future<V2TimMsgCreateInfoResult?> createForwardMessage({
|
||||||
required String msgID,
|
required String msgID,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createForwardMessage(msgID: msgID);
|
||||||
.getMessageManager()
|
|
||||||
.createForwardMessage(msgID: msgID);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -527,62 +365,30 @@ class MessageServiceImpl extends MessageService {
|
||||||
required List<String> abstractList,
|
required List<String> abstractList,
|
||||||
required String compatibleText,
|
required String compatibleText,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createMergerMessage(msgIDList: msgIDList, title: title, abstractList: abstractList, compatibleText: compatibleText);
|
||||||
.getMessageManager()
|
|
||||||
.createMergerMessage(
|
|
||||||
msgIDList: msgIDList,
|
|
||||||
title: title,
|
|
||||||
abstractList: abstractList,
|
|
||||||
compatibleText: compatibleText);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimCallback> deleteMessages(
|
Future<V2TimCallback> deleteMessages({required List<String> msgIDs, List<dynamic>? webMessageInstanceList}) async {
|
||||||
{required List<String> msgIDs,
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessages(msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList);
|
||||||
List<dynamic>? webMessageInstanceList}) async {
|
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.deleteMessages(
|
|
||||||
msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createVideoMessage(
|
Future<V2TimMsgCreateInfoResult?> createVideoMessage({String? videoPath, String? type, int? duration, String? snapshotPath, dynamic inputElement}) async {
|
||||||
{String? videoPath,
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createVideoMessage(videoFilePath: videoPath ?? "", type: type ?? "", duration: duration ?? 1, snapshotPath: snapshotPath ?? "", inputElement: inputElement);
|
||||||
String? type,
|
|
||||||
int? duration,
|
|
||||||
String? snapshotPath,
|
|
||||||
dynamic inputElement}) async {
|
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createVideoMessage(
|
|
||||||
videoFilePath: videoPath ?? "",
|
|
||||||
type: type ?? "",
|
|
||||||
duration: duration ?? 1,
|
|
||||||
snapshotPath: snapshotPath ?? "",
|
|
||||||
inputElement: inputElement);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -595,75 +401,38 @@ class MessageServiceImpl extends MessageService {
|
||||||
bool needReadReceipt = false,
|
bool needReadReceipt = false,
|
||||||
required V2TimMessage replyMessage, // 被回复的消息
|
required V2TimMessage replyMessage, // 被回复的消息
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendReplyMessage(id: id, receiver: receiver, offlinePushInfo: offlinePushInfo, groupID: groupID, needReadReceipt: needReadReceipt, replyMessage: replyMessage);
|
||||||
.getMessageManager()
|
|
||||||
.sendReplyMessage(
|
|
||||||
id: id,
|
|
||||||
receiver: receiver,
|
|
||||||
offlinePushInfo: offlinePushInfo,
|
|
||||||
groupID: groupID,
|
|
||||||
needReadReceipt: needReadReceipt,
|
|
||||||
replyMessage: replyMessage);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createFileMessage(
|
Future<V2TimMsgCreateInfoResult?> createFileMessage({String? filePath, required String fileName, dynamic inputElement}) async {
|
||||||
{String? filePath,
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFileMessage(filePath: filePath ?? "", fileName: fileName, inputElement: inputElement);
|
||||||
required String fileName,
|
|
||||||
dynamic inputElement}) async {
|
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createFileMessage(
|
|
||||||
filePath: filePath ?? "",
|
|
||||||
fileName: fileName,
|
|
||||||
inputElement: inputElement);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimMsgCreateInfoResult?> createLocationMessage(
|
Future<V2TimMsgCreateInfoResult?> createLocationMessage({required String desc, required double longitude, required double latitude}) async {
|
||||||
{required String desc,
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createLocationMessage(desc: desc, longitude: longitude, latitude: latitude);
|
||||||
required double longitude,
|
|
||||||
required double latitude}) async {
|
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.createLocationMessage(
|
|
||||||
desc: desc, longitude: longitude, latitude: latitude);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimValueCallback<V2TimMessageSearchResult>> searchLocalMessages(
|
Future<V2TimValueCallback<V2TimMessageSearchResult>> searchLocalMessages({required V2TimMessageSearchParam searchParam}) async {
|
||||||
{required V2TimMessageSearchParam searchParam}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().searchLocalMessages(searchParam: searchParam);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.searchLocalMessages(searchParam: searchParam);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -672,30 +441,19 @@ class MessageServiceImpl extends MessageService {
|
||||||
Future<List<V2TimMessage>?> findMessages({
|
Future<List<V2TimMessage>?> findMessages({
|
||||||
required List<String> messageIDList,
|
required List<String> messageIDList,
|
||||||
}) async {
|
}) async {
|
||||||
final res = await TencentImSDKPlugin.v2TIMManager
|
final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().findMessages(messageIDList: messageIDList);
|
||||||
.getMessageManager()
|
|
||||||
.findMessages(messageIDList: messageIDList);
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: res.desc,
|
|
||||||
errorCode: res.code));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimCallback> setLocalCustomInt(
|
Future<V2TimCallback> setLocalCustomInt({required String msgID, required int localCustomInt}) async {
|
||||||
{required String msgID, required int localCustomInt}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -705,14 +463,9 @@ class MessageServiceImpl extends MessageService {
|
||||||
required List<String> userIDList,
|
required List<String> userIDList,
|
||||||
required ReceiveMsgOptEnum opt,
|
required ReceiveMsgOptEnum opt,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setC2CReceiveMessageOpt(userIDList: userIDList, opt: opt);
|
||||||
.getMessageManager()
|
|
||||||
.setC2CReceiveMessageOpt(userIDList: userIDList, opt: opt);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -722,96 +475,55 @@ class MessageServiceImpl extends MessageService {
|
||||||
required String groupID,
|
required String groupID,
|
||||||
required ReceiveMsgOptEnum opt,
|
required ReceiveMsgOptEnum opt,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupID: groupID, opt: opt);
|
||||||
.getMessageManager()
|
|
||||||
.setGroupReceiveMessageOpt(groupID: groupID, opt: opt);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimValueCallback<V2TimMessageChangeInfo>> modifyMessage(
|
Future<V2TimValueCallback<V2TimMessageChangeInfo>> modifyMessage({required V2TimMessage message}) async {
|
||||||
{required V2TimMessage message}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().modifyMessage(message: message);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.modifyMessage(message: message);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimCallback> setLocalCustomData(
|
Future<V2TimCallback> setLocalCustomData({required String msgID, required String localCustomData}) async {
|
||||||
{required String msgID, required String localCustomData}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().setLocalCustomData(msgID: msgID, localCustomData: localCustomData);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.setLocalCustomData(msgID: msgID, localCustomData: localCustomData);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimValueCallback<V2TimMessageOnlineUrl>> getMessageOnlineUrl(
|
Future<V2TimValueCallback<V2TimMessageOnlineUrl>> getMessageOnlineUrl({required String msgID}) async {
|
||||||
{required String msgID}) async {
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: msgID);
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.getMessageOnlineUrl(msgID: msgID);
|
|
||||||
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<V2TimCallback> downloadMessage(
|
Future<V2TimCallback> downloadMessage({required String msgID, required int messageType, required int imageType, required bool isSnapshot}) async {
|
||||||
{required String msgID,
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMessage(msgID: msgID, messageType: messageType, imageType: imageType, isSnapshot: isSnapshot);
|
||||||
required int messageType,
|
|
||||||
required int imageType,
|
|
||||||
required bool isSnapshot}) async {
|
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
|
||||||
.getMessageManager()
|
|
||||||
.downloadMessage(
|
|
||||||
msgID: msgID,
|
|
||||||
messageType: messageType,
|
|
||||||
imageType: imageType,
|
|
||||||
isSnapshot: isSnapshot);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<String> translateText(String text, String target) async {
|
Future<String> translateText(String text, String target) async {
|
||||||
final result = await TencentImSDKPlugin.v2TIMManager
|
final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().translateText(texts: [text], targetLanguage: target);
|
||||||
.getMessageManager()
|
|
||||||
.translateText(texts: [text], targetLanguage: target);
|
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
_coreService.callOnCallback(TIMCallback(
|
_coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code));
|
||||||
type: TIMCallbackType.API_ERROR,
|
|
||||||
errorMsg: result.desc,
|
|
||||||
errorCode: result.code));
|
|
||||||
}
|
}
|
||||||
return result.data?[text] ?? "";
|
return result.data?[text] ?? "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
// import 'package:audioplayers/audioplayers.dart';
|
// import 'package:audioplayers/audioplayers.dart';
|
||||||
import 'package:flutter_plugin_record_plus/const/play_state.dart';
|
import 'package:flutter_plugin_record_plus/const/play_state.dart';
|
||||||
import 'package:flutter_plugin_record_plus/const/response.dart';
|
import 'package:flutter_plugin_record_plus/const/response.dart';
|
||||||
|
|
@ -14,14 +15,14 @@ class SoundPlayer {
|
||||||
final ImportProxy importProxy = ImportProxy();
|
final ImportProxy importProxy = ImportProxy();
|
||||||
static final FlutterPluginRecord _recorder = FlutterPluginRecord();
|
static final FlutterPluginRecord _recorder = FlutterPluginRecord();
|
||||||
static SoundInterruptListener? _soundInterruptListener;
|
static SoundInterruptListener? _soundInterruptListener;
|
||||||
static bool isInited = false;
|
static bool isInit = false;
|
||||||
static final AudioPlayer _audioPlayer = AudioPlayer();
|
static final AudioPlayer _audioPlayer = AudioPlayer();
|
||||||
|
|
||||||
static initSoundPlayer() {
|
static initSoundPlayer() {
|
||||||
if (!isInited) {
|
if (!isInit) {
|
||||||
_recorder.init();
|
_recorder.init();
|
||||||
// AudioPlayer.global.setGlobalAudioContext(const AudioContext());
|
// AudioPlayer.global.setGlobalAudioContext(const AudioContext());
|
||||||
isInited = true;
|
isInit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,10 +44,7 @@ class SoundPlayer {
|
||||||
_recorder.dispose();
|
_recorder.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
static StreamSubscription<PlayerState> playStateListener(
|
static StreamSubscription<PlayerState> playStateListener({required void Function(PlayerState)? listener}) => _audioPlayer.playerStateStream.listen(listener);
|
||||||
{required void Function(PlayerState)? listener}) =>
|
|
||||||
_audioPlayer.playerStateStream.listen(listener);
|
|
||||||
|
|
||||||
|
|
||||||
static setSoundInterruptListener(SoundInterruptListener listener) {
|
static setSoundInterruptListener(SoundInterruptListener listener) {
|
||||||
_soundInterruptListener = listener;
|
_soundInterruptListener = listener;
|
||||||
|
|
@ -56,13 +54,9 @@ class SoundPlayer {
|
||||||
_soundInterruptListener = null;
|
_soundInterruptListener = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static StreamSubscription<RecordResponse> responseListener(
|
static StreamSubscription<RecordResponse> responseListener(ResponseListener listener) => _recorder.response.listen(listener);
|
||||||
ResponseListener listener) =>
|
|
||||||
_recorder.response.listen(listener);
|
|
||||||
|
|
||||||
static StreamSubscription<RecordResponse> responseFromAmplitudeListener(
|
static StreamSubscription<RecordResponse> responseFromAmplitudeListener(ResponseListener listener) => _recorder.responseFromAmplitude.listen(listener);
|
||||||
ResponseListener listener) =>
|
|
||||||
_recorder.responseFromAmplitude.listen(listener);
|
|
||||||
|
|
||||||
static startRecord() {
|
static startRecord() {
|
||||||
_recorder.start();
|
_recorder.start();
|
||||||
|
|
|
||||||
|
|
@ -12,38 +12,19 @@ class TimeAgo {
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> weekdayMap() {
|
List<String> weekdayMap() {
|
||||||
return [
|
return ['', TIM_t("星期一"), TIM_t("星期二"), TIM_t("星期三"), TIM_t("星期四"), TIM_t("星期五"), TIM_t("星期六"), TIM_t("星期天")];
|
||||||
'',
|
|
||||||
TIM_t("星期一"),
|
|
||||||
TIM_t("星期二"),
|
|
||||||
TIM_t("星期三"),
|
|
||||||
TIM_t("星期四"),
|
|
||||||
TIM_t("星期五"),
|
|
||||||
TIM_t("星期六"),
|
|
||||||
TIM_t("星期天")
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String getYearMonthDate(DateTime dateTime) {
|
String getYearMonthDate(DateTime dateTime) {
|
||||||
String month = dateTime.month.toString();
|
String month = dateTime.month.toString();
|
||||||
String date = dateTime.day.toString();
|
String date = dateTime.day.toString();
|
||||||
return dateTime.year.toString() +
|
return dateTime.year.toString() + '/' + (month.length == 1 ? '0' : '') + month + '/' + (date.length == 1 ? '0' : '') + date;
|
||||||
'/' +
|
|
||||||
(month.length == 1 ? '0' : '') +
|
|
||||||
month +
|
|
||||||
'/' +
|
|
||||||
(date.length == 1 ? '0' : '') +
|
|
||||||
date;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String getMonthDate(DateTime dateTime) {
|
String getMonthDate(DateTime dateTime) {
|
||||||
String month = dateTime.month.toString();
|
String month = dateTime.month.toString();
|
||||||
String date = dateTime.day.toString();
|
String date = dateTime.day.toString();
|
||||||
return (month.length == 1 ? '0' : '') +
|
return (month.length == 1 ? '0' : '') + month + '/' + (date.length == 1 ? '0' : '') + date;
|
||||||
month +
|
|
||||||
'/' +
|
|
||||||
(date.length == 1 ? '0' : '') +
|
|
||||||
date;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String? getTimeStringForChat(int timeStamp) {
|
String? getTimeStringForChat(int timeStamp) {
|
||||||
|
|
@ -55,14 +36,7 @@ class TimeAgo {
|
||||||
}
|
}
|
||||||
|
|
||||||
final Duration duration = DateTime.now().difference(date);
|
final Duration duration = DateTime.now().difference(date);
|
||||||
final int diffDays = duration.inDays +
|
final int diffDays = duration.inDays + (duration.inMinutes > DateTime.now().difference(DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day)).inMinutes ? 1 : 0);
|
||||||
(duration.inMinutes >
|
|
||||||
DateTime.now()
|
|
||||||
.difference(DateTime(DateTime.now().year,
|
|
||||||
DateTime.now().month, DateTime.now().day))
|
|
||||||
.inMinutes
|
|
||||||
? 1
|
|
||||||
: 0);
|
|
||||||
final int diffMinutes = duration.inMinutes;
|
final int diffMinutes = duration.inMinutes;
|
||||||
|
|
||||||
var res;
|
var res;
|
||||||
|
|
@ -87,8 +61,7 @@ class TimeAgo {
|
||||||
final String option2 = diffMinutes.toString();
|
final String option2 = diffMinutes.toString();
|
||||||
res = TIM_t_para("{{option2}} 分钟前", "$option2 分钟前")(option2: option2);
|
res = TIM_t_para("{{option2}} 分钟前", "$option2 分钟前")(option2: option2);
|
||||||
} else {
|
} else {
|
||||||
res =
|
res = "${date.hour}:${date.minute < 10 ? "0" + date.minute.toString() : date.minute}";
|
||||||
"${date.hour}:${date.minute < 10 ? date.minute.toString() + "0" : date.minute}";
|
|
||||||
// res = "$prefix $timeStr";
|
// res = "$prefix $timeStr";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -104,8 +77,7 @@ class TimeAgo {
|
||||||
nowTime = DateTime(nowTime.year, nowTime.month, nowTime.day);
|
nowTime = DateTime(nowTime.year, nowTime.month, nowTime.day);
|
||||||
var ftime = DateTime.fromMillisecondsSinceEpoch(timeStamp * 1000);
|
var ftime = DateTime.fromMillisecondsSinceEpoch(timeStamp * 1000);
|
||||||
// var preFix = ftime.hour >= 12 ? TIM_t("下午") : TIM_t("上午");
|
// var preFix = ftime.hour >= 12 ? TIM_t("下午") : TIM_t("上午");
|
||||||
final timeStr =
|
final timeStr = DateFormat('HH:mm').format(ftime); // Use 'HH:mm' for 24-hour format
|
||||||
DateFormat('HH:mm').format(ftime); // Use 'HH:mm' for 24-hour format
|
|
||||||
// 一年外 年月日 + 时间 (24小时制)
|
// 一年外 年月日 + 时间 (24小时制)
|
||||||
if (nowTime.year != ftime.year) {
|
if (nowTime.year != ftime.year) {
|
||||||
return '${DateFormat('yyyy-MM-dd').format(ftime)} $timeStr';
|
return '${DateFormat('yyyy-MM-dd').format(ftime)} $timeStr';
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,13 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart';
|
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
|
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart';
|
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart';
|
||||||
|
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/logger.dart';
|
||||||
// ignore: unused_import
|
// ignore: unused_import
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/optimize_utils.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/optimize_utils.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_config.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_config.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/widgets/keepalive_wrapper.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/widgets/keepalive_wrapper.dart';
|
||||||
import 'package:tencent_im_base/tencent_im_base.dart';
|
|
||||||
|
|
||||||
import 'TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue.dart';
|
import 'TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue.dart';
|
||||||
import 'TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart';
|
import 'TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart';
|
||||||
|
|
@ -406,7 +406,12 @@ class _TIMUIKitHistoryMessageListState extends TIMUIKitState<TIMUIKitHistoryMess
|
||||||
final messageItem = readMessageList[index];
|
final messageItem = readMessageList[index];
|
||||||
if (index == readMessageList.length - 1) {
|
if (index == readMessageList.length - 1) {
|
||||||
if (haveMoreData) {
|
if (haveMoreData) {
|
||||||
throttleFunction(index, LoadDirection.previous);
|
final lastMessage = globalModel.messageListMap[TencentUtils.checkString(widget.conversation.groupID) ?? widget.conversation.userID ?? widget.conversation.conversationID]?.last;
|
||||||
|
if(lastMessage != null){
|
||||||
|
throttleFunctionWithMsgID(lastMessage.msgID ?? "", LoadDirection.previous);
|
||||||
|
}else{
|
||||||
|
throttleFunction(index, messageList);
|
||||||
|
}
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
LoadingAnimationWidget.staggeredDotsWave(
|
LoadingAnimationWidget.staggeredDotsWave(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
// import 'package:audioplayers/audioplayers.dart';
|
// import 'package:audioplayers/audioplayers.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:just_audio/just_audio.dart';
|
import 'package:just_audio/just_audio.dart';
|
||||||
|
|
@ -12,8 +12,9 @@ import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.
|
||||||
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart';
|
||||||
import 'package:tencent_im_base/tencent_im_base.dart';
|
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/utils/sound_record.dart';
|
import 'package:tencent_cloud_chat_uikit/ui/utils/sound_record.dart';
|
||||||
|
import 'package:tencent_im_base/tencent_im_base.dart';
|
||||||
|
|
||||||
import 'TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart';
|
import 'TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart';
|
||||||
|
|
||||||
class TIMUIKitSoundElem extends StatefulWidget {
|
class TIMUIKitSoundElem extends StatefulWidget {
|
||||||
|
|
@ -63,13 +64,11 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
late V2TimSoundElem stateElement = widget.message.soundElem!;
|
late V2TimSoundElem stateElement = widget.message.soundElem!;
|
||||||
|
|
||||||
_playSound() async {
|
_playSound() async {
|
||||||
if (!SoundPlayer.isInited) {
|
if (!SoundPlayer.isInit) {
|
||||||
SoundPlayer.initSoundPlayer();
|
SoundPlayer.initSoundPlayer();
|
||||||
}
|
}
|
||||||
if (widget.localCustomInt == null ||
|
if (widget.localCustomInt == null || widget.localCustomInt != HistoryMessageDartConstant.read) {
|
||||||
widget.localCustomInt != HistoryMessageDartConstant.read) {
|
globalModel.setLocalCustomInt(widget.msgID, HistoryMessageDartConstant.read, widget.chatModel.conversationID);
|
||||||
globalModel.setLocalCustomInt(widget.msgID,
|
|
||||||
HistoryMessageDartConstant.read, widget.chatModel.conversationID);
|
|
||||||
}
|
}
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
SoundPlayer.stop();
|
SoundPlayer.stop();
|
||||||
|
|
@ -82,11 +81,9 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
|
|
||||||
downloadMessageDetailAndSave() async {
|
downloadMessageDetailAndSave() async {
|
||||||
if (widget.message.msgID != null && widget.message.msgID != '') {
|
if (widget.message.msgID != null && widget.message.msgID != '') {
|
||||||
if (widget.message.soundElem!.url == null ||
|
if (widget.message.soundElem!.url == null || widget.message.soundElem!.url == '') {
|
||||||
widget.message.soundElem!.url == '') {
|
final response = await _messageService.getMessageOnlineUrl(msgID: widget.message.msgID!);
|
||||||
final response = await _messageService.getMessageOnlineUrl(
|
if (response.data != null) {
|
||||||
msgID: widget.message.msgID!);
|
|
||||||
if(response.data != null){
|
|
||||||
widget.message.soundElem = response.data!.soundElem;
|
widget.message.soundElem = response.data!.soundElem;
|
||||||
Future.delayed(const Duration(microseconds: 10), () {
|
Future.delayed(const Duration(microseconds: 10), () {
|
||||||
setState(() => stateElement = response.data!.soundElem!);
|
setState(() => stateElement = response.data!.soundElem!);
|
||||||
|
|
@ -94,13 +91,8 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!PlatformUtils().isWeb) {
|
if (!PlatformUtils().isWeb) {
|
||||||
if (widget.message.soundElem!.localUrl == null ||
|
if (widget.message.soundElem!.localUrl == null || widget.message.soundElem!.localUrl == '') {
|
||||||
widget.message.soundElem!.localUrl == '') {
|
_messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 4, imageType: 0, isSnapshot: false);
|
||||||
_messageService.downloadMessage(
|
|
||||||
msgID: widget.message.msgID!,
|
|
||||||
messageType: 4,
|
|
||||||
imageType: 0,
|
|
||||||
isSnapshot: false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -110,8 +102,7 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
void didUpdateWidget(oldWidget) {
|
void didUpdateWidget(oldWidget) {
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
setState(() {
|
setState(() {
|
||||||
isPlaying = widget.chatModel.currentPlayedMsgId != '' &&
|
isPlaying = widget.chatModel.currentPlayedMsgId != '' && widget.chatModel.currentPlayedMsgId == widget.msgID;
|
||||||
widget.chatModel.currentPlayedMsgId == widget.msgID;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -119,9 +110,8 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
subscription =
|
subscription = SoundPlayer.playStateListener(listener: (PlayerState state) {
|
||||||
SoundPlayer.playStateListener(listener: (PlayerState state) {
|
if (state.processingState == ProcessingState.completed) {
|
||||||
if(state.processingState == ProcessingState.completed){
|
|
||||||
widget.chatModel.currentPlayedMsgId = "";
|
widget.chatModel.currentPlayedMsgId = "";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -157,8 +147,7 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
}
|
}
|
||||||
|
|
||||||
_showJumpColor() {
|
_showJumpColor() {
|
||||||
if ((widget.chatModel.jumpMsgID != widget.message.msgID) &&
|
if ((widget.chatModel.jumpMsgID != widget.message.msgID) && (widget.message.msgID?.isNotEmpty ?? true)) {
|
||||||
(widget.message.msgID?.isNotEmpty ?? true)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
isShining = true;
|
isShining = true;
|
||||||
|
|
@ -185,30 +174,18 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
Widget tuiBuild(BuildContext context, TUIKitBuildValue value) {
|
Widget tuiBuild(BuildContext context, TUIKitBuildValue value) {
|
||||||
final theme = value.theme;
|
final theme = value.theme;
|
||||||
|
|
||||||
final backgroundColor = widget.isFromSelf
|
final backgroundColor = widget.isFromSelf ? (theme.chatMessageItemFromSelfBgColor ?? theme.lightPrimaryMaterialColor.shade50) : (theme.chatMessageItemFromOthersBgColor);
|
||||||
? (theme.chatMessageItemFromSelfBgColor ??
|
|
||||||
theme.lightPrimaryMaterialColor.shade50)
|
|
||||||
: (theme.chatMessageItemFromOthersBgColor);
|
|
||||||
|
|
||||||
final borderRadius = widget.isFromSelf
|
final borderRadius = widget.isFromSelf
|
||||||
? const BorderRadius.only(
|
? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(2), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10))
|
||||||
topLeft: Radius.circular(10),
|
: const BorderRadius.only(topLeft: Radius.circular(2), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10));
|
||||||
topRight: Radius.circular(2),
|
|
||||||
bottomLeft: Radius.circular(10),
|
|
||||||
bottomRight: Radius.circular(10))
|
|
||||||
: const BorderRadius.only(
|
|
||||||
topLeft: Radius.circular(2),
|
|
||||||
topRight: Radius.circular(10),
|
|
||||||
bottomLeft: Radius.circular(10),
|
|
||||||
bottomRight: Radius.circular(10));
|
|
||||||
if (widget.isShowJump) {
|
if (widget.isShowJump) {
|
||||||
if (!isShining) {
|
if (!isShining) {
|
||||||
Future.delayed(Duration.zero, () {
|
Future.delayed(Duration.zero, () {
|
||||||
_showJumpColor();
|
_showJumpColor();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if ((widget.chatModel.jumpMsgID == widget.message.msgID) &&
|
if ((widget.chatModel.jumpMsgID == widget.message.msgID) && (widget.message.msgID?.isNotEmpty ?? false)) {
|
||||||
(widget.message.msgID?.isNotEmpty ?? false)) {
|
|
||||||
widget.clearJump!();
|
widget.clearJump!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -218,9 +195,7 @@ class _TIMUIKitSoundElemState extends TIMUIKitState<TIMUIKitSoundElem> {
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: widget.textPadding ?? const EdgeInsets.all(10),
|
padding: widget.textPadding ?? const EdgeInsets.all(10),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: isShowJumpState
|
color: isShowJumpState ? const Color.fromRGBO(245, 166, 35, 1) : (widget.backgroundColor ?? backgroundColor),
|
||||||
? const Color.fromRGBO(245, 166, 35, 1)
|
|
||||||
: (widget.backgroundColor ?? backgroundColor),
|
|
||||||
borderRadius: widget.borderRadius ?? borderRadius,
|
borderRadius: widget.borderRadius ?? borderRadius,
|
||||||
),
|
),
|
||||||
constraints: const BoxConstraints(maxWidth: 240),
|
constraints: const BoxConstraints(maxWidth: 240),
|
||||||
|
|
|
||||||
50
pubspec.lock
50
pubspec.lock
|
|
@ -133,26 +133,26 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cached_network_image
|
name: cached_network_image
|
||||||
sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15
|
sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.3"
|
version: "3.3.0"
|
||||||
cached_network_image_platform_interface:
|
cached_network_image_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image_platform_interface
|
name: cached_network_image_platform_interface
|
||||||
sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7
|
sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "3.0.0"
|
||||||
cached_network_image_web:
|
cached_network_image_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: cached_network_image_web
|
name: cached_network_image_web
|
||||||
sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0
|
sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.1.0"
|
||||||
camera:
|
camera:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -301,10 +301,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: dart_internal
|
name: dart_internal
|
||||||
sha256: dae3976f383beddcfcd07ad5291a422df2c8c0a8a03c52cda63ac7b4f26e0f4e
|
sha256: "689dccc3d5f62affd339534cca548dce12b3a6b32f0f10861569d3025efc0567"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.8"
|
version: "0.2.9"
|
||||||
dart_style:
|
dart_style:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -317,10 +317,10 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: desktop_drop
|
name: desktop_drop
|
||||||
sha256: "4ca4d960f4b11c032e9adfd2a0a8ac615bc3fddb4cbe73dcf840dd8077582186"
|
sha256: d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.1"
|
version: "0.4.4"
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -478,14 +478,6 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
flutter_blurhash:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_blurhash
|
|
||||||
sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.7.0"
|
|
||||||
flutter_cache_manager:
|
flutter_cache_manager:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -871,10 +863,10 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: octo_image
|
name: octo_image
|
||||||
sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143"
|
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "2.0.0"
|
||||||
open_file:
|
open_file:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -1284,34 +1276,34 @@ packages:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: tencent_cloud_chat_sdk
|
name: tencent_cloud_chat_sdk
|
||||||
sha256: "013f8c9d96bbeed06d5fe971b7802d8ddf830c776332d6c6de6ccb9de8956d83"
|
sha256: "7dbb354209eca61f2c816c8ba7c1b1282dd5fb7e090135186bde56c89d976110"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.8"
|
version: "6.0.2"
|
||||||
tencent_cloud_uikit_core:
|
tencent_cloud_uikit_core:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: tencent_cloud_uikit_core
|
name: tencent_cloud_uikit_core
|
||||||
sha256: acb3bae877428457318b8c5604a6c263957b6df3454ed3e30e8b6f620c6b2cd9
|
sha256: "5624654c52a230111cbcfcaa648b9c6e3ee877018f16bc5eec076b639655a191"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.2.1"
|
||||||
tencent_im_base:
|
tencent_im_base:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: tencent_im_base
|
name: tencent_im_base
|
||||||
sha256: bc5eb080090038d21c879480c06d3ed7cb4b1dcc2cbe894189613eadf08cf7c5
|
sha256: "52a99ef1c9dbd219530cf6f96a9891ab316f789b9b2c11634e0002d0a0f0f63c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.1.0"
|
||||||
tencent_im_sdk_plugin_platform_interface:
|
tencent_im_sdk_plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: tencent_im_sdk_plugin_platform_interface
|
name: tencent_im_sdk_plugin_platform_interface
|
||||||
sha256: "1f9814d654dc1ad0a4cb62936f0849defac058c3bdca471472efc8b64b63cc5e"
|
sha256: "3b39f19fcc2306c7cbdabe79e532bbb7feade695630f5373308a52703ece482c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.22"
|
version: "1.0.0"
|
||||||
tencent_keyboard_visibility:
|
tencent_keyboard_visibility:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -1641,5 +1633,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.1.0-185.0.dev <3.2.0"
|
dart: ">=3.1.0-185.0.dev <3.3.0"
|
||||||
flutter: ">=3.13.0"
|
flutter: ">=3.13.0"
|
||||||
|
|
|
||||||
10
pubspec.yaml
10
pubspec.yaml
|
|
@ -1,6 +1,6 @@
|
||||||
name: tencent_cloud_chat_uikit
|
name: tencent_cloud_chat_uikit
|
||||||
description: A powerful chat UI component library and business logic for Tencent Cloud Chat, creating seamless in-app chat modules for delightful user experiences.
|
description: A powerful chat UI component library and business logic for Tencent Cloud Chat, creating seamless in-app chat modules for delightful user experiences.
|
||||||
version: 2.3.2
|
version: 2.3.3
|
||||||
homepage: https://trtc.io/products/chat?utm_source=gfs&utm_medium=link&utm_campaign=%E6%B8%A0%E9%81%93&_channel_track_key=k6WgfCKn
|
homepage: https://trtc.io/products/chat?utm_source=gfs&utm_medium=link&utm_campaign=%E6%B8%A0%E9%81%93&_channel_track_key=k6WgfCKn
|
||||||
repository: https://github.com/TencentCloud/chat-uikit-flutter
|
repository: https://github.com/TencentCloud/chat-uikit-flutter
|
||||||
documentation: https://comm.qq.com/im/doc/flutter/en/TUIKit/readme.html
|
documentation: https://comm.qq.com/im/doc/flutter/en/TUIKit/readme.html
|
||||||
|
|
@ -38,7 +38,7 @@ dependencies:
|
||||||
transparent_image: ^2.0.0
|
transparent_image: ^2.0.0
|
||||||
image_gallery_saver: ^2.0.1
|
image_gallery_saver: ^2.0.1
|
||||||
path_provider: ^2.0.8
|
path_provider: ^2.0.8
|
||||||
cached_network_image: ^3.2.0
|
cached_network_image: ^3.3.0
|
||||||
shared_preferences: ^2.0.13
|
shared_preferences: ^2.0.13
|
||||||
scroll_to_index: ^2.1.1
|
scroll_to_index: ^2.1.1
|
||||||
wechat_assets_picker: ^8.5.0
|
wechat_assets_picker: ^8.5.0
|
||||||
|
|
@ -63,12 +63,12 @@ dependencies:
|
||||||
open_file: ^3.3.2
|
open_file: ^3.3.2
|
||||||
tencent_keyboard_visibility: ^1.0.1
|
tencent_keyboard_visibility: ^1.0.1
|
||||||
tim_ui_kit_sticker_plugin: ^3.0.1+1
|
tim_ui_kit_sticker_plugin: ^3.0.1+1
|
||||||
tencent_im_base: ^3.0.1
|
tencent_im_base: ^3.1.0
|
||||||
fc_native_video_thumbnail: any
|
fc_native_video_thumbnail: any
|
||||||
path: ^1.8.1
|
path: ^1.8.1
|
||||||
tencent_cloud_uikit_core: ^1.1.0
|
tencent_cloud_uikit_core: ^1.2.1
|
||||||
pasteboard: ^0.2.0
|
pasteboard: ^0.2.0
|
||||||
desktop_drop: ^0.4.1
|
desktop_drop: ^0.4.4
|
||||||
device_info_plus: any
|
device_info_plus: any
|
||||||
cross_file: ^0.3.3+4
|
cross_file: ^0.3.3+4
|
||||||
csslib: 0.17.2
|
csslib: 0.17.2
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue