繁体   English   中英

flutter - 加载搜索委托搜索列表的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM