From 0d58276ff62e1520c6f32b87338d799ef6a18fc6 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 7 Jan 2026 20:47:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=80=89=E6=8B=A9@?= =?UTF-8?q?=E6=88=90=E5=91=98=E7=82=B9=E5=87=BB=E8=BF=94=E5=9B=9E=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E7=A9=BA=E7=B1=BB=E5=9E=8B=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Navigator.push 在用户取消时返回 null - 将 selectedAtMemberList 类型改为可空 - 添加 null 检查避免 TypeError --- .../tim_uikit_text_field.dart | 270 ++++++++++++------ 1 file changed, 186 insertions(+), 84 deletions(-) diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart index aeee4f4..89c4f80 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart @@ -150,7 +150,8 @@ class _InputTextFieldState extends TIMUIKitState { double inputWidth = 900; Map mentionedMembersMap = {}; late TextEditingController textEditingController; - final TUIConversationViewModel conversationModel = serviceLocator(); + final TUIConversationViewModel conversationModel = + serviceLocator(); final TUISelfInfoViewModel selfModel = serviceLocator(); MuteStatus muteStatus = MuteStatus.none; bool _isComposingText = false; @@ -162,9 +163,11 @@ class _InputTextFieldState extends TIMUIKitState { // Keep using original scheme. return; } - final stickerConfig = widget.model.chatConfig.stickerPanelConfig ?? StickerPanelConfig(); + final stickerConfig = + widget.model.chatConfig.stickerPanelConfig ?? StickerPanelConfig(); if (stickerConfig.useTencentCloudChatStickerPackage) { - final tccEmojiSet = TUIKitStickerConstData.emojiList.firstWhere((element) => element.name == "tcc1"); + final tccEmojiSet = TUIKitStickerConstData.emojiList + .firstWhere((element) => element.name == "tcc1"); stickerPackageList.add(CustomStickerPackage( name: tccEmojiSet.name, baseUrl: "assets/custom_face_resource/${tccEmojiSet.name}", @@ -173,7 +176,8 @@ class _InputTextFieldState extends TIMUIKitState { stickerList: tccEmojiSet.list .asMap() .keys - .map((idx) => CustomSticker(index: idx, name: tccEmojiSet.list[idx])) + .map((idx) => + CustomSticker(index: idx, name: tccEmojiSet.list[idx])) .toList(), menuItem: CustomSticker( index: 0, @@ -182,14 +186,19 @@ class _InputTextFieldState extends TIMUIKitState { } if (stickerConfig.useQQStickerPackage) { - final qqEmojiSet = TUIKitStickerConstData.emojiList.firstWhere((element) => element.name == "4349"); + final qqEmojiSet = TUIKitStickerConstData.emojiList + .firstWhere((element) => element.name == "4349"); stickerPackageList.add(CustomStickerPackage( name: qqEmojiSet.name, baseUrl: "assets/custom_face_resource/${qqEmojiSet.name}", isEmoji: qqEmojiSet.isEmoji, isDefaultEmoji: true, - stickerList: - qqEmojiSet.list.asMap().keys.map((idx) => CustomSticker(index: idx, name: qqEmojiSet.list[idx])).toList(), + stickerList: qqEmojiSet.list + .asMap() + .keys + .map((idx) => + CustomSticker(index: idx, name: qqEmojiSet.list[idx])) + .toList(), menuItem: CustomSticker( index: 0, name: qqEmojiSet.icon, @@ -197,11 +206,15 @@ class _InputTextFieldState extends TIMUIKitState { } if (stickerConfig.unicodeEmojiList.isNotEmpty) { - final defEmojiList = TUIKitStickerConstData.defaultUnicodeEmojiList.map((emojiItem) { - return CustomSticker(index: 0, name: emojiItem.toString(), unicode: emojiItem); + final defEmojiList = + TUIKitStickerConstData.defaultUnicodeEmojiList.map((emojiItem) { + return CustomSticker( + index: 0, name: emojiItem.toString(), unicode: emojiItem); }).toList(); - stickerPackageList - .add(CustomStickerPackage(name: "defaultEmoji", stickerList: defEmojiList, menuItem: defEmojiList[0])); + stickerPackageList.add(CustomStickerPackage( + name: "defaultEmoji", + stickerList: defEmojiList, + menuItem: defEmojiList[0])); } stickerPackageList.addAll(stickerConfig.customStickerPackages); @@ -231,7 +244,8 @@ class _InputTextFieldState extends TIMUIKitState { if (cursorPosition > 0) { final EmojiUtil emojiUtil = EmojiUtil(); int removeLength = 1; - int openBracketIndex = originalText.lastIndexOf('[', cursorPosition - 1); + int openBracketIndex = + originalText.lastIndexOf('[', cursorPosition - 1); if (openBracketIndex != -1 && originalText[cursorPosition - 1] == ']') { // Small png emoji @@ -240,19 +254,23 @@ class _InputTextFieldState extends TIMUIKitState { if (emojiUtil.emojiMap.containsKey(key)) { removeLength = cursorPosition - openBracketIndex; } - } else if (cursorPosition > 1 && isEmoji(originalText.substring(cursorPosition - 2, cursorPosition))) { + } else if (cursorPosition > 1 && + isEmoji( + originalText.substring(cursorPosition - 2, cursorPosition))) { removeLength = 2; } - text = originalText.substring(0, cursorPosition - removeLength) + originalText.substring(cursorPosition); + text = originalText.substring(0, cursorPosition - removeLength) + + originalText.substring(cursorPosition); currentCursor = (currentCursor ?? removeLength) - removeLength; } textEditingController.text = text; if (TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop) { - textEditingController.selection = - TextSelection.fromPosition(TextPosition(offset: currentCursor ?? textEditingController.text.length)); + textEditingController.selection = TextSelection.fromPosition( + TextPosition( + offset: currentCursor ?? textEditingController.text.length)); focusNode.requestFocus(); } } @@ -272,7 +290,9 @@ class _InputTextFieldState extends TIMUIKitState { void _addStickerToText(String sticker) { final currentText = textEditingController.text; - if (currentCursor != null && currentCursor! > -1 && currentCursor! < currentText.length + 1) { + if (currentCursor != null && + currentCursor! > -1 && + currentCursor! < currentText.length + 1) { final firstString = currentText.substring(0, currentCursor); final secondString = currentText.substring(currentCursor!); currentCursor = currentCursor! + sticker.length; @@ -283,8 +303,8 @@ class _InputTextFieldState extends TIMUIKitState { } if (TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop) { - textEditingController.selection = - TextSelection.fromPosition(TextPosition(offset: currentCursor ?? textEditingController.text.length)); + textEditingController.selection = TextSelection.fromPosition(TextPosition( + offset: currentCursor ?? textEditingController.text.length)); focusNode.requestFocus(); } } @@ -293,7 +313,8 @@ class _InputTextFieldState extends TIMUIKitState { return text.replaceAll(RegExp(r'\ufeff'), ""); } - Future handleSetDraftText({String? id, ConvType? convType, String? groupID}) async { + Future handleSetDraftText( + {String? id, ConvType? convType, String? groupID}) async { String text = textEditingController.text; String convID = id ?? widget.conversationID; final isTopic = convID.contains("@TOPIC#"); @@ -367,11 +388,19 @@ class _InputTextFieldState extends TIMUIKitState { if (widget.model.repliedMessage != null) { MessageUtils.handleMessageError( - widget.model.sendFaceMessage(index: groupID, data: data, convID: widget.conversationID, convType: convType), + widget.model.sendFaceMessage( + index: groupID, + data: data, + convID: widget.conversationID, + convType: convType), context); } else { MessageUtils.handleMessageError( - widget.model.sendFaceMessage(index: groupID, data: data, convID: widget.conversationID, convType: convType), + widget.model.sendFaceMessage( + index: groupID, + data: data, + convID: widget.conversationID, + convType: convType), context); } } @@ -407,7 +436,9 @@ class _InputTextFieldState extends TIMUIKitState { atUserList: getUserIdFromMemberInfoMap()); } else { MessageUtils.handleMessageError( - widget.model.sendTextMessage(text: text, convID: widget.conversationID, convType: convType), context); + widget.model.sendTextMessage( + text: text, convID: widget.conversationID, convType: convType), + context); } textEditingController.clear(); currentCursor = null; @@ -420,7 +451,8 @@ class _InputTextFieldState extends TIMUIKitState { } void goDownBottom() { - if (globalModel.getMessageListPosition(widget.conversationID) == HistoryMessagePosition.notShowLatest) { + if (globalModel.getMessageListPosition(widget.conversationID) == + HistoryMessagePosition.notShowLatest) { return; } Future.delayed(const Duration(milliseconds: 50), () { @@ -459,7 +491,8 @@ class _InputTextFieldState extends TIMUIKitState { if (TencentUtils.checkString(userID) == null) { focusNode.requestFocus(); } else { - final memberInfo = widget.model.groupMemberList?.firstWhereOrNull((element) => element?.userID == userID) ?? + final memberInfo = widget.model.groupMemberList + ?.firstWhereOrNull((element) => element?.userID == userID) ?? V2TimGroupMemberFullInfo( userID: userID ?? "", nickName: nickName, @@ -470,7 +503,8 @@ class _InputTextFieldState extends TIMUIKitState { //please do not delete space focusNode.requestFocus(); textEditingController.text = text; - textEditingController.selection = TextSelection.fromPosition(TextPosition(offset: text.length)); + textEditingController.selection = + TextSelection.fromPosition(TextPosition(offset: text.length)); lastText = text; _isComposingText = false; narrowTextFieldKey.currentState?.showKeyboard = true; @@ -498,10 +532,16 @@ class _InputTextFieldState extends TIMUIKitState { maxLines: null, ); textPainter.layout(maxWidth: inputWidth); - final TextPosition lastLineOffset = textPainter.getPositionForOffset(Offset(textPainter.width, textPainter.height)); - final Offset caretPosition = textPainter.getOffsetForCaret(lastLineOffset, Rect.zero); + final TextPosition lastLineOffset = textPainter + .getPositionForOffset(Offset(textPainter.width, textPainter.height)); + final Offset caretPosition = + textPainter.getOffsetForCaret(lastLineOffset, Rect.zero); final dx = min(inputWidth - 180, caretPosition.dx + 16); - final dy = max(24, 21 * widget.model.chatConfig.desktopMessageInputFieldLines - caretPosition.dy).toDouble(); + final dy = max( + 24, + 21 * widget.model.chatConfig.desktopMessageInputFieldLines - + caretPosition.dy) + .toDouble(); return Offset(dx, dy); } @@ -538,13 +578,19 @@ class _InputTextFieldState extends TIMUIKitState { mentionedMembersMap = map; } - (int, String, bool)? findChangedCharacter(String originalString, String newString) { + (int, String, bool)? findChangedCharacter( + String originalString, String newString) { if (newString.length < originalString.length) { final originalStringLength = originalString.length; final newStringLength = newString.length; for (int i = 0; i < newString.length; ++i) { - if (originalString[originalStringLength - i - 1] != newString[newStringLength - i - 1]) { - return (newStringLength - i, originalString[originalStringLength - i - 1], false); + if (originalString[originalStringLength - i - 1] != + newString[newStringLength - i - 1]) { + return ( + newStringLength - i, + originalString[originalStringLength - i - 1], + false + ); } } return (newString.length, originalString[newString.length], false); @@ -563,8 +609,11 @@ class _InputTextFieldState extends TIMUIKitState { _handleAtText(String text, TUIChatSeparateViewModel model) async { final text = textEditingController.text; final String originalText = lastText; - String? groupID = widget.conversationType == ConvType.group ? widget.conversationID : null; - final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + String? groupID = widget.conversationType == ConvType.group + ? widget.conversationID + : null; + final isDesktopScreen = + TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (groupID == null) { lastText = text; @@ -584,9 +633,11 @@ class _InputTextFieldState extends TIMUIKitState { String atTag = originalText.substring(atIndex, spaceIndex); String deletedChar = originalText[diffIndex]; if (shouldRemoveAtTag(atTag, deletedChar)) { - final newText = originalText.substring(0, atIndex) + originalText.substring(spaceIndex + 1); + final newText = originalText.substring(0, atIndex) + + originalText.substring(spaceIndex + 1); textEditingController.text = newText; - textEditingController.selection = TextSelection.collapsed(offset: atIndex); + textEditingController.selection = + TextSelection.collapsed(offset: atIndex); lastText = newText; updateMentionedMap(); return; @@ -602,7 +653,8 @@ class _InputTextFieldState extends TIMUIKitState { selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); if (isDesktopScreen) { - (int, String, bool)? changedCharacterRecord = findChangedCharacter(originalText, text); + (int, String, bool)? changedCharacterRecord = + findChangedCharacter(originalText, text); int? changedTextPosition = changedCharacterRecord?.$1; String? changedCharacter = changedCharacterRecord?.$2; bool isAdded = changedCharacterRecord?.$3 ?? false; @@ -611,10 +663,13 @@ class _InputTextFieldState extends TIMUIKitState { int? atPlace; if (changedTextPosition != null) { - subText = isAdded == true ? text.substring(0, changedTextPosition + 1) : text.substring(0, changedTextPosition); + subText = isAdded == true + ? text.substring(0, changedTextPosition + 1) + : text.substring(0, changedTextPosition); atPlace = subText.lastIndexOf('@'); if (atPlace != -1) { - keyword = text.substring(atPlace + 1, changedTextPosition + (isAdded ? 1 : 0)); + keyword = text.substring( + atPlace + 1, changedTextPosition + (isAdded ? 1 : 0)); } } else { atPlace = -1; @@ -627,9 +682,12 @@ class _InputTextFieldState extends TIMUIKitState { model.atPositionY = atPosition.dy; isAddingAtSearchWords = true; } - List showAtMemberList = (model.groupMemberList ?? []) + List showAtMemberList = (model + .groupMemberList ?? + []) .where((element) { - final showName = (TencentUtils.checkStringWithoutSpace(element?.friendRemark) ?? + final showName = (TencentUtils.checkStringWithoutSpace( + element?.friendRemark) ?? TencentUtils.checkStringWithoutSpace(element?.nameCard) ?? TencentUtils.checkStringWithoutSpace(element?.nickName) ?? TencentUtils.checkStringWithoutSpace(element?.userID) ?? @@ -644,7 +702,8 @@ class _InputTextFieldState extends TIMUIKitState { .whereType() .toList(); - showAtMemberList.sort((V2TimGroupMemberFullInfo userA, V2TimGroupMemberFullInfo userB) { + showAtMemberList.sort( + (V2TimGroupMemberFullInfo userA, V2TimGroupMemberFullInfo userB) { final isUserAIsGroupAdmin = userA.role == 300; final isUserAIsGroupOwner = userA.role == 400; @@ -668,7 +727,8 @@ class _InputTextFieldState extends TIMUIKitState { keyword ??= ""; if (canAtAll && showAtMemberList.isNotEmpty && keyword!.isEmpty) { showAtMemberList = [ - V2TimGroupMemberFullInfo(userID: "__kImSDK_MesssageAtALL__", nickName: TIM_t("所有人")), + V2TimGroupMemberFullInfo( + userID: "__kImSDK_MesssageAtALL__", nickName: TIM_t("所有人")), ...showAtMemberList ]; } @@ -682,8 +742,12 @@ class _InputTextFieldState extends TIMUIKitState { model.showAtMemberList = []; isAddingAtSearchWords = false; } - } else if (textLength > 0 && text[textLength - 1] == "@" && lastText.length < textLength) { - List selectedAtMemberList = await Navigator.push( + } else if (textLength > 0 && + text[textLength - 1] == "@" && + lastText.length < textLength) { + // 用户点击返回时 Navigator.push 可能返回 null + List? selectedAtMemberList = + await Navigator.push( context, MaterialPageRoute( builder: (context) => AtText( @@ -695,14 +759,18 @@ class _InputTextFieldState extends TIMUIKitState { ), ); - for (int i = 0; i < selectedAtMemberList.length; ++i) { - V2TimGroupMemberFullInfo memberInfo = selectedAtMemberList[i]; - final showName = _getShowName(memberInfo); - if (memberInfo != null) { - mentionedMembersMap["@$showName"] = memberInfo; - String addAtCharacter = i == 0 ? "" : "@"; - textEditingController.text = "${textEditingController.text}$addAtCharacter$showName "; - lastText = "${textEditingController.text}$addAtCharacter$showName "; + // 如果用户取消选择(点击返回),selectedAtMemberList 为 null + if (selectedAtMemberList != null) { + for (int i = 0; i < selectedAtMemberList.length; ++i) { + V2TimGroupMemberFullInfo memberInfo = selectedAtMemberList[i]; + final showName = _getShowName(memberInfo); + if (memberInfo != null) { + mentionedMembersMap["@$showName"] = memberInfo; + String addAtCharacter = i == 0 ? "" : "@"; + textEditingController.text = + "${textEditingController.text}$addAtCharacter$showName "; + lastText = "${textEditingController.text}$addAtCharacter$showName "; + } } } } @@ -712,17 +780,22 @@ class _InputTextFieldState extends TIMUIKitState { void replaceAtTag(String selectedMember) { int cursorPosition = textEditingController.selection.baseOffset; - int atIndex = textEditingController.text.lastIndexOf('@', cursorPosition - 1); + int atIndex = + textEditingController.text.lastIndexOf('@', cursorPosition - 1); if (atIndex >= 0) { String beforeAt = textEditingController.text.substring(0, atIndex); String afterAt = textEditingController.text.substring(cursorPosition); - textEditingController.text = beforeAt + '@' + selectedMember + ' ' + afterAt; - textEditingController.selection = TextSelection.collapsed(offset: atIndex + selectedMember.length + 2); + textEditingController.text = + beforeAt + '@' + selectedMember + ' ' + afterAt; + textEditingController.selection = + TextSelection.collapsed(offset: atIndex + selectedMember.length + 2); lastText = beforeAt + '@' + selectedMember + ' ' + afterAt; } } - void handleAtMember({V2TimGroupMemberFullInfo? memberInfo, bool? isAddToCursorPosition = false}) { + void handleAtMember( + {V2TimGroupMemberFullInfo? memberInfo, + bool? isAddToCursorPosition = false}) { if (memberInfo != null) { final String showName = _getShowName(memberInfo); mentionedMembersMap["@$showName"] = memberInfo; @@ -736,19 +809,24 @@ class _InputTextFieldState extends TIMUIKitState { KeyEventResult handleDesktopKeyEvent(FocusNode node, RawKeyEvent event) { final activeIndex = widget.model.activeAtIndex; final showMemberList = widget.model.showAtMemberList; - final isPressEnter = - (event.physicalKey == PhysicalKeyboardKey.enter) || (event.physicalKey == PhysicalKeyboardKey.numpadEnter); + final isPressEnter = (event.physicalKey == PhysicalKeyboardKey.enter) || + (event.physicalKey == PhysicalKeyboardKey.numpadEnter); if (event.runtimeType == RawKeyDownEvent) { if (event.physicalKey == PhysicalKeyboardKey.backspace) { if (textEditingController.text.isEmpty && lastText.isEmpty) { widget.model.repliedMessage = null; return KeyEventResult.handled; } - } else if ((event.isShiftPressed || event.isAltPressed || event.isControlPressed || event.isMetaPressed) && + } else if ((event.isShiftPressed || + event.isAltPressed || + event.isControlPressed || + event.isMetaPressed) && isPressEnter) { final offset = textEditingController.selection.baseOffset; - textEditingController.text = '${lastText.substring(0, offset)}\n${lastText.substring(offset)}'; - textEditingController.selection = TextSelection.fromPosition(TextPosition(offset: offset + 1)); + textEditingController.text = + '${lastText.substring(0, offset)}\n${lastText.substring(offset)}'; + textEditingController.selection = + TextSelection.fromPosition(TextPosition(offset: offset + 1)); lastText = textEditingController.text; return KeyEventResult.handled; @@ -758,26 +836,34 @@ class _InputTextFieldState extends TIMUIKitState { onSubmitted(); } else { isAddingAtSearchWords = false; - final V2TimGroupMemberFullInfo? memberInfo = showMemberList[activeIndex]; + final V2TimGroupMemberFullInfo? memberInfo = + showMemberList[activeIndex]; if (memberInfo != null) { - handleAtMember(memberInfo: memberInfo, isAddToCursorPosition: true); + handleAtMember( + memberInfo: memberInfo, isAddToCursorPosition: true); } } return KeyEventResult.handled; } } - if (event.isKeyPressed(LogicalKeyboardKey.arrowUp) && isAddingAtSearchWords && showMemberList.isNotEmpty) { + if (event.isKeyPressed(LogicalKeyboardKey.arrowUp) && + isAddingAtSearchWords && + showMemberList.isNotEmpty) { final newIndex = max(activeIndex - 1, 0); widget.model.activeAtIndex = newIndex; - widget.atMemberPanelScroll?.scrollToIndex(newIndex, preferPosition: AutoScrollPosition.middle); + widget.atMemberPanelScroll?.scrollToIndex(newIndex, + preferPosition: AutoScrollPosition.middle); return KeyEventResult.handled; } - if (event.isKeyPressed(LogicalKeyboardKey.arrowDown) && isAddingAtSearchWords && showMemberList.isNotEmpty) { + if (event.isKeyPressed(LogicalKeyboardKey.arrowDown) && + isAddingAtSearchWords && + showMemberList.isNotEmpty) { final newIndex = min(activeIndex + 1, showMemberList.length - 1); widget.model.activeAtIndex = newIndex; - widget.atMemberPanelScroll?.scrollToIndex(newIndex, preferPosition: AutoScrollPosition.middle); + widget.atMemberPanelScroll?.scrollToIndex(newIndex, + preferPosition: AutoScrollPosition.middle); return KeyEventResult.handled; } } @@ -795,7 +881,8 @@ class _InputTextFieldState extends TIMUIKitState { } else { focusNode = FocusNode(); } - textEditingController = widget.controller?.textEditingController ?? TextEditingController(); + textEditingController = + widget.controller?.textEditingController ?? TextEditingController(); if (widget.initText != null) { textEditingController.text = widget.initText!; } @@ -803,7 +890,10 @@ class _InputTextFieldState extends TIMUIKitState { widget.controller?.addListener(controllerHandler); } final AppLocale appLocale = I18nUtils.findDeviceLocale(null); - languageType = (appLocale == AppLocale.zhHans || appLocale == AppLocale.zhHant) ? 'zh' : 'en'; + languageType = + (appLocale == AppLocale.zhHans || appLocale == AppLocale.zhHant) + ? 'zh' + : 'en'; textEditingController.addListener(() { _isComposingText = textEditingController.value.composing.start != -1; }); @@ -813,12 +903,13 @@ class _InputTextFieldState extends TIMUIKitState { controllerHandler() { final actionType = widget.controller?.actionType; if (actionType == ActionType.longPressToAt) { - mentionMemberInMessage(widget.controller?.atUserID, widget.controller?.atUserName); + mentionMemberInMessage( + widget.controller?.atUserID, widget.controller?.atUserName); } else if (actionType == ActionType.setTextField) { final newText = widget.controller?.inputText ?? ""; textEditingController.text = newText; - textEditingController.selection = - TextSelection.fromPosition(TextPosition(offset: textEditingController.text.length)); + textEditingController.selection = TextSelection.fromPosition( + TextPosition(offset: textEditingController.text.length)); lastText = textEditingController.text; focusNode.requestFocus(); return; @@ -837,14 +928,17 @@ class _InputTextFieldState extends TIMUIKitState { if (widget.conversationID != oldWidget.conversationID) { mentionedMembersMap.clear(); handleSetDraftText( - id: oldWidget.conversationID, convType: oldWidget.conversationType, groupID: oldWidget.groupID); + id: oldWidget.conversationID, + convType: oldWidget.conversationType, + groupID: oldWidget.groupID); if (oldWidget.initText != widget.initText) { textEditingController.text = widget.initText ?? ""; } else { textEditingController.clear(); } } - if (widget.initText != oldWidget.initText && TencentUtils.checkString(widget.initText) != null) { + if (widget.initText != oldWidget.initText && + TencentUtils.checkString(widget.initText) != null) { textEditingController.text = widget.initText!; focusNode.requestFocus(); } @@ -862,9 +956,12 @@ class _InputTextFieldState extends TIMUIKitState { Future getMemberMuteStatus(String userID) async { // Get the mute state of the members recursively - if (widget.model.groupMemberList?.any((item) => (item?.userID == userID)) ?? false) { - final int muteUntil = - widget.model.groupMemberList?.firstWhere((item) => (item?.userID == userID))?.muteUntil ?? 0; + if (widget.model.groupMemberList?.any((item) => (item?.userID == userID)) ?? + false) { + final int muteUntil = widget.model.groupMemberList + ?.firstWhere((item) => (item?.userID == userID)) + ?.muteUntil ?? + 0; return muteUntil * 1000 > DateTime.now().millisecondsSinceEpoch; } else { return false; @@ -877,11 +974,13 @@ class _InputTextFieldState extends TIMUIKitState { } final int selfRole = widget.model.selfMemberInfo?.role ?? 0; - final bool willNotBeenMuted = (selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN || - selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); + final bool willNotBeenMuted = + (selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN || + selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); if (widget.conversationType == ConvType.group && !willNotBeenMuted) { - if ((model.groupInfo?.isAllMuted ?? false) && muteStatus != MuteStatus.all) { + if ((model.groupInfo?.isAllMuted ?? false) && + muteStatus != MuteStatus.all) { Future.delayed(const Duration(seconds: 0), () { setState(() { muteStatus = MuteStatus.all; @@ -896,7 +995,8 @@ class _InputTextFieldState extends TIMUIKitState { }); }); } else if (!(model.groupInfo?.isAllMuted ?? false) && - !(selfModel.loginInfo?.userID != null && await getMemberMuteStatus(selfModel.loginInfo!.userID!)) && + !(selfModel.loginInfo?.userID != null && + await getMemberMuteStatus(selfModel.loginInfo!.userID!)) && muteStatus != MuteStatus.none) { Future.delayed(const Duration(seconds: 0), () { setState(() { @@ -926,7 +1026,8 @@ class _InputTextFieldState extends TIMUIKitState { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; - final TUIChatSeparateViewModel model = Provider.of(context); + final TUIChatSeparateViewModel model = + Provider.of(context); _getMuteType(model); @@ -946,7 +1047,8 @@ class _InputTextFieldState extends TIMUIKitState { } final forbiddenText = getForbiddenText(); - return LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { + return LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { inputWidth = constraints.maxWidth; return TUIKitScreenUtils.getDeviceWidget( context: context,