首页 > 解决方案 > 在颤动中从地图中获取项目

问题描述

我正在尝试使用地图从字符串中获取单词并将它们映射到小部件。我已经尝试过了,但我的问题是 doe 和妹妹这两个词的键得到相同的键,所以我最终只得到其中一个

String theText = "我的名字叫 doe from http.doe.com,我的妹妹是selly。doe 和 saqil 不是 koiter 的姐妹朋友。";

  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()它时,它再次返回了地图数据列表

[{0: TextSpan("my")}, {1: TextSpan("name")}, {2: TextSpan("is")}, {3: TextSpan("doe")}, {4: TextSpan("````http.codeish.com````,")}, ... ,{19: TextSpan("koiter")}]

所以我的主要问题是如何从这里获取值。

标签: flutterdart

解决方案


它返回地图,因为您正在使用此行分配地图:

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),
]

注意:最后一个片段需要 pubspec.yaml 中的最低 SDK 2.2.2


推荐阅读