showForwardSelector static method
void
showForwardSelector(
- BuildContext context,
- ForwardMessageFunction forwardMessage, {
- List<
String> ? filterUser, - required String sessionName,
- ForwardType type = ForwardType.normal,
跳转转发选择器
Implementation
static void showForwardSelector(
BuildContext context,
ForwardMessageFunction forwardMessage, {
List<String>? filterUser,
required String sessionName,
ForwardType type = ForwardType.normal,
}) {
// Task 8.1-8.3: 桌面/Web 端使用 Dialog 弹出,移动端保持全屏导航
void _handleSelectedList(List<SelectedBeam> selectedList) {
String forwardStr;
if (type == ForwardType.normal) {
forwardStr = S.of(context).messageForwardMessageTips(sessionName);
} else if (type == ForwardType.merge) {
forwardStr = S.of(context).messageForwardMessageMergedTips(sessionName);
} else {
forwardStr =
S.of(context).messageForwardMessageOneByOneTips(sessionName);
}
showChatForwardNewDialog(
context: context,
contentStr: forwardStr,
selectedBeams: selectedList,
).then((result) async {
if (result != null && result.result == true) {
var recentList = selectedList
.map(
(selected) => RecentForward(selected.sessionId!, selected.type),
)
.toList(growable: false);
ChatMessageRepo.saveRecentForward(recentList);
for (int i = 0; i < selectedList.length; i++) {
var selected = selectedList[i];
var conversationId = selected.conversationId;
forwardMessage(
conversationId ?? '',
postScript: result.postScript,
isLastUser: i == selectedList.length - 1,
);
}
}
});
}
if (ChatKitUtils.isDesktopOrWeb) {
// Task 8.2: 桌面/Web 端以 Dialog 方式弹出转发选择器
showDialog<List<SelectedBeam>>(
context: context,
barrierDismissible: true,
builder: (ctx) => Dialog(
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
child: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 480, maxHeight: 640),
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: ChatForwardPage(filterSession: filterUser),
),
),
),
).then((selectedList) {
if (selectedList is List<SelectedBeam>) {
_handleSelectedList(selectedList);
}
});
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return ChatForwardPage(filterSession: filterUser);
},
),
).then((selectedList) {
if (selectedList is List<SelectedBeam>) {
_handleSelectedList(selectedList);
}
});
}
}