You could consider ListView as an optimisation to the combination of SingleChildScrollView + Column.
By using ListView, only the items that are visible are mounted and painted.
On the other hand, by using SingleChildScrollView+Column, the entire item list is mounted+painted, even if only a few items are visible.
The tradeoff is that ListView is less flexible. So for complex layouts with a small number of items, the performance gain may not be worth the trouble, in which case we can use SingleChildScrollView.