Home > Software design >  How to map data from api in flutter?
How to map data from api in flutter?

Time:12-07

I have a response from Api, like this(data['list']):

[
  {
    id: 19d4ab3b8d64c,
    score: 70,
    startTime: null,
  },
  {
    id: 91e42b080ed6,
    score: 55,
    startTime: null,
  }
]

And I want to map data from data api to be like this:

List<TimeSeriesValues> data = [
  TimeSeriesValues(DateTime(2022, 2, 1, 00, 00), 30), // DateTime = startTime, 30 = score
  TimeSeriesValues(DateTime(2022, 2, 2, 23, 59), 80), // DateTime = startTime, 80 = score
];

But is startTime is null than we get current time and then add 24 hours duration to next element of data.

I tried to make it, but it looks bad, like this:

List<TimeSeriesValues> list = [];

if (data['list'][0]['startTime'] == null) {
  list.add(TimeSeriesValues(DateTime.now(), int.parse(data['list'][0]['score'])));
} else {
  list.add(TimeSeriesValues(data['list'][0]['startTime'], 0));
}

if (data['list'][1]['startTime'] == null) {
  list.add(TimeSeriesValues(DateTime(2022, 2, 1, 00, 00).add(const Duration(hours: 24)), int.parse(data['list'][1]['score'])));
} else {
  list.add(TimeSeriesValues(data['list'][1]['startTime'], 0));
}

I want to improve it, how can I do this?

CodePudding user response:

You can try this:

List<TimeSeriesValues> result = (data["list"] as List)
    .mapIndexed(
        (index, e) => TimeSeriesValues(e["startTime"] ?? DateTime.now().add(Duration(hours: index * 24)), int.parse(e['score'])))
    .toList();

CodePudding user response:

Try this:

List<TimeSeriesValues> list = data['list'].map((e){
  if (e['startTime'] == null){
      list.add(TimeSeriesValues(DateTime.now(), int.parse(e['score'])));
  } else{
    list.add(TimeSeriesValues(DateTime.parse(e['startTime']), 0));
  }
});
  • Related