Представьте себе, во многих "подобных" языках есть операции для фильтрации массивов типа list.filter(...). Эти операции возвращают такой же массив, но не Dart, нет. Там для фильтрации используется конструкция list.where(), которая возвращает не массив (List), а WhereIterable, и поэтому конструкция типа List newList = oldList.where() - нелегитимна!!
Вчера эта операция выбрасывала ошибку у меня в таком насыщенном месте, что наверное час потратил, пока понял, что проблема - в особенности языка.
Но в целом жить можно. Это скорее шероховатости, которые удивляют. Блин, уже много лет все вокруг после фильтрации возвращают тот же тип данных по умолчанию - этим же, нет, надо было вернуть другой.
Короче, вот из-за таких вещей я и психанул летом 2016, когда с Java пересаживали на Xamarin С#. Если писать что-то простое - все языки одинаковы и учатся за один вечер. Если нужно срочно в напряженной обстановке перетаскивать рабочий проект - вы горькими словами проклянете все эти нюансы, которые разработчики языков, кажется, специально придумывают, чтобы поржать над теми, кто слишком гордится знанием языков.