Skip to main content

PSMessages

Danh sách tin nhắn của một cuộc hội thoại

Khi điều hướng đến màn hình chứa PSMessages, bạn cần truyền vào một trong hai tham số là targetThreadIdtargetUserId nhằm xác định đối tượng khi nhắn tin. Tham số targetMessageId là không bắt buộc, khi bạn truyền vào thì sẽ được nhảy đến message có ID tương ứng.

Ghi chú

targetThreadId && targetUserId không thể cùng null

context.push(
AppPage.messages.toPath,
extra: MessagesPageExtra(
targetThreadId: targetThreadId,
targetUserId:targetUserId,
targetMessageId: targetMessageId,
),
);

Ví dụ:

class MessagesPageExtra {
final String? targetThreadId;
final String? targetUserId;
final int? targetMessageId;
}

class MessagesPage extends StatelessWidget {
final MessagesPageExtra extra;

const MessagesPage({
super.key,
required this.extra,
});

@override
Widget build(BuildContext context) {
return Scaffold(
body: PSMessages(
targetThreadId: extra.targetThreadId,
targetUserId: extra.targetUserId,
targetMessageId: extra.targetMessageId,
allowedActions:[
PSMessageAction.copy,
PSMessageAction.edit,
],
customActions: [
PSCustomMessageAction(
icon: Assets.icons.icSearch.svg(),
text: 'Custom action',
positionInMenuOptions: 2,
onPress: (message) {},
),
],
customizedMessageItem: (index, message) {},
navigation: PSMessagesNavigationProvider(
onBackPress: () {
context.pop();
},
onThreadProfilePress: (String threadId) {
// Called when user taps on thread profile
},
onUrlPress: (String url) async {
await launchUrl(
Uri.parse(url),
mode: LaunchMode.inAppWebView,
);
},
onEmailPress: (String email) async {
await launchUrl(Uri.parse(email));
},
onPhoneNumberPress: (String phoneNumber) async {
await launchUrl(Uri.parse(phoneNumber));
},
onForwardMessage: (String threadId, List<int> messageIds) {
// Called when user taps on forward message option
},
onMessagesPinnedPress: (String threadId) {
// Called when user taps on messages pined area
},
onViewFilePress: (String filePath) => OpenFilex.open(filePath),
onUserPress: (
String psUserId,
String? currentThreadPartnerId,
) {
// Called when user taps on another user.
},
onShareMessagePress: (PSMessageModel message) async {
final media = message.body?.media;
final hasMedia = media != null && media.isNotEmpty;
if (hasMedia) {
final listXFile = <XFile>[];
for (var element in media) {
final file = await getXFile(element.srcUrl);
listXFile.add(file);
}
Share.shareXFiles(listXFile, subject: "Communi Chat");
},
onChatBotActionPress: (String uri) async {
if (uri.startsWith("http")) {
await launchUrl(
Uri.parse(uri),
mode: LaunchMode.inAppWebView,
);
} else if (uri.startsWith("tel:") || uri.startsWith("mailto:")) {
await launchUrl(Uri.parse(uri));
}
},
onMediaPress: (List<PSMessageMediaModel> media, int? startIndex) {
// Called when user taps on media file
},
),
),
);
}
}

Các thành phần:

class PSMessages extends StatefulWidget {
final String? targetThreadId;
final String? targetUserId;
final int? targetMessageId;
final String? screenContext;
final PSMessagesStyles? messagesStyles;
final PSMessagesNavigationProvider navigation;
final PSNullableMessageBuilder? customizedMessageItem;
final List<PSMessageAction>? allowedActions;
final List<PSCustomMessageAction>? customActions;
}
class PSMessagesNavigationProvider {
final void Function()? onBackPress;
final void Function(String threadId)? onThreadProfilePress;
final void Function(String url)? onUrlPress;
final void Function(String email)? onEmailPress;
final void Function(String phoneNumber)? onPhoneNumberPress;
final void Function(
String threadId,
List<int> messageIds,
)? onForwardMessage;
final void Function(String threadId)? onMessagesPinnedPress;
final void Function(String filePath)? onViewFilePress;
final void Function(
String psUserId,
String? currentThreadPartnerId,
)? onUserPress;
final void Function(PSMessageModel message)? onShareMessagePress;
final void Function(String uri)? onChatBotActionPress;
final void Function(List<PSMessageMediaModel> media, int? startIndex)?
onMediaPress;
...
}
TênMô tảBắt buộc
targetThreadIdTham số xác định id của cuộc hội thoại
targetUserIdTham số xác định piscale_user_id của đối tác trong cuộc hội thoại 1-1
targetMessageIdTham số xác định id của message để cuộn tới
screenContextTham số xác định ngữ cảnh của màn hình hiện tại
customizedMessageItemTham số truyền vào để customMessage. Xem chi tiết tại Customize Message
allowedActionsTham số truyền vào danh sách các hành động được phép thực hiện khi long-press vào một tin nhắn. Mặc định là null có nghĩa được phép sử dụng tất cả các hành động có sẵn
customActionsNgoài những hành động được cung cấp sẵn, bạn có thể truyền vào những hành động tùy chỉnh theo nhu cầu
onBackPressHàm gọi lại khi cần back về state trước
onThreadProfilePressHàm gọi lại khi cần chuyển hướng tới PSThreadProfile
onUrlPressHàm gọi lại khi user nhấn vào link trong tin nhắn
onEmailPressHàm gọi lại khi user nhấn vào email trong tin nhắn
onPhoneNumberPressHàm gọi lại khi user nhấn vào phone number trong tin nhắn
onForwardMessageHàm gọi lại khi cần chuyển hướng tới PSForwardMessage
onMessagesPinnedPressHàm gọi lại khi cần chuyển hướng tới PSMessagesPinned
onViewFilePressHàm gọi lại khi user nhấn vào file
onUserPressHàm gọi lại khi user nhấn vào avatar hoặc mention
onShareMessagePressHàm gọi lại khi user muốn share
onChatBotActionPressHàm gọi lại khi user nhấn vào action của Bot trong tin nhắn
onMediaPressHàm gọi lại khi user nhấn vào media trong tin nhắn
Ghi chú

Một số chức năng sẽ không hoạt động hoặc không hoạt động đúng cách khi không khai báo những hàm gọi lại.