diff --git a/analysis_options.yaml b/analysis_options.yaml index 9a6e73132da..2d88eb71236 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -216,7 +216,7 @@ linter: # - unsafe_html # not yet tested - use_full_hex_values_for_flutter_colors # - use_function_type_syntax_for_parameters # not yet tested - # - use_is_even_rather_than_modulo # not yet tested + - use_is_even_rather_than_modulo # - use_key_in_widget_constructors # not yet tested - use_late_for_private_fields_and_variables # - use_raw_strings # not yet tested diff --git a/dev/benchmarks/complex_layout/lib/main.dart b/dev/benchmarks/complex_layout/lib/main.dart index 69d6b133f70..61d4ae0a576 100644 --- a/dev/benchmarks/complex_layout/lib/main.dart +++ b/dev/benchmarks/complex_layout/lib/main.dart @@ -111,7 +111,7 @@ class ComplexLayoutState extends State { key: const Key('complex-scroll'), // this key is used by the driver test controller: ScrollController(), // So that the scroll offset can be tracked itemBuilder: (BuildContext context, int index) { - if (index % 2 == 0) + if (index.isEven) return FancyImageItem(index, key: PageStorageKey(index)); else return FancyGalleryItem(index, key: PageStorageKey(index)); diff --git a/dev/benchmarks/macrobenchmarks/lib/src/multi_widget_construction.dart b/dev/benchmarks/macrobenchmarks/lib/src/multi_widget_construction.dart index b21bd7550e1..19cf4b8e172 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/multi_widget_construction.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/multi_widget_construction.dart @@ -70,7 +70,7 @@ class _MultiWidgetConstructTableState extends State // This implementation rebuild the widget tree for every // frame, and is intentionally designed of poor performance // for benchmark purposes. - return counter % 2 == 0 + return counter.isEven ? Container( // This key forces rebuilding the element key: ValueKey(widgetCounter + label), diff --git a/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart b/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart index b91754baf67..a0c2a213f62 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/picture_cache.dart @@ -132,7 +132,7 @@ class ListItem extends StatelessWidget { ), ), Image.asset( - index % 2 == 0 ? 'food/butternut_squash_soup.png' : 'food/cherry_pie.png', + index.isEven ? 'food/butternut_squash_soup.png' : 'food/cherry_pie.png', package: 'flutter_gallery_assets', fit: BoxFit.cover, width: 110, diff --git a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_child_layers.dart b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_child_layers.dart index 56672a075ba..404693e14ea 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/web/bench_child_layers.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/web/bench_child_layers.dart @@ -69,7 +69,7 @@ class BenchUpdateManyChildLayers extends SceneBuilderRecorder { final double offsetY = row * cellSize.height; // Retain every other layer, so we exercise the update path 50% of the // time and the retain path the other 50%. - final bool shouldRetain = oldLayer != null && (row + col) % 2 == 0; + final bool shouldRetain = oldLayer != null && (row + col).isEven; if (shouldRetain) { sceneBuilder.addRetained(oldLayer); } else { diff --git a/dev/benchmarks/microbenchmarks/lib/language/sync_star_semantics_bench.dart b/dev/benchmarks/microbenchmarks/lib/language/sync_star_semantics_bench.dart index 703aad9ed09..a11a6422d8e 100644 --- a/dev/benchmarks/microbenchmarks/lib/language/sync_star_semantics_bench.dart +++ b/dev/benchmarks/microbenchmarks/lib/language/sync_star_semantics_bench.dart @@ -21,7 +21,7 @@ void main() { data.add( InlineSpanSemanticsInformation(words[i], isPlaceholder: false), ); - } else if (i % 2 == 0) { + } else if (i.isEven) { data.add( InlineSpanSemanticsInformation(words[i], isPlaceholder: true), ); diff --git a/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart b/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart index 1350949bf29..fa5c44a93d2 100644 --- a/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart +++ b/dev/benchmarks/microbenchmarks/lib/stocks/layout_bench.dart @@ -46,7 +46,7 @@ Future main() async { watch.start(); while (watch.elapsed < kBenchmarkTime) { - renderView.configuration = (iterations % 2 == 0) ? big : small; + renderView.configuration = iterations.isEven ? big : small; await tester.pumpBenchmark(Duration(milliseconds: iterations * 16)); iterations += 1; } diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart index d96e03cdb2b..bb8e19d0bae 100644 --- a/dev/devicelab/lib/tasks/perf_tests.dart +++ b/dev/devicelab/lib/tasks/perf_tests.dart @@ -1376,7 +1376,7 @@ class ReportedDurationTest { class ListStatistics { factory ListStatistics(Iterable data) { assert(data.isNotEmpty); - assert(data.length % 2 == 1); + assert(data.length.isOdd); final List sortedData = data.toList()..sort(); return ListStatistics._( sortedData.first, diff --git a/dev/integration_tests/flutter_gallery/lib/demo/shrine/supplemental/asymmetric_view.dart b/dev/integration_tests/flutter_gallery/lib/demo/shrine/supplemental/asymmetric_view.dart index c34af1e4f67..147b7a2773a 100644 --- a/dev/integration_tests/flutter_gallery/lib/demo/shrine/supplemental/asymmetric_view.dart +++ b/dev/integration_tests/flutter_gallery/lib/demo/shrine/supplemental/asymmetric_view.dart @@ -28,7 +28,7 @@ class AsymmetricView extends StatelessWidget { return List.generate(_listItemCount(products.length), (int index) { double width = .59 * MediaQuery.of(context).size.width; Widget column; - if (index % 2 == 0) { + if (index.isEven) { /// Even cases final int bottom = _evenCasesIndex(index); column = TwoProductCardColumn( diff --git a/packages/flutter/lib/src/animation/animation_controller.dart b/packages/flutter/lib/src/animation/animation_controller.dart index a67f8aedebf..03016b86f73 100644 --- a/packages/flutter/lib/src/animation/animation_controller.dart +++ b/packages/flutter/lib/src/animation/animation_controller.dart @@ -864,7 +864,7 @@ class _RepeatingSimulation extends Simulation { final double totalTimeInSeconds = timeInSeconds + _initialT; final double t = (totalTimeInSeconds / _periodInSeconds) % 1.0; - final bool _isPlayingReverse = (totalTimeInSeconds ~/ _periodInSeconds) % 2 == 1; + final bool _isPlayingReverse = (totalTimeInSeconds ~/ _periodInSeconds).isOdd; if (reverse && _isPlayingReverse) { directionSetter(_AnimationDirection.reverse); diff --git a/packages/flutter/lib/src/material/mergeable_material.dart b/packages/flutter/lib/src/material/mergeable_material.dart index 1d089a9f424..a548d4e9b10 100644 --- a/packages/flutter/lib/src/material/mergeable_material.dart +++ b/packages/flutter/lib/src/material/mergeable_material.dart @@ -711,7 +711,7 @@ class _RenderMergeableMaterialListBody extends RenderListBody { while (child != null) { final ListBodyParentData childParentData = child.parentData! as ListBodyParentData; final Rect rect = (childParentData.offset + offset) & child.size; - if (i % 2 == 0) + if (i.isEven) _paintShadows(context.canvas, rect); child = childParentData.nextSibling; diff --git a/packages/flutter/lib/src/rendering/rotated_box.dart b/packages/flutter/lib/src/rendering/rotated_box.dart index 7527e23f85c..f3835b3f820 100644 --- a/packages/flutter/lib/src/rendering/rotated_box.dart +++ b/packages/flutter/lib/src/rendering/rotated_box.dart @@ -42,7 +42,7 @@ class RenderRotatedBox extends RenderBox with RenderObjectWithChildMixin quarterTurns % 2 == 1; + bool get _isVertical => quarterTurns.isOdd; @override double computeMinIntrinsicWidth(double height) { diff --git a/packages/flutter/test/foundation/caching_iterable_test.dart b/packages/flutter/test/foundation/caching_iterable_test.dart index 82a0a6428a6..0b496d31296 100644 --- a/packages/flutter/test/foundation/caching_iterable_test.dart +++ b/packages/flutter/test/foundation/caching_iterable_test.dart @@ -55,7 +55,7 @@ void main() { final Iterable integers = CachingIterable(range(1, 5).iterator); expect(yieldCount, equals(0)); - final Iterable evens = integers.where((int i) => i % 2 == 0); + final Iterable evens = integers.where((int i) => i.isEven); expect(yieldCount, equals(0)); expect(evens.first, equals(2)); diff --git a/packages/flutter/test/widgets/automatic_keep_alive_test.dart b/packages/flutter/test/widgets/automatic_keep_alive_test.dart index eb06529a41a..68b6b52776b 100644 --- a/packages/flutter/test/widgets/automatic_keep_alive_test.dart +++ b/packages/flutter/test/widgets/automatic_keep_alive_test.dart @@ -515,7 +515,7 @@ void main() { addSemanticIndexes: false, itemCount: 250, itemBuilder: (BuildContext context, int index) { - if (index % 2 == 0) { + if (index.isEven) { return _AlwaysKeepAlive( key: GlobalObjectKey<_AlwaysKeepAliveState>(index), ); diff --git a/packages/flutter/test/widgets/list_view_viewporting_test.dart b/packages/flutter/test/widgets/list_view_viewporting_test.dart index f14023dc68e..2a0e0607d78 100644 --- a/packages/flutter/test/widgets/list_view_viewporting_test.dart +++ b/packages/flutter/test/widgets/list_view_viewporting_test.dart @@ -509,7 +509,7 @@ void main() { itemBuilder: (_, int i) => Container( height: 200.0, width: 200.0, - color: i % 2 == 0 ? Colors.black : Colors.red, + color: i.isEven ? Colors.black : Colors.red, ), ), ), diff --git a/packages/flutter/test/widgets/page_view_test.dart b/packages/flutter/test/widgets/page_view_test.dart index ded04317b1b..c37c83950ba 100644 --- a/packages/flutter/test/widgets/page_view_test.dart +++ b/packages/flutter/test/widgets/page_view_test.dart @@ -393,7 +393,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 200.0, - color: index % 2 == 0 + color: index.isEven ? const Color(0xFF0000FF) : const Color(0xFF00FF00), child: Text(kStates[index]), @@ -499,7 +499,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 200.0, - color: index % 2 == 0 + color: index.isEven ? const Color(0xFF0000FF) : const Color(0xFF00FF00), child: Text(kStates[index]), @@ -543,7 +543,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 200.0, - color: index % 2 == 0 + color: index.isEven ? const Color(0xFF0000FF) : const Color(0xFF00FF00), child: Text(kStates[index]), @@ -576,7 +576,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 200.0, - color: index % 2 == 0 + color: index.isEven ? const Color(0xFF0000FF) : const Color(0xFF00FF00), child: Text(kStates[index]), @@ -615,7 +615,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 200.0, - color: index % 2 == 0 + color: index.isEven ? const Color(0xFF0000FF) : const Color(0xFF00FF00), child: Text(index.toString()), diff --git a/packages/flutter/test/widgets/scrollable_dispose_test.dart b/packages/flutter/test/widgets/scrollable_dispose_test.dart index e0bdc0afb6c..83eff9811b0 100644 --- a/packages/flutter/test/widgets/scrollable_dispose_test.dart +++ b/packages/flutter/test/widgets/scrollable_dispose_test.dart @@ -49,7 +49,7 @@ void main() { controller: controller, itemBuilder: (BuildContext context, int index) { return Container( - color: index % 2 == 0 ? Colors.red : Colors.green, + color: index.isEven ? Colors.red : Colors.green, height: 200.0, child: Text('Hello $index'), ); diff --git a/packages/flutter/test/widgets/semantics_keep_alive_offstage_test.dart b/packages/flutter/test/widgets/semantics_keep_alive_offstage_test.dart index dbd701fecb6..8ea0cc17658 100644 --- a/packages/flutter/test/widgets/semantics_keep_alive_offstage_test.dart +++ b/packages/flutter/test/widgets/semantics_keep_alive_offstage_test.dart @@ -99,7 +99,7 @@ Widget _buildTestWidget({ controller: controller, children: List.generate(10, (int i) { return Container( - color: i % 2 == 0 ? Colors.red : Colors.blue, + color: i.isEven ? Colors.red : Colors.blue, height: 250.0, child: Text('Item $i'), ); diff --git a/packages/flutter/test/widgets/slivers_appbar_floating_pinned_test.dart b/packages/flutter/test/widgets/slivers_appbar_floating_pinned_test.dart index 36500394599..e149c8fa944 100644 --- a/packages/flutter/test/widgets/slivers_appbar_floating_pinned_test.dart +++ b/packages/flutter/test/widgets/slivers_appbar_floating_pinned_test.dart @@ -72,7 +72,7 @@ void main() { (BuildContext _, int index) { return Container( height: 100.0, - color: index % 2 == 0 ? Colors.red : Colors.yellow, + color: index.isEven ? Colors.red : Colors.yellow, child: Text('Tile $index'), ); }, diff --git a/packages/flutter/test/widgets/slivers_test.dart b/packages/flutter/test/widgets/slivers_test.dart index 17bb093061a..30a1467e3d4 100644 --- a/packages/flutter/test/widgets/slivers_test.dart +++ b/packages/flutter/test/widgets/slivers_test.dart @@ -889,10 +889,10 @@ void main() { (BuildContext context, int index) { return Container( child: Material( - color: index % 2 == 0 ? Colors.yellow : Colors.red, + color: index.isEven ? Colors.yellow : Colors.red, child: InkWell( onTap: () { - index % 2 == 0 ? firstTapped++ : secondTapped++; + index.isEven ? firstTapped++ : secondTapped++; }, child: Text('Index $index'), ), diff --git a/packages/flutter/test/widgets/transformed_scrollable_test.dart b/packages/flutter/test/widgets/transformed_scrollable_test.dart index 5f78398d9bb..efeb696b5e6 100644 --- a/packages/flutter/test/widgets/transformed_scrollable_test.dart +++ b/packages/flutter/test/widgets/transformed_scrollable_test.dart @@ -26,7 +26,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 100.0, - color: index % 2 == 0 ? Colors.blue : Colors.red, + color: index.isEven ? Colors.blue : Colors.red, child: Text('Tile $index'), ); }, @@ -70,7 +70,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 100.0, - color: index % 2 == 0 ? Colors.blue : Colors.red, + color: index.isEven ? Colors.blue : Colors.red, child: Text('Tile $index'), ); }, @@ -114,7 +114,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 100.0, - color: index % 2 == 0 ? Colors.blue : Colors.red, + color: index.isEven ? Colors.blue : Colors.red, child: Text('Tile $index'), ); }, @@ -156,7 +156,7 @@ void main() { itemBuilder: (BuildContext context, int index) { return Container( height: 100.0, - color: index % 2 == 0 ? Colors.blue : Colors.red, + color: index.isEven ? Colors.blue : Colors.red, child: Text('Tile $index'), ); }, diff --git a/packages/flutter_test/test/event_simulation_test.dart b/packages/flutter_test/test/event_simulation_test.dart index 91fefce391a..38cdd8faebd 100644 --- a/packages/flutter_test/test/event_simulation_test.dart +++ b/packages/flutter_test/test/event_simulation_test.dart @@ -36,7 +36,7 @@ void main() { expect(events.length, 8); for (int i = 0; i < events.length; ++i) { - final bool isEven = i % 2 == 0; + final bool isEven = i.isEven; if (isEven) { expect(events[i].runtimeType, equals(RawKeyDownEvent)); } else {