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](https://github.com/flutter/flutter/pull/144905), this one is full of switch statements that make things more concise!
This commit is contained in:
Nate 2024-03-13 11:16:17 -06:00 committed by GitHub
parent 017f33df6c
commit b9e537336f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 140 additions and 181 deletions

View file

@ -259,18 +259,13 @@ class _MyHomePageState extends State<MyHomePage> {
@override @override
void initState() { void initState() {
if (widget.setup == Setup.canvasSaveLayer) { switch (widget.setup) {
_loadImage().then((ui.Image? value) { case Setup.canvasSaveLayer:
setState(() { _loadImage().then((ui.Image? value) => setState(() { _image = value; }));
_image = value; case Setup.drawnImage:
}); _drawImage().then((ui.Image? value) => setState(() { _image = value; }));
}); case Setup.image || Setup.blur || Setup.none:
} else if (widget.setup == Setup.drawnImage) { break;
_drawImage().then((ui.Image? value) {
setState(() {
_image = value;
});
});
} }
super.initState(); super.initState();
} }

View file

@ -55,24 +55,19 @@ class _ColorfulButtonState extends State<ColorfulButton> {
KeyEventResult _handleKeyPress(FocusNode node, KeyEvent event) { KeyEventResult _handleKeyPress(FocusNode node, KeyEvent event) {
if (event is KeyDownEvent) { if (event is KeyDownEvent) {
debugPrint('Focus node ${node.debugLabel} got key event: ${event.logicalKey}'); debugPrint('Focus node ${node.debugLabel} got key event: ${event.logicalKey}');
if (event.logicalKey == LogicalKeyboardKey.keyR) { switch (event.logicalKey) {
debugPrint('Changing color to red.'); case LogicalKeyboardKey.keyR:
setState(() { debugPrint('Changing color to red.');
_color = Colors.red; setState(() { _color = Colors.red; });
}); return KeyEventResult.handled;
return KeyEventResult.handled; case LogicalKeyboardKey.keyG:
} else if (event.logicalKey == LogicalKeyboardKey.keyG) { debugPrint('Changing color to green.');
debugPrint('Changing color to green.'); setState(() { _color = Colors.green; });
setState(() { return KeyEventResult.handled;
_color = Colors.green; case LogicalKeyboardKey.keyB:
}); debugPrint('Changing color to blue.');
return KeyEventResult.handled; setState(() { _color = Colors.blue; });
} else if (event.logicalKey == LogicalKeyboardKey.keyB) { return KeyEventResult.handled;
debugPrint('Changing color to blue.');
setState(() {
_color = Colors.blue;
});
return KeyEventResult.handled;
} }
} }
return KeyEventResult.ignored; return KeyEventResult.ignored;

View file

@ -36,24 +36,19 @@ class _FocusExampleState extends State<FocusExample> {
KeyEventResult _handleKeyPress(FocusNode node, KeyEvent event) { KeyEventResult _handleKeyPress(FocusNode node, KeyEvent event) {
if (event is KeyDownEvent) { if (event is KeyDownEvent) {
debugPrint('Focus node ${node.debugLabel} got key event: ${event.logicalKey}'); debugPrint('Focus node ${node.debugLabel} got key event: ${event.logicalKey}');
if (event.logicalKey == LogicalKeyboardKey.keyR) { switch (event.logicalKey) {
debugPrint('Changing color to red.'); case LogicalKeyboardKey.keyR:
setState(() { debugPrint('Changing color to red.');
_color = Colors.red; setState(() { _color = Colors.red; });
}); return KeyEventResult.handled;
return KeyEventResult.handled; case LogicalKeyboardKey.keyG:
} else if (event.logicalKey == LogicalKeyboardKey.keyG) { debugPrint('Changing color to green.');
debugPrint('Changing color to green.'); setState(() { _color = Colors.green; });
setState(() { return KeyEventResult.handled;
_color = Colors.green; case LogicalKeyboardKey.keyB:
}); debugPrint('Changing color to blue.');
return KeyEventResult.handled; setState(() { _color = Colors.blue; });
} else if (event.logicalKey == LogicalKeyboardKey.keyB) { return KeyEventResult.handled;
debugPrint('Changing color to blue.');
setState(() {
_color = Colors.blue;
});
return KeyEventResult.handled;
} }
} }
return KeyEventResult.ignored; return KeyEventResult.ignored;

View file

@ -372,34 +372,31 @@ class CupertinoListSection extends StatelessWidget {
height: dividerHeight, height: dividerHeight,
); );
Widget? headerWidget; TextStyle style = CupertinoTheme.of(context).textTheme.textStyle;
if (header != null) {
headerWidget = DefaultTextStyle(
style: CupertinoTheme.of(context).textTheme.textStyle.merge(
type == CupertinoListSectionType.base
? TextStyle(
fontSize: 13.0,
color: CupertinoDynamicColor.resolve(
_kHeaderFooterColor, context))
: const TextStyle(
fontSize: 20.0, fontWeight: FontWeight.bold),
),
child: header!,
);
}
Widget? footerWidget; Widget? headerWidget, footerWidget;
if (footer != null) { switch (type) {
footerWidget = DefaultTextStyle( case CupertinoListSectionType.base:
style: type == CupertinoListSectionType.base style = style.merge(TextStyle(
? CupertinoTheme.of(context).textTheme.textStyle.merge(TextStyle( fontSize: 13.0,
fontSize: 13.0, color: CupertinoDynamicColor.resolve(_kHeaderFooterColor, context),
color: CupertinoDynamicColor.resolve( ));
_kHeaderFooterColor, context), if (header != null) {
)) headerWidget = DefaultTextStyle(style: style, child: header!);
: CupertinoTheme.of(context).textTheme.textStyle, }
child: footer!, if (footer != null) {
); footerWidget = DefaultTextStyle(style: style, child: footer!);
}
case CupertinoListSectionType.insetGrouped:
if (header != null) {
headerWidget = DefaultTextStyle(
style: style.merge(const TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
child: header!,
);
}
if (footer != null) {
footerWidget = DefaultTextStyle(style: style, child: footer!);
}
} }
Widget? decoratedChildrenGroup; Widget? decoratedChildrenGroup;

View file

@ -73,16 +73,16 @@ class _CombiningGestureArenaMember extends GestureArenaMember {
if (_resolved) { if (_resolved) {
return; return;
} }
if (disposition == GestureDisposition.rejected) { switch (disposition) {
_members.remove(member); case GestureDisposition.accepted:
member.rejectGesture(_pointer); _winner ??= _owner.captain ?? member;
if (_members.isEmpty) {
_entry!.resolve(disposition); _entry!.resolve(disposition);
} case GestureDisposition.rejected:
} else { _members.remove(member);
assert(disposition == GestureDisposition.accepted); member.rejectGesture(_pointer);
_winner ??= _owner.captain ?? member; if (_members.isEmpty) {
_entry!.resolve(disposition); _entry!.resolve(disposition);
}
} }
} }
} }

View file

@ -2754,25 +2754,20 @@ class _HighlightPainter extends CustomPainter {
..color = color ..color = color
..style = PaintingStyle.fill; ..style = PaintingStyle.fill;
final Rect rectLeft = Rect.fromLTWH(0, 0, size.width / 2, size.height); final bool rtl = switch (textDirection) {
final Rect rectRight = Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); TextDirection.rtl || null => true,
TextDirection.ltr => false,
};
switch (style) { switch (style) {
case _HighlightPainterStyle.highlightTrailing: case _HighlightPainterStyle.highlightLeading when rtl:
canvas.drawRect( case _HighlightPainterStyle.highlightTrailing when !rtl:
textDirection == TextDirection.ltr ? rectRight : rectLeft, canvas.drawRect(Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height), paint);
paint,
);
case _HighlightPainterStyle.highlightLeading: case _HighlightPainterStyle.highlightLeading:
canvas.drawRect( case _HighlightPainterStyle.highlightTrailing:
textDirection == TextDirection.ltr ? rectLeft : rectRight, canvas.drawRect(Rect.fromLTWH(0, 0, size.width / 2, size.height), paint);
paint,
);
case _HighlightPainterStyle.highlightAll: case _HighlightPainterStyle.highlightAll:
canvas.drawRect( canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paint);
Rect.fromLTWH(0, 0, size.width, size.height),
paint,
);
case _HighlightPainterStyle.none: case _HighlightPainterStyle.none:
break; break;
} }

View file

@ -1281,17 +1281,13 @@ class _CurvedAnimationBuilderState extends State<_CurvedAnimationBuilder> {
_animationDirection = status; _animationDirection = status;
}); });
} }
switch (status) {
if (status == AnimationStatus.completed || status == AnimationStatus.dismissed) { case AnimationStatus.forward || AnimationStatus.reverse when _preservedDirection != null:
setState(() { break;
_preservedDirection = null; case AnimationStatus.forward || AnimationStatus.reverse:
}); setState(() { _preservedDirection = status; });
} case AnimationStatus.completed || AnimationStatus.dismissed:
setState(() { _preservedDirection = null; });
if (_preservedDirection == null && (status == AnimationStatus.forward || status == AnimationStatus.reverse)) {
setState(() {
_preservedDirection = status;
});
} }
} }

