我正试图把我在Udemy课程中学到的东西很好地利用起来,为一个简单的假鞋店构建一个应用程序。我想在应用程序的主页面的主要功能是一个水平的ListView(因此,一个可滚动的小部件)与所谓的“热门优惠”。商店中的所有产品都实现了一个 * 鞋 * 模型类,其中包括参数,如名称,品牌,图像路径,最重要的是,一个布尔值isSpecialSale
,指定是否鞋(还有什么?))进行特别销售,因此应将其放在“热门优惠”部分。但是,我不知道如何将鞋子列表shoeListFull
过滤为onSpecialSale == True
鞋子列表,并将其部署到上述ListView中。
我有一个简单的无状态小部件,我试图在其中创建Hot Offers列表,这里命名为shoesFiltered
,但是当我在主页中将shoeList
设置为shoeListFull
(如上所述,包含所有销售的鞋子的列表)时,它没有返回任何内容。我是不是漏了什么?请注意,我还没有讲到我的课程中介绍有状态小部件的部分,所以我试图在不使用setState之类的东西的情况下工作。
class ShoeTile extends StatelessWidget {
const ShoeTile({super.key, required this.title, required this.shoeList});
final String title;
final List<Shoe> shoeList;
@override
Widget build(BuildContext context) {
return Expanded(
child: ListView.builder(
itemCount: 5,
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
for (Shoe shoe in shoeList) {
List<Shoe> shoesFiltered = [];
if (shoe.isSpecialSale) {
shoesFiltered.add(shoe);
}
}
},
),
);
}
}
3条答案
按热度按时间nfzehxib1#
您似乎错过了itemBuilder中的小部件。
你可以这样做。
bjg7j2ky2#
你当前的代码只是循环和添加项目到过滤列表。要显示某些内容,您需要返回一个widget:
y1aodyip3#
首先,您需要返回
itemBuilder
内部的一个小部件以查看结果。如果你正在使用一个已有的List,你不应该在itemBuilder中过滤它们,而应该在ListView
本身之前过滤它们。最简单的方法是: