[bugfix] chat bubble error and Pronounce ID.UNYX error
This commit is contained in:
@@ -62,23 +62,21 @@ class _FullScreenState extends State<FullScreen> {
|
||||
const SizedBox(height: 12),
|
||||
Expanded(
|
||||
child: Consumer<MessageService>(
|
||||
builder: (context, handler, child) {
|
||||
builder: (context, messageService, child) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_scrollToBottom();
|
||||
});
|
||||
final messageService = context.read<MessageService>();
|
||||
List<ChatMessage> fullScreenMessages = List.from(handler.messages);
|
||||
if (fullScreenMessages.isEmpty) {
|
||||
Future.delayed(const Duration(milliseconds: 500), () {
|
||||
if (messageService.messages.isEmpty) {
|
||||
// Future.delayed(const Duration(milliseconds: 500), () {
|
||||
String text = Intl.getCurrentLocale().startsWith('zh')
|
||||
? "您好,我是众众,请问有什么可以帮您?"
|
||||
: "Hi, I'm Zhongzhong, may I help you ? ";
|
||||
messageService.addMessage(text, false, MessageStatus.normal);
|
||||
});
|
||||
// });
|
||||
}
|
||||
return ChatBox(
|
||||
scrollController: _scrollController,
|
||||
messages: handler.messages,
|
||||
messages: messageService.messages,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
@@ -110,8 +110,7 @@ class _PartScreenState extends State<PartScreen> {
|
||||
_scrollToBottom();
|
||||
});
|
||||
return Consumer<MessageService>(
|
||||
builder: (context, handler, child) {
|
||||
final messages = handler.messages;
|
||||
builder: (context, messageService, child) {
|
||||
return AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 180),
|
||||
curve: Curves.easeInOut,
|
||||
@@ -145,7 +144,7 @@ class _PartScreenState extends State<PartScreen> {
|
||||
child: ChatBox(
|
||||
scrollController:
|
||||
_scrollController,
|
||||
messages: messages,
|
||||
messages: messageService.messages,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -78,6 +78,10 @@ class ChatSseService {
|
||||
break;
|
||||
}
|
||||
tempText += textChunk;
|
||||
if (tempText.contains("ID.")) {
|
||||
tempText = tempText.replaceAllMapped(
|
||||
RegExp(r'ID\.', caseSensitive: false), (m) => 'ID ');
|
||||
}
|
||||
int endIndex = _getCompleteTextEndIndex(tempText);
|
||||
String completeText = CommonUtil.cleanText(tempText.substring(0, endIndex).trim(), true);
|
||||
if (completeText.isNotEmpty) {
|
||||
@@ -136,7 +140,7 @@ class ChatSseService {
|
||||
|
||||
int _getCompleteTextEndIndex(String buffer) {
|
||||
// 支持句号、问号、感叹号和换行符作为分割依据
|
||||
final sentenceEnders = RegExp(r'[,!?:,。!?:\n]');
|
||||
final sentenceEnders = RegExp(r'[,.!?:,。!?:\n]');
|
||||
final matches = sentenceEnders.allMatches(buffer);
|
||||
return matches.isEmpty ? 0 : matches.last.end;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,15 @@ class MessageService extends ChangeNotifier {
|
||||
replaceMessage(id: _latestUserMessageId!, text: call.arguments);
|
||||
break;
|
||||
case "onAsrStop":
|
||||
int index = findMessageIndexById(_latestUserMessageId!);
|
||||
if (index == -1) {
|
||||
return;
|
||||
}
|
||||
final message = _messages[index];
|
||||
if (message.text.isEmpty) {
|
||||
removeMessageById(_latestUserMessageId!);
|
||||
return;
|
||||
}
|
||||
replaceMessage(
|
||||
id: _latestUserMessageId!, status: MessageStatus.normal);
|
||||
if (_asrCompleter != null && !_asrCompleter!.isCompleted) {
|
||||
|
||||
@@ -50,8 +50,13 @@ class CommonUtil {
|
||||
.trim();
|
||||
|
||||
if (forTts) {
|
||||
cleanedText = cleanedText.replaceAllMapped(
|
||||
RegExp(r'ID\.UNYX', caseSensitive: false), (m) => 'I D Unix');
|
||||
if (cleanedText.contains("ID.UNYX")) {
|
||||
cleanedText = cleanedText.replaceAllMapped(
|
||||
RegExp(r'ID\.UNYX', caseSensitive: false), (m) => 'ID Unix');
|
||||
} else {
|
||||
cleanedText = cleanedText.replaceAllMapped(
|
||||
RegExp(r'UNYX', caseSensitive: false), (m) => 'Unix');
|
||||
}
|
||||
}
|
||||
|
||||
return cleanedText;
|
||||
|
||||
@@ -61,30 +61,31 @@ class _ChatBubbleState extends State<ChatBubble> {
|
||||
),
|
||||
child: _buildAssistantContent(isThinking),
|
||||
)
|
||||
: IntrinsicWidth(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 12, vertical: 12),
|
||||
decoration: BoxDecoration(
|
||||
color: message.isUser
|
||||
? CommonUtil.commonColor
|
||||
: Colors.white.withValues(alpha: 0.12),
|
||||
borderRadius: message.isUser
|
||||
? BorderRadius.only(
|
||||
topLeft: Radius.circular(12),
|
||||
bottomLeft: Radius.circular(12),
|
||||
bottomRight: Radius.circular(12),
|
||||
)
|
||||
: BorderRadius.only(
|
||||
topRight: Radius.circular(12),
|
||||
bottomLeft: Radius.circular(12),
|
||||
bottomRight: Radius.circular(12),
|
||||
),
|
||||
),
|
||||
child: message.isUser
|
||||
? _buildUserContent()
|
||||
: _buildAssistantContent(isThinking),
|
||||
: Container(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: 50,
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 12, vertical: 12),
|
||||
decoration: BoxDecoration(
|
||||
color: message.isUser
|
||||
? CommonUtil.commonColor
|
||||
: Colors.white.withOpacity(0.12),
|
||||
borderRadius: message.isUser
|
||||
? BorderRadius.only(
|
||||
topLeft: Radius.circular(12),
|
||||
bottomLeft: Radius.circular(12),
|
||||
bottomRight: Radius.circular(12),
|
||||
)
|
||||
: BorderRadius.only(
|
||||
topRight: Radius.circular(12),
|
||||
bottomLeft: Radius.circular(12),
|
||||
bottomRight: Radius.circular(12),
|
||||
),
|
||||
),
|
||||
child: message.isUser
|
||||
? _buildUserContent()
|
||||
: _buildAssistantContent(isThinking),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user