View file

@ -59,26 +59,24 @@ Future<void> startTransitionBetween(
} }
CupertinoPageScaffold? scaffoldForNavBar(Widget? navBar) { CupertinoPageScaffold? scaffoldForNavBar(Widget? navBar) {
if (navBar is CupertinoNavigationBar || navBar == null) { switch (navBar) {
return CupertinoPageScaffold( case CupertinoNavigationBar? _:
navigationBar: navBar as CupertinoNavigationBar? ?? const CupertinoNavigationBar(), return CupertinoPageScaffold(
child: const Placeholder(), navigationBar: navBar ?? const CupertinoNavigationBar(),
); child: const Placeholder(),
} else if (navBar is CupertinoSliverNavigationBar) { );
return CupertinoPageScaffold( case CupertinoSliverNavigationBar():
child: CustomScrollView( return CupertinoPageScaffold(
slivers: <Widget>[ child: CustomScrollView(slivers: <Widget>[
navBar, navBar,
// Add filler so it's scrollable. // Add filler so it's scrollable.
const SliverToBoxAdapter( const SliverToBoxAdapter(child: Placeholder(fallbackHeight: 1000.0)),
child: Placeholder(fallbackHeight: 1000.0), ]),
), );
], default:
), assert(false, 'Unexpected nav bar type ${navBar.runtimeType}');
); return null;
} }
assert(false, 'Unexpected nav bar type ${navBar.runtimeType}');
return null;
} }
Finder flying(WidgetTester tester, Finder finder) { Finder flying(WidgetTester tester, Finder finder) {

View file

@ -240,17 +240,13 @@ void main() {
painter.paint(testCanvas, size); painter.paint(testCanvas, size);
final Rect rect = captureRect(); final Rect rect = captureRect();
switch (direction) { switch (axisDirectionToAxis(direction)) {
case AxisDirection.up: case Axis.vertical:
case AxisDirection.down: expect(margin, switch (textDirection) {
expect( TextDirection.ltr => size.width - rect.right,
margin, TextDirection.rtl => rect.left,
textDirection == TextDirection.ltr });
? size.width - rect.right case Axis.horizontal:
: rect.left,
);
case AxisDirection.left:
case AxisDirection.right:
expect(margin, size.height - rect.bottom); expect(margin, size.height - rect.bottom);
} }
} }

View file

@ -520,24 +520,19 @@ class _MismatchedCall extends Error {
} }
bool _evaluatePainter(Object? object, Canvas canvas, PaintingContext context) { bool _evaluatePainter(Object? object, Canvas canvas, PaintingContext context) {
if (object is _ContextPainterFunction) { switch (object) {
final _ContextPainterFunction function = object; case final _ContextPainterFunction function:
function(context, Offset.zero); function(context, Offset.zero);
} else if (object is _CanvasPainterFunction) { case final _CanvasPainterFunction function:
final _CanvasPainterFunction function = object; function(canvas);
function(canvas); case final Finder finder:
} else {
if (object is Finder) {
TestAsyncUtils.guardSync(); TestAsyncUtils.guardSync();
final Finder finder = object; final RenderObject? result = finder.evaluate().single.renderObject;
object = finder.evaluate().single.renderObject; return (result?..paint(context, Offset.zero)) != null;
} case final RenderObject renderObject:
if (object is RenderObject) {
final RenderObject renderObject = object;
renderObject.paint(context, Offset.zero); renderObject.paint(context, Offset.zero);
} else { default:
return false; return false;
}
} }
return true; return true;
} }

