【问题标题】:Create List<Dynamic> from List<Stuff>从 List<Stuff> 创建 List<Dynamic>
【发布时间】:2021-05-22 22:11:18
【问题描述】:

我正在尝试使用 List&lt;Stuff&gt; 类型列表创建一个 .csv 文件。为了使用ListToCsvConverter(),我需要一个List&lt;Dynamic&gt;

如何将List&lt;Stuff&gt; 转换为List&lt;Dynamic&gt;,以便可以使用ListToCsvConverter() 将其转换为.csv?

“Stuff”模型如下:

class Stuff { 
  int id;
  String stuffType; 
  String stuffSize; 
  String stuffTime;
  Stuff({this.id, this.stuffType, this.stuffSize, this.stuffTime});
}

【问题讨论】:

    标签: list flutter csv file dart


    【解决方案1】:

    发布明确的答案供人们查看。

    初始列表是“stuffList”。

    如何将 List&lt;Stuff&gt; 转换为 List&lt;Dynamic&gt; 以便可以使用 ListToCsvConverter() 将其转换为 .csv?

    //Create a new dynamic list
    List<List<dynamic>> rows = List<List<dynamic>>(); 
    
    //Convert stuffList to List<List<dynamic>>
      for (int i = 0; i < listStuff.length; i++) {
          List<dynamic> row = List();
          row.add(listStuff[i].id);
          row.add(listStuff[i].stuffType);
          row.add(listStuff[i].stuffSize);
          row.add(listStuff[i].stuffTime);
          rows.add(row);
        }
    
    //convert the list to csv
    final csv = const ListToCsvConverter().convert(rows);
    

    【讨论】:

      【解决方案2】:

      您的问题是 ListToCsvConverter() 不接受 List&lt;Stuff&gt; 而是接受 List&lt;List&lt;dynamic&gt;&gt;

      第一级List 是您的csv 的行列表,而第二级List 是每行中的单元格列表。

      我在您的 Stuff 类中添加了一个 getter csvRow 并在调用 ListToCsvConverter() 之前映射到行:

      完整源代码:

      import 'package:faker/faker.dart';
      import 'package:csv/csv.dart';
      
      void main() {
        String csv = const ListToCsvConverter()
            .convert(stuffList.map((stuff) => stuff.csvRow).toList());
        print(csv);
      }
      
      class Stuff {
        int id;
        String stuffType;
        String stuffSize;
        String stuffTime;
        Stuff({this.id, this.stuffType, this.stuffSize, this.stuffTime});
      
        List<dynamic> get csvRow => [id, stuffType, stuffSize, stuffTime];
      }
      
      final faker = Faker();
      final stuffList = List.generate(
          100,
          (index) => Stuff(
                id: faker.randomGenerator.integer(999999, min: 100000),
                stuffType: faker.person.name(),
                stuffSize: '${faker.randomGenerator.integer(1000)}MB',
                stuffTime: faker.date.toString(),
              ));
      

      【讨论】:

      • 感谢您的澄清。我今天头昏脑胀,无法理解代码。什么是“冒牌货”?我已经有一个 List
      • Faker 只是一个生成随机数据的包。参考:pub.dev/packages/faker
      • 好的,所以您只是将 List 生成为“stuffList”,对吗?你能在这里解释小写的“东西”吗? stuffList.map((东西)
      • map 正在对列表 (stuffList) 的每个元素 (stuff) 应用一个函数并返回一个Iterable。你应该花一些时间学习 Dart 和 Flutter。我推荐 Andrea Bizzotto,例如他的 Dart 语言完整课程:udemy.com/course/complete-dart-guide
      • 我在问在这种特定情况下小写的“东西”是什么。我们还没有实例化任何称为“东西”的东西。一个通用的 Flutter/Dart 课程对我解释什么是任意值“东西”没有任何帮助。
      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2021-03-25
      • 2021-05-20
      • 2020-09-04
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多