#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, и это работает. Вы уверены, что правильно поняли ответ?