From b63bcaa3c925ec1406b96570efda96f83e710b9f Mon Sep 17 00:00:00 2001 From: Xavier H Date: Wed, 23 Jun 2021 18:06:03 +0200 Subject: [PATCH] ListTile.divideTiles only run Iterable once (#78879) --- packages/flutter/lib/src/material/list_tile.dart | 10 +++++----- packages/flutter/test/material/list_tile_test.dart | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/flutter/lib/src/material/list_tile.dart b/packages/flutter/lib/src/material/list_tile.dart index fbdacd8844..730a3f4ffb 100644 --- a/packages/flutter/lib/src/material/list_tile.dart +++ b/packages/flutter/lib/src/material/list_tile.dart @@ -980,11 +980,11 @@ class ListTile extends StatelessWidget { assert(tiles != null); assert(color != null || context != null); - if (tiles.isEmpty) - return; - final Iterator 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 @@ class ListTile extends StatelessWidget { ); 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 220fabbf92..8b4947eec7 100644 --- a/packages/flutter/test/material/list_tile_test.dart +++ b/packages/flutter/test/material/list_tile_test.dart @@ -257,6 +257,20 @@ void main() { 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 generator() sync* { + callCount += 1; + yield const Text(''); + yield const Text(''); + } + + final List 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();