【问题标题】:How to generate a list of map like {'day': day, 'amount': 0.0} in dart如何在飞镖中生成像 {'day': day, 'amount': 0.0} 这样的地图列表
【发布时间】:2022-01-10 13:36:49
【问题描述】:

从交易列表中生成列表

我有一个 dart 代码包含我要打印的交易列表 像 {'day': day, 'amount': 0.0} 的地图与交易列表中前三天的数据

    import 'package:intl/intl.dart';

class Transaction {
  final double amount;
  final DateTime date;

  Transaction({required this.amount, required this.date});
}

void main() {
  List<Transaction> transaction = [
    Transaction(
      amount: 100,
      date: DateTime.now().subtract(Duration(days: 2)),
    ),
    Transaction(
      amount: 200,
      date: DateTime.now().subtract(Duration(days: 1)),
    ),
    Transaction(
      amount: 100,
      date: DateTime.now(),
    ),
    Transaction(
      amount: 300,
      date: DateTime.now(),
    ),
    Transaction(
      amount: 100,
      date: DateTime.now(),
    ),
    Transaction(
      amount: 350,
      date: DateTime.now().subtract(Duration(days: 5)),
    ),
  ];


}

【问题讨论】:

    标签: list class dictionary dart


    【解决方案1】:

    最简单的方法是在Transaction 上创建一个将Transaction 转换为Map&lt;String, dynamic&gt; 的方法:

    class Transaction {
      final double amount;
      final DateTime date;
    
      Transaction({required this.amount, required this.date});
    
      Map<String, dynamic> toMap() => <String, dynamic>{
            'date': date,
            'amount': amount,
          };
    }
    

    然后您可以执行以下操作,先筛选出您要转换的交易,然后再进行转换:

      final datetimeNow = DateTime.now();
      List<Map<String, dynamic>> transactionsAsMaps = transactions
          .where(
              (transaction) => datetimeNow.difference(transaction.date).inDays <= 3)
          .map((transaction) => transaction.toMap())
          .toList();
    

    一个完整的运行示例可以在这里找到:

    class Transaction {
      final double amount;
      final DateTime date;
    
      Transaction({required this.amount, required this.date});
    
      Map<String, dynamic> toMap() => <String, dynamic>{
            'date': date,
            'amount': amount,
          };
    }
    
    void main() {
      List<Transaction> transactions = [
        Transaction(
          amount: 100,
          date: DateTime.now().subtract(Duration(days: 2)),
        ),
        Transaction(
          amount: 200,
          date: DateTime.now().subtract(Duration(days: 1)),
        ),
        Transaction(
          amount: 100,
          date: DateTime.now(),
        ),
        Transaction(
          amount: 300,
          date: DateTime.now(),
        ),
        Transaction(
          amount: 100,
          date: DateTime.now(),
        ),
        Transaction(
          amount: 350,
          date: DateTime.now().subtract(Duration(days: 5)),
        ),
      ];
    
      final datetimeNow = DateTime.now();
      List<Map<String, dynamic>> transactionsAsMaps = transactions
          .where(
              (transaction) => datetimeNow.difference(transaction.date).inDays <= 3)
          .map((transaction) => transaction.toMap())
          .toList();
    
      transactionsAsMaps.forEach(print);
      // {date: 2022-01-08 15:56:24.924579, amount: 100.0}
      // {date: 2022-01-09 15:56:24.924579, amount: 200.0}
      // {date: 2022-01-10 15:56:24.924579, amount: 100.0}
      // {date: 2022-01-10 15:56:24.924579, amount: 300.0}
      // {date: 2022-01-10 15:56:24.924579, amount: 100.0}
    }
    

    【讨论】:

    • 没关系,可以帮助解决一个问题。也就是说,我可以从 DateTime.now() 获得与前三天相同格式的地图;
    • @IrshadKP 我不明白你想要什么?请更新您的问题,以便准确显示您想要的内容。
    • @IrshadKP 已更新,因此解决方案现在仅输出过去三天。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多