【问题标题】:How can I map through the list and return a list of Strings that pass my validation in flutter?如何映射列表并返回通过我的验证的字符串列表?
【发布时间】:2021-10-08 15:19:46
【问题描述】:

我是颤振的初学者,“数据”是从 api 获取的列表,当我打印“nameLower”时,它可以工作,但如果我打印“站”,它不会显示。上面的函数是在什么之后返回的??如何从 Map 函数返回的 "nameLowers" 创建字符串列表。

static Future<List<String>> getName(String query) async {
    final data = await NetworkHelper(url: "http://34.93.58.35:3000/getStations")
        .convert2lkr();


   List<String> stations =  data.map((val){
      final queryLower = query.toLowerCase();
      final nameLower = val["stationName"].toLowerCase();
      if(nameLower.contains(queryLower)){
        print(nameLower);
        return nameLower;
      }
    }).toList();

    stations.add("Yata");
    print(stations);
    return stations;

打印结果(nameLower)

I/flutter (19774): diyatalawa
I/flutter (19774): yatagama
I/flutter (19774): yatawara
I/flutter (19774): yatirawana
I/flutter (19774): yattalgoda

我想创建一个打印在控制台上的上述 5 个字符串的列表。我如何创建它并在调用函数时传递它。查询是“yat”。

【问题讨论】:

    标签: list flutter dictionary dart


    【解决方案1】:

    由于如果nameLower 不包含查询,则您不会返回任何内容,因此您将隐式返回null,从而生成类型为List&lt;String?&gt; 的列表而不是List&lt;String&gt;。过滤列表的更好方法如下:

    final queryLower = query.toLowerCase();
    final stationNames = data.map((e) => e["stationName"]!.toLowerCase());
    final filteredStations = stationNames.where((name) => name.contains(queryLower));
    print(filteredStations);
    return filteredStations.toList();
    

    【讨论】:

    • 不工作,过滤站和站名没有打印出来,我不明白为什么会这样。 'data' 正在打印,如果我循环遍历数据并打印每个 ['stationName'],它会返回一个字符串值,但如果我选择 map 函数返回它不起作用
    • 这适用于data 的类型为List&lt;Map&lt;String, String&gt;&gt; 的我。 data 的类型是什么,数据是什么样的,除了属性"stationName"
    • 我猜数据根本就不是正确的类型。jsonDecode 只是返回dynamic,所以我认为你需要确保它至少是List&lt;Map&lt;String, dynamic&gt;&gt;
    • 试试List&lt;Map&lt;String, dynamic&gt;&gt;.from(jsonDecode(response.body) as List&lt;dynamic&gt;)
    • 我对答案做了一个小的修改。我在 dartpad 中使用来自 API 的实际数据进行了尝试,它可以工作。你确定你正确地实现了答案吗?
    猜你喜欢
    • 2012-03-15
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2021-01-18
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多