【发布时间】:2019-11-23 11:51:05
【问题描述】:
我有一组 List> 数据,其中包含产品的名称、数量和日期。我将数据传递到列表视图构建器中,以呈现为每个产品的卡片列表。
产品列表通过:
[{名称:产品1,金额:24.5,日期:2019-07-14 00:00:00.000},{名称: 产品2,金额:29.5,日期:2019-07-14 00:00:00.000},{名称:产品3, 金额:29.5,日期:2019-07-15 00:00:00.000}]
列表视图工作正常,但是我正在尝试添加一个函数,列表视图按创建日期过滤产品。为此,我通过日期时间选择器传递一个日期(使用 setState,默认值为 DateTime.now()),并将产品日期与日期时间选择器中选择的日期进行比较。
请在下面找到代码:
import 'package:flutter/material.dart';
import 'package:learning_app/product.dart';
import 'package:intl/intl.dart';
class BuildProduct extends StatelessWidget {
final List<Map<String, dynamic>> products;
final Function updateProduct;
final DateTime selectedDate;
Tasks(this.products, this.updateProduct, this.selectedDate);
Widget _buildCard() {
DateTime _currentDate = DateTime.now();
Widget ProductCard = Center(
child: Text('No Products added'),
);
if (products.length > 0) {
ProductCard = ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: products.length,
itemBuilder: (BuildContext context, int index) {
print("Product List: " + products.toString());
print("Product Name: " + products[index]['name'].toString());
print("Product Date: " + products[index]['date'].toString());
print("Selected Date: " + selectedDate.toString());
if(DateFormat.yMMMd().format(products[index]['date']) ==
DateFormat.yMMMd().format(selectedDate)) {
return ProductCard(products[index], index, updateProduct);
}
}
);
}
return ProductCard;
}
@override
Widget build(BuildContext context) {
return _buildCard();
}
}
代码的问题是,如果我为新产品(即第三个产品)选择不同的日期,listview 构建器不会将它带入循环,更糟糕的是,当我将新日期作为循环中的产品减1。请在下面找到打印语句以供参考(代码中的那个)
当页面以默认日期打开时:
I/flutter (11152): Product List: [{name: Product 1, amount: 24.5, date: 2019-07-14 00:00:00.000}, {name: Product 2, amount: 29.5, date: 2019-07-14 00:00:00.000}, {name: Product 3, amount: 29.5, date: 2019-07-15 00:00:00.000}]
I/flutter (11152): Product Name: Product 1
I/flutter (11152): Product Date: 2019-07-14 20:13:05.838550
I/flutter (11152): Selected Date: 2019-07-14 20:15:32.687104
I/flutter (11152): Product List: //same list as above
I/flutter (11152): Product Name: Product 2
I/flutter (11152): Product Date: 2019-07-14 20:13:32.398186
I/flutter (11152): Selected Date: 2019-07-14 20:15:32.687104
I/flutter (11152): Product List: //same list as above
I/flutter (11152): Product Name: Product 3
I/flutter (11152): Product Date: 2019-07-15 00:00:00.000
I/flutter (11152): Selected Date: 2019-07-14 20:15:32.687104
当我选择另一个日期(即 2019-07-15)时:
I/flutter (11152): Product List: [{name: Product 1, amount: 24.5, date: 2019-07-14 00:00:00.000}, {name: Product 2, amount: 29.5, date: 2019-07-14 00:00:00.000}, {name: Product 3, amount: 29.5, date: 2019-07-15 00:00:00.000}]
I/flutter (11152): Product Name: Product 1
I/flutter (11152): Product Date: 2019-07-14 20:13:05.838550
I/flutter (11152): Selected Date: 2019-07-15 12:00:00.000Z
I/flutter (11152): Product List: //same list as above
I/flutter (11152): Product Name: Product 2
I/flutter (11152): Product Date: 2019-07-14 20:13:32.398186
I/flutter (11152): Selected Date: 2019-07-15 12:00:00.000Z7104
我只想在选择日期时呈现与所选日期相同的产品(卡片)。请帮助我找到实现中的错误或提出更好的方法来实现目标。任何帮助表示赞赏,谢谢:)
【问题讨论】:
-
为什么不直接比较
DateTime对象呢?你为什么要把它格式化成字符串?