mergeIterables function
Concatenates two iterables (or wraps scalars as single-element iterables).
Items that are themselves Maps, Lists, Sets or Queues are
deep-copied so the result does not alias the inputs.
Implementation
Iterable<dynamic> mergeIterables(dynamic a, dynamic b) {
final aa = a is Iterable
? a.nonNulls.cast<dynamic>().map<dynamic>(_deepCopy)
: Iterable<dynamic>.generate(1, (_) => _deepCopy(a));
final bb = b is Iterable
? b.nonNulls.cast<dynamic>().map<dynamic>(_deepCopy)
: Iterable<dynamic>.generate(1, (_) => _deepCopy(b));
return aa.followedBy(bb).toList();
}