avoid-duplicate-cascades
preset: recommended
Warns when a cascade expression has duplicate cascades.
Duplicate cascades are usually the result of a typo and a sign of a bug.
Example
❌ Bad:
void fn() {
final value = SomeClass();
value
..field = '2' // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..field = '1' // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..field = '1' // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..another = '1';
value
..method(() => 1) // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..method(() => 1) // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..method(() => 2);
final list = [1, 2, 3];
list
..[1] = 2 // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..[1] = 2 // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..[1] = 3 // LINT: Avoid duplicate cascades. Try removing the duplicate cascade expression or replacing it with a different expression.
..[2] = 2;
}
class SomeClass {
String? field;
String? another;
void method(Function callback) {}
}
✅ Good:
void fn() {
final value = SomeClass();
value
..field = '2'
..another = '1'; // Correct, different target fields
value
..method(() => 1)
..method(() => 2); // Correct, different callbacks
final list = [1, 2, 3];
list
..[1] = 2;
..[2] = 3; // Correct, different target indexes
}
class SomeClass {
String? field;
String? another;
void method(Function callback) {}
}