[英]flutter - loading data for search delegate searching list
我在颤振项目中使用搜索委托。 我从 api 获取数据,然后将它们插入到某个列表中以提出搜索建议。 api 网址工作正常。 正如您将在getProductsData()
函数中看到的那样,数据已成功加载并添加到动态列表products
。 但是当我在加载后在构造函数中打印产品数据时,它会打印空列表。 我不知道为什么会这样。 这是代码示例:
class searchProducts extends SearchDelegate<String>{
List<dynamic> products = [];
searchProducts(){
getProductsData();
print("Data in the constructor");
print(products);
}
Future getProductsData() async{
var d = await http.get("http://mahmoudhelal.atwebpages.com/api/e-commerce_apis/products_api.php?fbclid=IwAR3fsifA0DO0KdhKDTke7wnVQANRy9wd9cgmmoypubXaZuQVDBNXC6Wlf5U");
var jsonData = json.decode(d.body);
for(int i = 0 ; i < jsonData.length; i++){
print("before adding "+ jsonData[i]['name']);
products.add(jsonData[i]['name']);
print("After adding "+ products[i]);
}
}
List<dynamic> history = [ 'h1', 'h2', 'h3' ];
@override
List<Widget> buildActions(BuildContext context) {
return[
IconButton(
icon: Icon(Icons.clear),
onPressed: (){
query = "nothing";
},
)
];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(
tooltip: 'Back',
icon: AnimatedIcon(
icon: AnimatedIcons.menu_arrow,
progress: transitionAnimation,
),
onPressed: () {
//Take control back to previous page
this.close(context, null);
},
);
}
@override
Widget buildResults(BuildContext context) {
return Text("Returned");
}
@override
Widget buildSuggestions(BuildContext context) {
List<dynamic> suggestionList = query.isEmpty? history : products.where((element) => element.startsWith(query));
return ListView.builder( itemCount: suggestionList.length,itemBuilder: (context, index){
return ListTile(
leading: Icon(Icons.favorite),
title: Text(suggestionList[index]),
);
});
}
}
不,该列表在构造函数中将始终为空。 尝试将其显示在
@override
Widget buildResults(BuildContext context) {
print(products.toString());
return Text("Returned");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.