DeepSeek开源底层组件:补国产算力地基的关键工程优化
2026/10/11 5:47:17
import'package:flutter/material.dart';/// 富文本,高亮字符classHighlightedTextextendsStatelessWidget{final String text;final List<String>keywords;//关键字final Color highlightColor;//高亮颜色final TextStyle normalStyle;//正常字体样式final TextStyle highlightStyle;//高亮字体样式final int?maxLines;final TextOverflow overflow;final TextAlign textAlign;constHighlightedText({super.key,requiredthis.text,requiredthis.keywords,this.highlightColor=Colors.red,this.normalStyle=constTextStyle(),this.highlightStyle=constTextStyle(),this.textAlign=TextAlign.start,this.maxLines,this.overflow=TextOverflow.ellipsis,});@override Widgetbuild(BuildContext context){/// 如果没有关键词,直接返回普通文本if(keywords.isEmpty||text.isEmpty){returnText(text,style:normalStyle);}/// 过滤掉空关键词final validKeywords=keywords.where((keyword)=>keyword.isNotEmpty).toList();if(validKeywords.isEmpty){returnText(text,style:normalStyle);}/// 创建正则表达式来匹配所有关键词(按长度降序排列,避免短关键词优先匹配)validKeywords.sort((a,b)=>b.length.compareTo(a.length));final pattern=RegExp(validKeywords.map((keyword)=>RegExp.escape(keyword)).join('|'),caseSensitive:false,);final matches=pattern.allMatches(text);final spans=<TextSpan>[];int lastEnd=0;/// 遍历所有匹配项for(final matchinmatches){/// 添加匹配前的普通文本if(match.start>lastEnd){spans.add(TextSpan(text:text.substring(lastEnd,match.start),style:normalStyle,));}/// 获取匹配的文本final matchedText=text.substring(match.start,match.end);/// 添加高亮的关键词 - 修复样式合并问题spans.add(TextSpan(text:matchedText,style:highlightStyle.merge(TextStyle(color:highlightColor,fontWeight:FontWeight.bold,)),));lastEnd=match.end;}/// 添加剩余的普通文本if(lastEnd<text.length){spans.add(TextSpan(text:text.substring(lastEnd),style:normalStyle,));}/// 如果没有匹配到任何关键词,返回普通文本if(spans.isEmpty){returnText(text,style:normalStyle);}returnRichText(maxLines:maxLines,overflow:overflow,textAlign:textAlign,text:TextSpan(children:spans),);}}