always-put-required-named-parameters-first
Same as always_put_required_named_parameters_first in Dart lints
- Group
- Style
- Path
lint/style/always-put-required-named-parameters-first- Default
- Off, opt in
- Origin
- Dart lints
- Rule
- 6 of 512
Flags a required named parameter declared after an optional named one.
Callers scanning a signature should see the parameters they must pass
first. Within the named parameters of any parameter list — functions,
methods, constructors, function literals, function-typed parameters, and
Function(...) types — every required (or @required) parameter must
precede the optional ones:
void f({int? a, required int b}) {} // `b` flagged
void g({required int b, int? a}) {} // fine
Optional named super parameters ({super.key, required this.child}) count
as optional parameters like any other.
Invalid
import 'package:meta/meta.dart';
void f({int? a, required int b}) {}
void g({int a = 0, required int b, required int c}) {}
void legacy({int? a, @required int? b}) {}
class A {
final int x;
final int y;
A({this.x = 0, required this.y});
void m({bool flag = false, required String name}) {}
}
typedef Callback = void Function({int a, required int b});
void h() {
void local({int? a, required int b}) {}
final literal = ({int? a, required int b}) => b;
local(b: 1);
literal(b: 2);
}
class Base {
Base({required int b, int? a});
}
class Sub extends Base {
// Optional super parameters count as optional parameters.
Sub({super.a, required super.b});
}
class Widgetish extends Base {
final int child;
Widgetish({super.a, required this.child}) : super(b: 0);
} void f({int? a, required int b}) {} void g({int a = 0, required int b, required int c}) {} void g({int a = 0, required int b, required int c}) {} void legacy({int? a, @required int? b}) {} A({this.x = 0, required this.y}); void m({bool flag = false, required String name}) {} typedef Callback = void Function({int a, required int b});void h() { void local({int? a, required int b}) {} void local({int? a, required int b}) {} final literal = ({int? a, required int b}) => b; // Optional super parameters count as optional parameters. Sub({super.a, required super.b}); final int child; Widgetish({super.a, required this.child}) : super(b: 0);Valid
import 'package:meta/meta.dart';
void f({required int b, int? a}) {}
void g(int positional, {required int b, required int c, int a = 0}) {}
void legacy({@required int? b, int? a}) {}
void onlyOptional({int? a, int? b}) {}
class Base {
Base({required int b, int? a});
}
typedef Callback = void Function({required int b, int a});
void h(void Function({required int a, int? b}) cb) {}Configure always-put-required-named-parameters-first
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"style": {
"always-put-required-named-parameters-first": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/style/always-put-required-named-parameters-first: <reason>More style rules
- always-specify-types
always_specify_typesRequires explicit type annotations everywhere a type could be inferred.
- annotate-overrides
annotate_overridesrecommendedRequires
@overrideon members that override an inherited declaration. - arguments-ordering
Named arguments follow their resolved parameter declaration order by default.
- avoid-abbreviations-in-doc-comments
avoid_abbreviations_in_doc_commentsFlags Latin abbreviations in doc comments.
- avoid-annotating-with-dynamic
avoid_annotating_with_dynamicFlags parameters explicitly annotated with
dynamic. - avoid-bloc-public-fieldsbloc
Keep package-confirmed Bloc instance fields private; inherited API overrides are allowed.
- avoid-bloc-public-methodsbloc
Enforce the package-confirmed Bloc convention.
- avoid-bool-literals-in-conditional-expressions
avoid_bool_literals_in_conditional_expressionsrecommendedFlags conditional expressions over
boolthat have aboolliteral branch.