toList is part of the Iterable interface; to avoid surprise I think it needs to return a normal List.

However we could do exactly as you suggest as e.g. a new "toListView" method. There's already UnmodifiableListView we can use:

http://api.dartlang.org/docs/bleeding_edge/dart_collection/UnmodifiableListView.html

My feeling though is that for most non-modifying use cases the already-implemented Iterable interface is enough; I'm not sure if an unmodifiable view adds a whole lot.