Dart:如何将CSV数据映射到模型列表?

Dart:如何将CSV数据映射到模型列表?,csv,flutter,dart,dart-pub,Csv,Flutter,Dart,Dart Pub,比如说,在一个文件crops.csv中,我有一个简单的数据集,格式如下: id,cropType,cropName 1,food,rice 2,cash,sugarcane 3,horticulture,orange 我有一个名为foodCrops的模型类: class foodCrops { int id; String cropType; String cropName; foodCrops(this.id, this.cropType, this.cropName);

比如说,在一个文件crops.csv中,我有一个简单的数据集,格式如下:

id,cropType,cropName
1,food,rice
2,cash,sugarcane
3,horticulture,orange
我有一个名为foodCrops的模型类:

class foodCrops {
  int id;
  String cropType;
  String cropName;

  foodCrops(this.id, this.cropType, this.cropName);
}
如何将这些数据从csv文件转换为foodCrops类列表

List<foodCrops> 
列表

最简单的方法可能是将文件作为行列表读取,然后使用
map
执行转换

final crops=File.readAsLinesSync('path/to/crops.csv'))
.skip(1)//跳过标题行
.map((行){
最终零件=直线分割(',');
返回食物记录(
int.tryParse(第[0]部分),
第[1]部分,
第[2]部分:,
);
)
.toList();

在这里,我只是在解析行以生成
FoodCrop
类的实例。您可以随意解析数据

void main() {
  var foodCrops = makeFoodCropList();
  for (var foodCrop in foodCrops) {
    print(foodCrop);
  }
}

List<FoodCrop> makeFoodCropList() {
  var lines = [
    'id,cropType,cropName',
    '1,food,rice',
    '2,cash,sugarcane',
    '3,horticulture,orange',
  ];
  lines.removeAt(0); //remove column heading

  /*
  * you can use any parser for csv file,
  *
  * a csv package is available
  * or simple file reading will also get the job done main logic is coded here
  * */

  var list = <FoodCrop>[];
  for (var line in lines) list.add(FoodCrop.fromList(line.split(',')));

  return list;
}

class FoodCrop {
  int id;
  String cropType;
  String cropName;

  FoodCrop(this.id, this.cropType, this.cropName);

  FoodCrop.fromList(List<String> items) : this(int.parse(items[0]), items[1], items[2]);

  @override
  String toString() {
    return 'FoodCrop{id: $id, cropType: $cropType, cropName: $cropName}';
  }
}
void main(){
var foodCrops=makeFoodCropList();
for(foodCrop中的var foodCrop){
印刷品(foodCrop);
}
}
List makeFoodCropList(){
变量行=[
'id,cropType,cropName',
“1、食物、大米”,
“2,现金,甘蔗”,
“3,园艺,橙色”,
];
lines.removeAt(0);//删除列标题
/*
*您可以对csv文件使用任何解析器,
*
*csv软件包可用
*或者简单的文件读取也可以完成工作,主要逻辑在这里编码
* */
var列表=[];
对于(行中的变量行)list.add(FoodCrop.fromList(line.split('),'));
退货清单;
}
食品级{
int-id;
字型;
字符串cropName;
FoodCrop(this.id、this.cropType、this.cropName);
FoodCrop.fromList(列表项):这个(int.parse(项[0]),项[1],项[2]);
@凌驾
字符串toString(){
返回'FoodCrop{id:$id,cropType:$cropType,cropName:$cropName}';
}
}