我正在尝试使用 map 从字符串中获取单词并将其映射到小部件。
我已经尝试过了,但是我的问题是母鹿和姐姐得到相同的 key ,所以我最终只得到其中一个
String theText =“我的名字是http.doe.com
的doe,我的妹妹是Selly。doe和saqil不是koiter的姐妹 friend 。”
wordsMap = Map.fromIterable(text.split(' '),
key: (v) => v,
value: (v) => TextSpan(text: v));
所以我尝试了下面的代码
Map mapMyWord = {};
// var wordsMap;
var splitForSize = text.split(' ').toList();
for(var t = 0;t<= splitForSize.length-1;t++){
mapMyWord[t] = {'$t':TextSpan(text: splitForSize[t])};
}
但是在第二个代码中,当我尝试访问
mapMyWord.values.toList()
时,它再次返回了 map 数据列表[{0: TextSpan("my")}, {1: TextSpan("name")}, {2: TextSpan("is")}, {3: TextSpan("doe")}, {4: TextSpan("````http.codeish.com````,")}, ... ,{19: TextSpan("koiter")}]
所以我的主要问题是如何从这里获取值。
最佳答案
它返回 map ,因为您正在使用以下行分配 map :
mapMyWord[t] = {'$t':TextSpan(text: splitForSize[t])};
所以最后您有了一个
Map<Int, Map<String, TextSpan>>
。如果您打算将该句子的单词转换为TextSpan列表,则可以这样:
var textSpanList = text.split(" ").map((word) => TextSpan(text: word)).toList();
如果您想直接在小部件树中执行此操作,则可以执行以下操作:
children: <Widget>[
for(var word in text.split(" "))
Text(word),
]
N.B:最后一小段需要pubspec.yaml中的最低SDK为2.2.2