ListTile.divideTiles only run Iterable once (#78879)

diff --git a/packages/flutter/lib/src/material/list_tile.dart b/packages/flutter/lib/src/material/list_tile.dart
index fbdacd8..730a3f4 100644
--- a/packages/flutter/lib/src/material/list_tile.dart
+++ b/packages/flutter/lib/src/material/list_tile.dart
@@ -980,11 +980,11 @@
     assert(tiles != null);
     assert(color != null || context != null);
 
-    if (tiles.isEmpty)
-      return;
-
     final Iterator<Widget> iterator = tiles.iterator;
-    final bool isNotEmpty = iterator.moveNext();
+    final bool hasNext = iterator.moveNext();
+
+    if (!hasNext)
+      return;
 
     final Decoration decoration = BoxDecoration(
       border: Border(
@@ -1001,7 +1001,7 @@
       );
       tile = iterator.current;
     }
-    if (isNotEmpty)
+    if (hasNext)
       yield tile;
   }
 
diff --git a/packages/flutter/test/material/list_tile_test.dart b/packages/flutter/test/material/list_tile_test.dart
index 220fabb..8b4947e 100644
--- a/packages/flutter/test/material/list_tile_test.dart
+++ b/packages/flutter/test/material/list_tile_test.dart
@@ -257,6 +257,20 @@
     expect(output, isEmpty);
   });
 
+  testWidgets('ListTile.divideTiles only runs the generator once', (WidgetTester tester) async {
+    // Regression test for https://github.com/flutter/flutter/pull/78879
+    int callCount = 0;
+    Iterable<Widget> generator() sync* {
+      callCount += 1;
+      yield const Text('');
+      yield const Text('');
+    }
+
+    final List<Widget> output = ListTile.divideTiles(tiles: generator(), color: Colors.grey).toList();
+    expect(output, hasLength(2));
+    expect(callCount, 1);
+  });
+
   testWidgets('ListTileTheme', (WidgetTester tester) async {
     final Key titleKey = UniqueKey();
     final Key subtitleKey = UniqueKey();