【发布时间】:2021-08-09 20:27:42
【问题描述】:
我正在使用搜索委托来实现搜索功能。使用 API 获取数据,一切似乎都正常,唯一的问题是每次我输入一个字母时,列表似乎都会重建并显示重复的结果。
您的所有帮助都将非常有用。 提前致谢。
class SearchBar extends SearchDelegate {
List<LeadModel> names = [];
List recentSearch = [];
getNames() async {
http
.get(
Uri.https('jsonplaceholder.typicode.com', 'users'),
)
.then((data) {
return json.decode(data.body);
}).then((data) {
for (var json in data) {
names.add(LeadModel.fromJson(json));
}
print(names.length);
}).catchError((e) {
print(e);
});
}
@override
List<Widget> buildActions(BuildContext context) {
return [
IconButton(
onPressed: () {
query = '';
},
icon: Icon(Icons.clear))
];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(
onPressed: () {
close(context, '');
},
icon: Icon(Icons.arrow_back));
}
@override
Widget buildResults(BuildContext context) {
return Container();
}
@override
Widget buildSuggestions(BuildContext context) {
final suggestions = names.where((name) {
return name.name.toLowerCase().contains(query.toLowerCase());
});
return FutureBuilder(
future: getNames(),
builder: (context, snapshot) {
if (query.isEmpty) return Center(child: Text(""));
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Center(child: Text(""));
default:
if (snapshot.hasError) {
return Center(child: Text(""));
} else {
names.clear();
return ListView.builder(
itemCount: suggestions.length,
itemBuilder: (context, i) {
return ListTile(
title: Text(suggestions.elementAt(i).name),
);
},
);
}
}
},
);
}
}
【问题讨论】:
标签: flutter flutter-layout flutter-dependencies