【发布时间】:2021-02-10 07:27:53
【问题描述】:
我正在尝试使用 PopupMenuButton 小部件从对象列表中创建过滤器。我认为逻辑是合理的,但 Flutter/Dart 似乎忽略了下面代码块中名为“fliterFavs”的函数中“if 分支”中的 return 语句。
当我选择“Favs”时,它会按预期进行识别,并且返回之前的打印语句工作正常。
当我使用相同的 return 语句代替“if 语句”之外的那个时,它可以正常工作。我得到了我期望的过滤数据集。
我什至尝试将它作为两个背靠背的 if 语句,而不是您在下面看到的嵌套语句。还是不行。
有什么想法吗?
final List<Product> favProducts = [];
Widget filterFavs(value) {
loadedProducts.forEach((i) {
if (i.isFavorite == true) {
favProducts.add(i);
if (value == "Favs") {
print(value);
return buildGrid(favProducts);
}
}
});
return buildGrid(loadedProducts);
}
Widget buildGrid(List newList) {
return GridView.builder(
padding: const EdgeInsets.all(10.0),
itemCount: newList.length,
itemBuilder: (ctx, i) => ProductItem(
newList[i].id,
newList[i].title,
newList[i].imageUrl,
),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 3 / 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyShop'),
actions: <Widget>[
PopupMenuButton(
onSelected: (val) {
filterFavs(val);
},
icon: Icon(
Icons.more_vert,
),
itemBuilder: (context) => [
PopupMenuItem(
child: Text("Favs"),
value: "Favs",
),
PopupMenuItem(
child: Text("All"),
value: "All",
),
],
),
],
),
//use a filter on the item builder
body: filterFavs(context));
}
}
【问题讨论】:
标签: flutter if-statement dart return