Flutterにおいて、予め骨格が決まっていて中身のデータだけが違う複数のWidgetをひとまとめに扱う場合に
List.generateメソッドを使うやり方と
ListView.builderメソッドを使うやり方がありますが、
両者の違いは、
1)List.generateメソッドはWidgetに限定されない。つまり、戻り値の型はListなので、中身はWidgetに限らずStringでも何にでも使うことができ、並べ方が特定されているわけではありません。
つまり、同一クラスの複数のインスタンスをまとめて扱うだけなので並べ方はColumnやRowなどで指定する必要があります。
2)一方、ListView.builderの中身はWidgetに限定され、かつ戻り値はListViewなので縦方向か横方向に一列に並ぶWidgetになります。
3)また、List.generateでもListView.builderと同じような表示に仕方はできますが、ListViewの場合はそのリスト内でスクロールできますが、List.generateの場合はリスト内でのスクロールはできないという違いがあるので、List.generateの場合はSingleChildScrollViewなどでスクロールできるように設定しておかないと画面からオーバーフローしてしまうことがあります。
(詳しくは、以下の動画で解説していますので、よろしければご覧下さい)