Как я могу отобразить список и вернуть список строк, которые проходят мою проверку в flutter?

#list #flutter #dictionary #dart

Вопрос:

Я новичок в flutter, «данные» — это список, который получается из api , когда я печатаю «Указатель имен», он работает, но если я печатаю «станции», он не отображается. Возвращается ли вышеуказанная функция после чего?? Как я могу создать список строк из «Цветов имен» , который возвращается из функции Map.

 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;
 

результат печати(подпись)

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

Я хочу создать список из вышеперечисленных 5 строк, напечатанных на консоли. Как я могу создать его и передать при вызове функции. запрос «ят».

Ответ №1:

Поскольку вы ничего не возвращаете, если nameLower запрос не содержит , вы неявно возвращаете null , что приводит к списку с типом List<String?> вместо List<String> . Лучший способ отфильтровать список выглядит следующим образом:

 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();
 

Комментарии:

1. Не сработало , отфильтрованные станции и названия станций не печатаются, я не могу понять, почему это так. «данные» печатаются,и если я прокручиваю данные и печатаю каждое [«Имя местоположения»], оно возвращает мне строковое значение, но если я выбираю функцию map для возврата, она не работает

2. Это работает для меня там, где data есть тип List<Map<String, String>> . Каков тип data и как выглядят данные, помимо наличия свойства "stationName"

3. Я предполагаю , что данные просто неверного типа. jsonDecode просто возвращаются dynamic , поэтому я думаю, что вам нужно убедиться, что это по крайней мере List<Map<String, dynamic>>

4. пробовать List<Map<String, dynamic>>.from(jsonDecode(response.body) as List<dynamic>)

5. Я внес небольшую правку в ответ. Я попробовал это в dartpad с фактическими данными из API, и это работает. Вы уверены, что правильно поняли ответ?