Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
451 views
in Technique[技术] by (71.8m points)

dart - Stacking Multiple Rows of Strings in Csv in Flutter

I have this code which should stack multiple rows one on top of another in Flutter with the CSV library.

exportCsv(List<Drink> drinksFeed, List<Alcohol> alcoholFeed
 ) async {
List<List<dynamic>> rows = List<List<dynamic>>();
for (int i = 0; i < drinksFeed.length; i++) {
  List<dynamic> row = List();
  row.add(drinksFeed[i].id);
  row.add(drinksFeed[i].name);
  row.add(drinksFeed[i].description);
  row.add(drinksFeed[i].price);
  rows.add(row);
  setState(() {
    drinksFeed = drinkFeedback;
  });

}
List<List<dynamic>> alcoholRows = List<List<dynamic>>();
for (int i = 0; i < alcoholFeed.length; i++) {
  List<dynamic> row = List();
  row.add(alcoholFeed[i].id);
  row.add(alcoholFeed[i].name);
  row.add(alcoholFeed[i].description);
  row.add(alcoholFeed[i].price);
  alcoholRows.add(row);
  setState(() {
    alcoholFeed = alcoholFeedback;
  });

}


  String drinkCsv = const ListToCsvConverter().convert(rows);
  String alcoholCsv = const ListToCsvConverter().convert(alcoholRows);
  f.writeAsString(drinkCsv);
  f.writeAsString(alcoholCsv);


}

}

As you can see, it takes each element from a list and writes it as a string, but for some reason, it isn't stacking rows on top of one another (drinkCsv and alcoholCsv), it just shows the drinksCsv elements in the CSV file. This isn't the full code, because it's too long and I don't think it's relevant to show CSV export, but this should be enough.

So my question is, is it possible to stack multiple elements one on top of another in 1 csv file (drinkCsv + alcoholCsv in this case).

question from:https://stackoverflow.com/questions/65924960/stacking-multiple-rows-of-strings-in-csv-in-flutter

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Maybe awaiting before writing again could solve the problem, also changing the mode to append so it continues writing at the end of the file

await f.writeAsString(drinkCsv);
await f.writeAsString(alcoholCsv, mode: FileMode.append);

the best solution I can come up is combining the 2 lists before doing the convert (I haven't used that ListToCsvConverter().convert() so I'm not sure how does the string result looks like)

String fileCsv = const ListToCsvConverter().convert([...rows, ...alcoholRows]); 

await f.writeAsString(fileCsv);

That way maybe the converter do the correct append between the rows when converting to string


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.9k users

...