diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b09f818a6..019794730f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* fix: check `didChangeDependencies` for [`avoid-unnecessary-setstate`](https://dcm.dev/docs/individuals/rules/flutter/avoid-unnecessary-setstate). * fix: add new config option for [`no-equal-arguments`](https://dcm.dev/docs/individuals/rules/common/no-equal-arguments). * feat: add `allow-nullable` config option for [`avoid-returning-widgets`](https://dcm.dev/docs/individuals/rules/common/avoid-returning-widgets). * fix: support `assert(mounted)` for [`use-setstate-synchronously`](https://dcm.dev/docs/individuals/rules/flutter/use-setstate-synchronously). diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/visitor.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/visitor.dart index f9b0023715..64ff1628e7 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/visitor.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/visitor.dart @@ -1,7 +1,12 @@ part of 'avoid_unnecessary_setstate_rule.dart'; class _Visitor extends RecursiveAstVisitor { - static const _checkedMethods = ['initState', 'didUpdateWidget', 'build']; + static const _checkedMethods = [ + 'initState', + 'didUpdateWidget', + 'didChangeDependencies', + 'build', + ]; final _setStateInvocations = []; final _classMethodsInvocations = []; diff --git a/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate_rule_test.dart b/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate_rule_test.dart index e43af9ec1e..b0f1964f09 100644 --- a/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate_rule_test.dart +++ b/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate_rule_test.dart @@ -27,8 +27,8 @@ void main() { RuleTestHelper.verifyIssues( issues: issues, - startLines: [16, 22, 35, 57, 63, 27, 78], - startColumns: [5, 7, 5, 5, 7, 5, 5], + startLines: [16, 22, 35, 45, 68, 74, 27, 48, 89], + startColumns: [5, 7, 5, 5, 5, 7, 5, 5, 5], locationTexts: [ 'setState(() {\n' ' myString = "Hello";\n' @@ -42,11 +42,15 @@ void main() { 'setState(() {\n' ' myString = "Hello";\n' ' })', + 'setState(() {\n' + ' myString = "Hello";\n' + ' })', 'setState(() {\n' ' myString = "Hello";\n' ' })', 'myMethod()', 'myMethod()', + 'myMethod()', ], messages: [ 'Avoid calling unnecessary setState. Consider changing the state directly.', @@ -54,6 +58,8 @@ void main() { 'Avoid calling unnecessary setState. Consider changing the state directly.', 'Avoid calling unnecessary setState. Consider changing the state directly.', 'Avoid calling unnecessary setState. Consider changing the state directly.', + 'Avoid calling unnecessary setState. Consider changing the state directly.', + 'Avoid calling a sync method with setState.', 'Avoid calling a sync method with setState.', 'Avoid calling a sync method with setState.', ], diff --git a/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/examples/example.dart b/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/examples/example.dart index 83dba06d95..bb3fd16d88 100644 --- a/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/examples/example.dart +++ b/test/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/examples/example.dart @@ -37,6 +37,17 @@ class _MyWidgetState extends State { }); } + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + // LINT + setState(() { + myString = "Hello"; + }); + myMethod(); // LINT + } + void myMethod() { setState(() { myString = "Hello";