I am trying to populate a ListView in Flutter with different sources. So, I have two lists,

list1 = ['a', 'b', 'c']; #The list isn't of numeric type
list2 = ['2', '4'];

Now, I can combine them using the spread operator and get the following output

[a, b, c, 2, 4]

but I want the output to be like -

[a, 2, b, 4, c]

How can this be achieved? What's the most idiomatic approach?


Solution 1: Adelina

I guess this:

    List list1 = [1, 3, 5];
    List list2 = [2, 4];

    print([...list1, ...list2]..sort());


Solution 2: Spatz

Builtin Iterable has no method zip, but you can write something like:

Iterable<T> zip<T>(Iterable<T> a, Iterable<T> b) sync* {
  final ita = a.iterator;
  final itb = b.iterator;
  bool hasa, hasb;
  while ((hasa = ita.moveNext()) | (hasb = itb.moveNext())) {
    if (hasa) yield ita.current;
    if (hasb) yield itb.current;
  }
}

then use zip

  final list1 = ['a', 'b', 'c'];
  final list2 = ['2', '4'];
  final res = zip(list1, list2);
  print(res); // (a, 2, b, 4, c)