showForwardSelector static method

void showForwardSelector(
  1. BuildContext context,
  2. ForwardMessageFunction forwardMessage, {
  3. List<String>? filterUser,
  4. required String sessionName,
  5. 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);
      }
    });
  }
}