prefer-single-setstate
- Group
- Performance
- Path
lint/performance/prefer-single-setstate- Default
- Off, opt in
- Origin
- Falcon
- Domain
- flutter
- Rule
- 406 of 512
Merge consecutive Flutter State.setState statements in the same block. Intervening statements and control-flow boundaries are not collapsible runs.
Invalid
import 'package:flutter/material.dart' as f;
class S extends f.State<f.StatefulWidget> {
int value = 0;
void update() {
setState(() { value++; });
setState(() { value++; });
this.setState(() { value++; });
value++;
this.setState(() { value++; });
(setState(() { value++; }));
if (mounted) {
setState(() => value++);
setState(() => value++);
}
void nested() {
setState(() { value++; });
setState(() { value++; });
}
}
}
class Child extends S {
void inherited() {
setState(() { value++; });
setState(() { value++; });
}
} setState(() { value++; }); setState(() { value++; }); setState(() { value++; }); this.setState(() { value++; }); this.setState(() { value++; }); (setState(() { value++; })); setState(() => value++); setState(() => value++); setState(() { value++; }); setState(() { value++; }); setState(() { value++; }); setState(() { value++; });Valid
import 'package:flutter/material.dart';
class S extends State<StatefulWidget> {
int value = 0;
void update() {
setState(() { value++; value++; });
value++;
setState(() { value++; });
if (mounted) setState(() { value++; });
else setState(() { value--; });
{ setState(() { value++; }); }
{ setState(() { value++; }); }
}
void shadow() {
void setState(void Function() callback) { callback(); }
setState(() { value++; });
setState(() { value++; });
}
}
class Fake {
void setState(void Function() callback) { callback(); }
void update() { setState(() {}); setState(() {}); }
}
class Override extends S {
void setState(void Function() callback) { callback(); }
void update() { setState(() {}); setState(() {}); }
}Configure prefer-single-setstate
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"performance": {
"prefer-single-setstate": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/performance/prefer-single-setstate: <reason>More performance rules
- prefer-use-callbackflutter_hooks
Prefer
useCallbackfor synchronous memoized function literals. - prefer-use-memoflutter_hooks
Prefer memoizing freshly allocated collection values used as hook keys.
- prefer-using-list-viewflutter
Suggests considering
ListViewfor aSingleChildScrollViewcontaining a plain Flutter Column with at least two unconditional children in a list literal. - sized-box-for-whitespace
sized_box_for_whitespacerecommendedflutterFlags a
Containerused only to add fixedwidth/heightwhitespace. - unnecessary-to-list-in-spreads
unnecessary_to_list_in_spreadsrecommendedFlags a
.toList()call on the operand of a spread, e.g. - use-is-even-rather-than-modulo
use_is_even_rather_than_moduloPrefers
isEven/isOddto comparingx % 2with0or1. - use-string-buffers
use_string_buffersrecommendedPrefers a
StringBufferto growing aStringwith+inside a loop. - avoid-border-allflutter
Avoids Flutter's non-const
Border.allfactory.