prefer-mixin
Same as prefer_mixin in Dart lints
- Group
- Style
- Path
lint/style/prefer-mixin- Default
- On (recommended)
- Origin
- Dart lints
- Rule
- 385 of 512
Flags with clauses that mix in a plain class instead of a mixin.
Dart 3 only lets mixin and mixin class declarations be mixed in from
other libraries; mixing in an ordinary class is a legacy pattern that also
couples the class's constructor-free shape to every user. Declare the
reusable behavior as a mixin.
class Logger { void log(String m) {} }
class Service with Logger {} // flagged
mixin Logging { void log(String m) {} }
class Worker with Logging {} // preferred
Resolved plain classes are reported regardless of their declaring library.
Invalid
class Logger {
void log(String message) {}
}
class Tracer {
void trace() {}
}
abstract class Disposable {
void dispose() {}
}
class Service with Logger {}
class Worker extends Object with Logger, Tracer {}
class Resource with Disposable {}
class Alias = Object with Tracer;
enum Level with Logger {
low,
high,
}
class LocalLoggerConsumer with Logger {} class Service with Logger {} class Worker extends Object with Logger, Tracer {} class Worker extends Object with Logger, Tracer {} class Resource with Disposable {} class Alias = Object with Tracer; enum Level with Logger { class LocalLoggerConsumer with Logger {}Valid
import 'dart:collection';
mixin Logging {
void log(String message) {}
}
mixin class Tracing {
void trace() {}
}
class Service with Logging {}
class Worker extends Object with Logging, Tracing {}
class Alias = Object with Tracing;
enum Level with Logging { low, high }
// SDK mixins are fine.
class Numbers with ListMixin<int> {
@override
int length = 0;
@override
int operator [](int index) => index;
@override
void operator []=(int index, int value) {}
}
// Unresolved types are left alone.
class Remote with SomeUnknownMixin {}
// Extending or implementing a class is not mixing it in.
class Base {}
class Derived extends Base {}
class Impl implements Base {}Configure prefer-mixin
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"style": {
"prefer-mixin": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/style/prefer-mixin: <reason>More style rules
- prefer-multi-bloc-providerbloc
Flatten directly nested
package:flutter_blocBlocProviderswithMultiBlocProvider. - prefer-multi-providerprovider
Prefer a flat
MultiProviderto directly nested provider widgets. - prefer-named-boolean-parameters
Flags explicit positional
boolparameters in private declarations and unconstrained closures. - prefer-named-parameters
Prefer named parameters when a declaration exceeds
max-number(default 1). - prefer-null-aware-method-calls
prefer_null_aware_method_callsrecommendedPrefers
f?.call()to calling a null-checked function after a!= nulltest. - prefer-padding-over-containerflutter
Prefers
Paddingover aContainerused only forpadding. - prefer-provider-extensionsprovider
Prefer context.read/watch when provider extensions are in scope.
- prefer-returning-condition
Flags an
ifreturning a boolean literal followed by the opposite literal.