View file

@ -133,22 +133,20 @@ class StdoutHandler {
compilerOutput?.complete(output); compilerOutput?.complete(output);
return; return;
} }
if (state == StdoutState.CollectDiagnostic) { switch (state) {
if (!_suppressCompilerMessages) { case StdoutState.CollectDiagnostic when _suppressCompilerMessages:
_logger.printError(message);
} else {
_logger.printTrace(message); _logger.printTrace(message);
} case StdoutState.CollectDiagnostic:
} else { _logger.printError(message);
assert(state == StdoutState.CollectDependencies); case StdoutState.CollectDependencies:
switch (message[0]) { switch (message[0]) {
case '+': case '+':
sources.add(Uri.parse(message.substring(1))); sources.add(Uri.parse(message.substring(1)));
case '-': case '-':
sources.remove(Uri.parse(message.substring(1))); sources.remove(Uri.parse(message.substring(1)));
default: default:
_logger.printTrace('Unexpected prefix for $message uri - ignoring'); _logger.printTrace('Unexpected prefix for $message uri - ignoring');
} }
} }
} }

View file

@ -101,19 +101,18 @@ class DaemonInputStreamConverter {
int start = 0; int start = 0;
while (start < chunk.length) { while (start < chunk.length) {
if (state == _InputStreamParseState.json) { switch (state) {
start += _processChunkInJsonMode(chunk, start); case _InputStreamParseState.json:
} else if (state == _InputStreamParseState.binary) { start += _processChunkInJsonMode(chunk, start);
final int bytesSent = _addBinaryChunk(chunk, start, remainingBinaryLength); case _InputStreamParseState.binary:
start += bytesSent; final int bytesSent = _addBinaryChunk(chunk, start, remainingBinaryLength);
remainingBinaryLength -= bytesSent; start += bytesSent;
remainingBinaryLength -= bytesSent;
if (remainingBinaryLength <= 0) { if (remainingBinaryLength <= 0) {
assert(remainingBinaryLength == 0); assert(remainingBinaryLength == 0);
unawaited(currentBinaryStream.close());
unawaited(currentBinaryStream.close()); state = _InputStreamParseState.json;
state = _InputStreamParseState.json; }
}
} }
} }
} }