This repository was archived by the owner on Jul 16, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +42
-4
lines changed
lib/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously
test/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously/examples Expand file tree Collapse file tree 4 files changed +42
-4
lines changed Original file line number Diff line number Diff line change 8
8
* chore: restrict ` analyzer ` version to ` >=5.1.0 <5.8.0 ` .
9
9
* feat: add static code diagnostic [ ` avoid-substring ` ] ( https://dcm.dev/docs/individuals/rules/common/avoid-substring ) .
10
10
* fix: correctly track prefixes usage for check-unused-code.
11
+ * fix: visit only widgets for [ ` use-setstate-synchronously ` ] ( https://dcm.dev/docs/individuals/rules/flutter/use-setstate-synchronously ) .
11
12
12
13
## 5.6.0
13
14
Original file line number Diff line number Diff line change @@ -33,7 +33,7 @@ class UseSetStateSynchronouslyRule extends FlutterRule {
33
33
@override
34
34
Iterable <Issue > check (InternalResolvedUnitResult source) {
35
35
final visitor = _Visitor (methods: methods);
36
- source.unit.visitChildren (visitor);
36
+ source.unit.accept (visitor);
37
37
38
38
return visitor.nodes
39
39
.map ((node) => createIssue (
Original file line number Diff line number Diff line change @@ -8,9 +8,14 @@ class _Visitor extends RecursiveAstVisitor<void> {
8
8
final nodes = < SimpleIdentifier > [];
9
9
10
10
@override
11
- void visitClassDeclaration (ClassDeclaration node) {
12
- if (isWidgetStateOrSubclass (node.extendsClause? .superclass.type)) {
13
- node.visitChildren (this );
11
+ void visitCompilationUnit (CompilationUnit node) {
12
+ for (final declaration in node.declarations) {
13
+ if (declaration is ClassDeclaration ) {
14
+ final type = declaration.extendsClause? .superclass.type;
15
+ if (isWidgetStateOrSubclass (type)) {
16
+ declaration.visitChildren (this );
17
+ }
18
+ }
14
19
}
15
20
}
16
21
Original file line number Diff line number Diff line change @@ -109,3 +109,35 @@ class State {}
109
109
Future <void > fetch () {}
110
110
111
111
Future <bool > condition () {}
112
+
113
+ class SomeClass {
114
+ void setState (Function () callback) {}
115
+ }
116
+
117
+ Future <void > handle (Future Function () callback) {}
118
+
119
+ mixin _SomeMixin on SomeClass {
120
+ Future <bool > condition () => handle (() async {
121
+ await fetch ();
122
+
123
+ setState ();
124
+ });
125
+ }
126
+
127
+ abstract class IController {
128
+ void setState (void Function () fn);
129
+ }
130
+
131
+ abstract class ControllerBase implements IController {
132
+ @override
133
+ void setState (void Function () fn) {}
134
+ }
135
+
136
+ class ControllerImpl = ControllerBase with ControllerMixin ;
137
+
138
+ mixin ControllerMixin on ControllerBase {
139
+ Future <void > helloWorld () async {
140
+ await Future <void >.delayed (const Duration (seconds: 1 ));
141
+ setState (() {});
142
+ }
143
+ }
You can’t perform that action at this time.
0 commit comments