#flutter #search
#flutter #Поиск
Вопрос:
Я работаю над страницей поиска в flutter, но у меня продолжает появляться ошибка — «Ожидалось значение типа «Виджет», но получено значение типа «Строка». Вот мой код. Я следил за видео на YouTube https://www.youtube.com/watch?v=H3CCtCmBUoQamp;ab_channel=1ManStartup , но не могу заставить это работать. Кто-нибудь посмотрит на мой код и скажет мне, что с ним не так?
//part of statefulWidget
class _DataSearchState extends State<DataSearch> {
TextEditingController _searchController = TextEditingController();
List allfields = ['A', 'B', 'C', 'D', 'E'];
List aafields = [ 'A', 'B'];
List abfields = [ 'C', 'D', 'E'];
List resultsList = [];
@override
void initState() {
super.initState();
_searchController.addListener(_onSearchChanged);
}
@override
void dispose() {
_searchController.removeListener(_onSearchChanged);
_searchController.dispose();
super.dispose();
}
_onSearchChanged() {
searchResultsList();
}
searchResultsList() {
var showResults = [];
if (_searchController.text != "") {
for (var e in allfields) {
if (e.contains(_searchController.text)) {
showResults.add(e);
}
}
} else {
showResults = List.from(allfields);
}
setState(() {
resultsList = showResults;
});
}
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
TextField(
controller: _searchController,
decoration: InputDecoration(prefixIcon: Icon(Icons.search)),
),
),
ListView.builder(
itemCount: resultsList.length,
itemBuilder: (BuildContext context, int ndx) {
return ListTile(
title: resultsList[ndx],
onTap: () {
//
});
}
}
Вот скриншот страницы с ошибкой https://i.stack.imgur.com/NBEZb.jpg
Ответ №1:
Это связано с тем, что title
параметр ListTile
ожидает a Widget
и вместо этого вы передали a String
. Измените код на этот.
return ListTile(
title: Text(resultsList[ndx]),
onTap: () {
onTileTapped(ndx);
});