我有一个这样的列表:
List<ProductModel> productList = [
ProductModel(name: "Oranges", date: "2023-05-01"),
ProductModel(name: "Apples", date: "2023-05-01"),
ProductModel(name: "Kiwis", date: "2023-03-01"),
];
我想使用groupBy
按日期对项目进行分组,并在Widget build
中显示如下:
2023-05-01:
Oranges
Apples
2023-03-01:
Kiwis
目前,我得到以下错误:The operator '[]' isn't defined for the type 'Object'.
我似乎无法修复它。
代码在下面。
class ProductListPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _ProductListPageState();
}
class _ProductListPageState extends State<ProductListPage> {
late StreamController<int> _postsController;
@override
void initState() {
_postsController = new StreamController();
getProducts();
super.initState();
}
void getProducts() {
Fetch.getProdcuts().then((value) => {
_postsController.add(1);
List<ProductModel> productList = [];
for (var item in value!) {
final encode = json.encode(item.toJson());
final product = ProductModel.fromJson(jsonDecode(encode));
productList.add(product);
}
//I get the error here:
var groupByDate = groupBy(productList, (obj) => obj?.date.substring(0, 10));
});
}
@override
Widget build(BuildContext context) {
//Build method here
}
class ProductModel extends Object {
String? name;
String? date;
ProductModel({this.name, this.date});
ProductModel.fromJson(Map<String, dynamic> json) {
name = json["name"];
date = json["date"];
}
Map<String, dynamic> toJson() => {
'name': name,
'date': date,
};
}
这是我也尝试过,但我得到了各种错误:var groupByDate = groupBy(value!.toList(), value.map((obj) => ProductModel.fromJson(obj)).toList());
->错误:The argument type 'List<ProductModel>' can't be assigned to the parameter type 'dynamic Function(ProductModel)'.
var groupByDate = groupBy(value!.toList(), (obj) => obj?.date.substring(0, 10).toList());
->错误:The getter 'date' isn't defined for the type 'Object'.
现在我基本上出主意了。任何帮助将不胜感激!
2条答案
按热度按时间uubf1zoe1#
dzhpxtsq2#
我为我之前回复中的疏忽道歉。似乎
groupBy()
函数没有将列表中的对象识别为ProductModel
的示例。要解决此问题,您可以尝试使用
map()
方法从JSON响应创建ProductModel
对象的新列表,如下所示:在上面的代码中,我们使用
map()
方法从value
列表中创建一个新的ProductModel
对象列表。map()
方法将提供的函数应用于列表的每个元素,并返回一个包含结果的新列表。然后,我们对
map()
方法的结果调用toList()
方法,将可迭代对象转换为ProductModel
对象的列表。最后,我们可以使用
groupBy()
函数按日期对产品进行分组。我希望这有助于解决这个问题。