我正在尝试使用 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

09-26 08:27