我正在为RichText创建一个演示,其中有一个文本
文本小部件显示一个字符串'Welcome to flutter',我有一个文本字段,用于在该字符串中输入搜索词。还有一个按钮,用于显示搜索结果
我几乎已经完成了精确的单词搜索,但现在我想实现它也应该突出显示时,这个词是半输入一样,'Flut',这4个字符应该显示不同的颜色.
Widget build(BuildContext context) {
String mystring = 'Welcome to Flutter';
mywords = mystring.split(' ');
return MaterialApp(
home: Scaffold(
body: Padding(
padding: const EdgeInsets.symmetric(vertical: 30.0, horizontal: 10),
child: Column(
children: [
SizedBox(
height: 20,
),
TextField(
controller: txtsearch,
),
ElevatedButton(onPressed: (){setState(() {
});}, child: Text('Search Word in String')),
SizedBox(
height: 20,
),
SizedBox(
height: 20,
),
RichText(
text: TextSpan(
style: TextStyle(fontSize: 20, color: Colors.black),
children: mywords.map((e) {
if(e!=txtsearch.text)
return TextSpan(text: e+' ');
//and suggest me is there any other way to add space instread of the way i used
else
return TextSpan(text: e+' ',style: TextStyle(
color: Colors.blue));
}).toList(),
))
],
),
),
),
);
}
1条答案
按热度按时间ryevplcw1#
是否每个匹配都限制在一个单词上很重要,或者你真的希望每个子字符串都包含在整个字符串中?如果是第二种情况,你可以使用
String.allMatches
来找到匹配的开始和结束索引,然后从中构造一个TextSpan
小部件列表。也许可以让循环逻辑更漂亮一点。Working dartpad here。