Skip to content

Commit b9e5373

Browse files
Turning if chains into shorter switch statements (#144977)
This pull request is part of the effort to solve issue #144903. In the past, my efforts to reduce line length involved refactoring away from switch statements, but unlike [yesterday's PR](flutter/flutter#144905), this one is full of switch statements that make things more concise!
1 parent 017f33d commit b9e5373

File tree

12 files changed

+141
-182
lines changed

12 files changed

+141
-182
lines changed

dev/integration_tests/wide_gamut_test/lib/main.dart

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -259,18 +259,13 @@ class _MyHomePageState extends State<MyHomePage> {
259259

260260
@override
261261
void initState() {
262-
if (widget.setup == Setup.canvasSaveLayer) {
263-
_loadImage().then((ui.Image? value) {
264-
setState(() {
265-
_image = value;
266-
});
267-
});
268-
} else if (widget.setup == Setup.drawnImage) {
269-
_drawImage().then((ui.Image? value) {
270-
setState(() {
271-
_image = value;
272-
});
273-
});
262+
switch (widget.setup) {
263+
case Setup.canvasSaveLayer:
264+
_loadImage().then((ui.Image? value) => setState(() { _image = value; }));
265+
case Setup.drawnImage:
266+
_drawImage().then((ui.Image? value) => setState(() { _image = value; }));
267+
case Setup.image || Setup.blur || Setup.none:
268+
break;
274269
}
275270
super.initState();
276271
}

examples/api/lib/widgets/focus_manager/focus_node.0.dart

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,19 @@ class _ColorfulButtonState extends State<ColorfulButton> {
5555
KeyEventResult _handleKeyPress(FocusNode node, KeyEvent event) {
5656
if (event is KeyDownEvent) {
5757
debugPrint('Focus node ${node.debugLabel} got key event: ${event.logicalKey}');
58-
if (event.logicalKey == LogicalKeyboardKey.keyR) {
59-
debugPrint('Changing color to red.');
60-
setState(() {
61-
_color = Colors.red;
62-
});
63-
return KeyEventResult.handled;
64-
} else if (event.logicalKey == LogicalKeyboardKey.keyG) {
65-
debugPrint('Changing color to green.');
66-
setState(() {
67-
_color = Colors.green;
68-
});
69-
return KeyEventResult.handled;
70-
} else if (event.logicalKey == LogicalKeyboardKey.keyB) {
71-
debugPrint('Changing color to blue.');
72-
setState(() {
73-
_color = Colors.blue;
74-
});
75-
return KeyEventResult.handled;
58+
switch (event.logicalKey) {
59+
case LogicalKeyboardKey.keyR:
60+
debugPrint('Changing color to red.');
61+
setState(() { _color = Colors.red; });
62+
return KeyEventResult.handled;
63+
case LogicalKeyboardKey.keyG:
64+
debugPrint('Changing color to green.');
65+
setState(() { _color = Colors.green; });
66+
return KeyEventResult.handled;
67+
case LogicalKeyboardKey.keyB:
68+
debugPrint('Changing color to blue.');
69+
setState(() { _color = Colors.blue; });
70+
return KeyEventResult.handled;
7671
}
7772
}
7873
return KeyEventResult.ignored;

examples/api/lib/widgets/focus_scope/focus.0.dart

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,19 @@ class _FocusExampleState extends State<FocusExample> {
3636
KeyEventResult _handleKeyPress(FocusNode node, KeyEvent event) {
3737
if (event is KeyDownEvent) {
3838
debugPrint('Focus node ${node.debugLabel} got key event: ${event.logicalKey}');
39-
if (event.logicalKey == LogicalKeyboardKey.keyR) {
40-
debugPrint('Changing color to red.');
41-
setState(() {
42-
_color = Colors.red;
43-
});
44-
return KeyEventResult.handled;
45-
} else if (event.logicalKey == LogicalKeyboardKey.keyG) {
46-
debugPrint('Changing color to green.');
47-
setState(() {
48-
_color = Colors.green;
49-
});
50-
return KeyEventResult.handled;
51-
} else if (event.logicalKey == LogicalKeyboardKey.keyB) {
52-
debugPrint('Changing color to blue.');
53-
setState(() {
54-
_color = Colors.blue;
55-
});
56-
return KeyEventResult.handled;
39+
switch (event.logicalKey) {
40+
case LogicalKeyboardKey.keyR:
41+
debugPrint('Changing color to red.');
42+
setState(() { _color = Colors.red; });
43+
return KeyEventResult.handled;
44+
case LogicalKeyboardKey.keyG:
45+
debugPrint('Changing color to green.');
46+
setState(() { _color = Colors.green; });
47+
return KeyEventResult.handled;
48+
case LogicalKeyboardKey.keyB:
49+
debugPrint('Changing color to blue.');
50+
setState(() { _color = Colors.blue; });
51+
return KeyEventResult.handled;
5752
}
5853
}
5954
return KeyEventResult.ignored;

packages/flutter/lib/src/cupertino/list_section.dart

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -372,34 +372,31 @@ class CupertinoListSection extends StatelessWidget {
372372
height: dividerHeight,
373373
);
374374

375-
Widget? headerWidget;
376-
if (header != null) {
377-
headerWidget = DefaultTextStyle(
378-
style: CupertinoTheme.of(context).textTheme.textStyle.merge(
379-
type == CupertinoListSectionType.base
380-
? TextStyle(
381-
fontSize: 13.0,
382-
color: CupertinoDynamicColor.resolve(
383-
_kHeaderFooterColor, context))
384-
: const TextStyle(
385-
fontSize: 20.0, fontWeight: FontWeight.bold),
386-
),
387-
child: header!,
388-
);
389-
}
390-
391-
Widget? footerWidget;
392-
if (footer != null) {
393-
footerWidget = DefaultTextStyle(
394-
style: type == CupertinoListSectionType.base
395-
? CupertinoTheme.of(context).textTheme.textStyle.merge(TextStyle(
396-
fontSize: 13.0,
397-
color: CupertinoDynamicColor.resolve(
398-
_kHeaderFooterColor, context),
399-
))
400-
: CupertinoTheme.of(context).textTheme.textStyle,
401-
child: footer!,
402-
);
375+
TextStyle style = CupertinoTheme.of(context).textTheme.textStyle;
376+
377+
Widget? headerWidget, footerWidget;
378+
switch (type) {
379+
case CupertinoListSectionType.base:
380+
style = style.merge(TextStyle(
381+
fontSize: 13.0,
382+
color: CupertinoDynamicColor.resolve(_kHeaderFooterColor, context),
383+
));
384+
if (header != null) {
385+
headerWidget = DefaultTextStyle(style: style, child: header!);
386+
}
387+
if (footer != null) {
388+
footerWidget = DefaultTextStyle(style: style, child: footer!);
389+
}
390+
case CupertinoListSectionType.insetGrouped:
391+
if (header != null) {
392+
headerWidget = DefaultTextStyle(
393+
style: style.merge(const TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
394+
child: header!,
395+
);
396+
}
397+
if (footer != null) {
398+
footerWidget = DefaultTextStyle(style: style, child: footer!);
399+
}
403400
}
404401

405402
Widget? decoratedChildrenGroup;

packages/flutter/lib/src/gestures/team.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,16 @@ class _CombiningGestureArenaMember extends GestureArenaMember {
7373
if (_resolved) {
7474
return;
7575
}
76-
if (disposition == GestureDisposition.rejected) {
77-
_members.remove(member);
78-
member.rejectGesture(_pointer);
79-
if (_members.isEmpty) {
76+
switch (disposition) {
77+
case GestureDisposition.accepted:
78+
_winner ??= _owner.captain ?? member;
8079
_entry!.resolve(disposition);
81-
}
82-
} else {
83-
assert(disposition == GestureDisposition.accepted);
84-
_winner ??= _owner.captain ?? member;
85-
_entry!.resolve(disposition);
80+
case GestureDisposition.rejected:
81+
_members.remove(member);
82+
member.rejectGesture(_pointer);
83+
if (_members.isEmpty) {
84+
_entry!.resolve(disposition);
85+
}
8686
}
8787
}
8888
}

packages/flutter/lib/src/material/date_picker.dart

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2754,25 +2754,20 @@ class _HighlightPainter extends CustomPainter {
27542754
..color = color
27552755
..style = PaintingStyle.fill;
27562756

2757-
final Rect rectLeft = Rect.fromLTWH(0, 0, size.width / 2, size.height);
2758-
final Rect rectRight = Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height);
2757+
final bool rtl = switch (textDirection) {
2758+
TextDirection.rtl || null => true,
2759+
TextDirection.ltr => false,
2760+
};
27592761

27602762
switch (style) {
2761-
case _HighlightPainterStyle.highlightTrailing:
2762-
canvas.drawRect(
2763-
textDirection == TextDirection.ltr ? rectRight : rectLeft,
2764-
paint,
2765-
);
2763+
case _HighlightPainterStyle.highlightLeading when rtl:
2764+
case _HighlightPainterStyle.highlightTrailing when !rtl:
2765+
canvas.drawRect(Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height), paint);
27662766
case _HighlightPainterStyle.highlightLeading:
2767-
canvas.drawRect(
2768-
textDirection == TextDirection.ltr ? rectLeft : rectRight,
2769-
paint,
2770-
);
2767+
case _HighlightPainterStyle.highlightTrailing:
2768+
canvas.drawRect(Rect.fromLTWH(0, 0, size.width / 2, size.height), paint);
27712769
case _HighlightPainterStyle.highlightAll:
2772-
canvas.drawRect(
2773-
Rect.fromLTWH(0, 0, size.width, size.height),
2774-
paint,
2775-
);
2770+
canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paint);
27762771
case _HighlightPainterStyle.none:
27772772
break;
27782773
}

packages/flutter/lib/src/material/navigation_bar.dart

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,17 +1281,13 @@ class _CurvedAnimationBuilderState extends State<_CurvedAnimationBuilder> {
12811281
_animationDirection = status;
12821282
});
12831283
}
1284-
1285-
if (status == AnimationStatus.completed || status == AnimationStatus.dismissed) {
1286-
setState(() {
1287-
_preservedDirection = null;
1288-
});
1289-
}
1290-
1291-
if (_preservedDirection == null && (status == AnimationStatus.forward || status == AnimationStatus.reverse)) {
1292-
setState(() {
1293-
_preservedDirection = status;
1294-
});
1284+
switch (status) {
1285+
case AnimationStatus.forward || AnimationStatus.reverse when _preservedDirection != null:
1286+
break;
1287+
case AnimationStatus.forward || AnimationStatus.reverse:
1288+
setState(() { _preservedDirection = status; });
1289+
case AnimationStatus.completed || AnimationStatus.dismissed:
1290+
setState(() { _preservedDirection = null; });
12951291
}
12961292
}
12971293

packages/flutter/test/cupertino/nav_bar_transition_test.dart

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,26 +59,24 @@ Future<void> startTransitionBetween(
5959
}
6060

6161
CupertinoPageScaffold? scaffoldForNavBar(Widget? navBar) {
62-
if (navBar is CupertinoNavigationBar || navBar == null) {
63-
return CupertinoPageScaffold(
64-
navigationBar: navBar as CupertinoNavigationBar? ?? const CupertinoNavigationBar(),
65-
child: const Placeholder(),
66-
);
67-
} else if (navBar is CupertinoSliverNavigationBar) {
68-
return CupertinoPageScaffold(
69-
child: CustomScrollView(
70-
slivers: <Widget>[
62+
switch (navBar) {
63+
case CupertinoNavigationBar? _:
64+
return CupertinoPageScaffold(
65+
navigationBar: navBar ?? const CupertinoNavigationBar(),
66+
child: const Placeholder(),
67+
);
68+
case CupertinoSliverNavigationBar():
69+
return CupertinoPageScaffold(
70+
child: CustomScrollView(slivers: <Widget>[
7171
navBar,
7272
// Add filler so it's scrollable.
73-
const SliverToBoxAdapter(
74-
child: Placeholder(fallbackHeight: 1000.0),
75-
),
76-
],
77-
),
78-
);
73+
const SliverToBoxAdapter(child: Placeholder(fallbackHeight: 1000.0)),
74+
]),
75+
);
76+
default:
77+
assert(false, 'Unexpected nav bar type ${navBar.runtimeType}');
78+
return null;
7979
}
80-
assert(false, 'Unexpected nav bar type ${navBar.runtimeType}');
81-
return null;
8280
}
8381

8482
Finder flying(WidgetTester tester, Finder finder) {

packages/flutter/test/widgets/scrollbar_test.dart

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -240,17 +240,13 @@ void main() {
240240
painter.paint(testCanvas, size);
241241
final Rect rect = captureRect();
242242

243-
switch (direction) {
244-
case AxisDirection.up:
245-
case AxisDirection.down:
246-
expect(
247-
margin,
248-
textDirection == TextDirection.ltr
249-
? size.width - rect.right
250-
: rect.left,
251-
);
252-
case AxisDirection.left:
253-
case AxisDirection.right:
243+
switch (axisDirectionToAxis(direction)) {
244+
case Axis.vertical:
245+
expect(margin, switch (textDirection) {
246+
TextDirection.ltr => size.width - rect.right,
247+
TextDirection.rtl => rect.left,
248+
});
249+
case Axis.horizontal:
254250
expect(margin, size.height - rect.bottom);
255251
}
256252
}

packages/flutter_test/lib/src/mock_canvas.dart

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -520,24 +520,19 @@ class _MismatchedCall extends Error {
520520
}
521521

522522
bool _evaluatePainter(Object? object, Canvas canvas, PaintingContext context) {
523-
if (object is _ContextPainterFunction) {
524-
final _ContextPainterFunction function = object;
525-
function(context, Offset.zero);
526-
} else if (object is _CanvasPainterFunction) {
527-
final _CanvasPainterFunction function = object;
528-
function(canvas);
529-
} else {
530-
if (object is Finder) {
523+
switch (object) {
524+
case final _ContextPainterFunction function:
525+
function(context, Offset.zero);
526+
case final _CanvasPainterFunction function:
527+
function(canvas);
528+
case final Finder finder:
531529
TestAsyncUtils.guardSync();
532-
final Finder finder = object;
533-
object = finder.evaluate().single.renderObject;
534-
}
535-
if (object is RenderObject) {
536-
final RenderObject renderObject = object;
530+
final RenderObject? result = finder.evaluate().single.renderObject;
531+
return (result?..paint(context, Offset.zero)) != null;
532+
case final RenderObject renderObject:
537533
renderObject.paint(context, Offset.zero);
538-
} else {
534+
default:
539535
return false;
540-
}
541536
}
542537
return true;
543538
}

packages/flutter_tools/lib/src/compile.dart

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,22 +133,20 @@ class StdoutHandler {
133133
compilerOutput?.complete(output);
134134
return;
135135
}
136-
if (state == StdoutState.CollectDiagnostic) {
137-
if (!_suppressCompilerMessages) {
138-
_logger.printError(message);
139-
} else {
136+
switch (state) {
137+
case StdoutState.CollectDiagnostic when _suppressCompilerMessages:
140138
_logger.printTrace(message);
141-
}
142-
} else {
143-
assert(state == StdoutState.CollectDependencies);
144-
switch (message[0]) {
145-
case '+':
146-
sources.add(Uri.parse(message.substring(1)));
147-
case '-':
148-
sources.remove(Uri.parse(message.substring(1)));
149-
default:
150-
_logger.printTrace('Unexpected prefix for $message uri - ignoring');
151-
}
139+
case StdoutState.CollectDiagnostic:
140+
_logger.printError(message);
141+
case StdoutState.CollectDependencies:
142+
switch (message[0]) {
143+
case '+':
144+
sources.add(Uri.parse(message.substring(1)));
145+
case '-':
146+
sources.remove(Uri.parse(message.substring(1)));
147+
default:
148+
_logger.printTrace('Unexpected prefix for $message uri - ignoring');
149+
}
152150
}
153151
}
154152

0 commit comments

Comments
 (0)