如何在 flutter 中使用微光时在列表视图中显示空状态

How to show empty state in listview while using shimmer in flutter

我有一个列表视图,它是从 api 服务中获取的。我需要显示微光直到 api 响应出现,如果有数据形式 api 则显示列表视图,如果没有数据则显示空状态消息。请检查我已实施的以下代码。微光和列表项视图工作完美,但如果列表为空,我的空状态视图不显示。它显示为空白视图。

productListWidget() {
return Expanded(
        child: ListView.builder(

            itemCount: isLoading? 5 : searchedProductList.length,
            padding: EdgeInsets.only(left: 8, right: 8, top: 8, bottom: 8),
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            itemBuilder: (context, index) {
              if(isLoading){
                return productItemShimmer();
              }else {
                print(isEmptyList);
                return isEmptyList?  pItemEmpty() :productItem(searchedUnitList[index], index) ;
              }
            },

            ));

如果您的列表为空,ListView 生成器将不会生成任何子项。您应该将空测试移出列表生成器:

return Expanded(
        child: isEmptyList ? pItemEmpty() : ListView.builder(

            itemCount: isLoading? 5 : searchedProductList.length,
            padding: EdgeInsets.only(left: 8, right: 8, top: 8, bottom: 8),
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            itemBuilder: (context, index) {
              if(isLoading){
                return productItemShimmer();
              }else {
                return productItem(searchedUnitList[index], index) ;
              }
            },

            ));

此外,要根据操作状态显示不同的小部件,我建议使用 FutureBuilderhttps://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

searchedProductList.length returns 0 当列表为空时。你可以做到

Expanded(
  child: ListView.builder(
    itemCount: isLoading
        ? 5
        : searchedProductList.isEmpty
            ? 1
            : searchedProductList.length,
    itemBuilder: (context, index) {
      if (isLoading) {
        return Text("shimmer widget hereF");
      } else {
        print(searchedProductList.length);
        return searchedProductList.isEmpty
            ? Text("Empty")
            : Text("product Item $index");
      }
    },
  ),

当列表为空时,这将 return 单个小部件。