mix_lint
Mix Lint is a powerful tool that helps you enforce coding standards and best practices in your Flutter apps using Mix.
Getting Started
Run this command in the root of your Flutter project:
flutter pub add -d mix_lint custom_lintThen edit your analysis_options.yaml file and add these lines of code:
analyzer:
plugins:
- custom_lintThen run:
flutter clean
flutter pub get
dart run custom_lintCustomize rules
Some rules have their own configuration. You can customize them in the analysis_options.yaml file. For example, you can customize the rules for the mix_max_number_of_attributes_per_style rule.
custom_lint:
rules:
- mix_max_number_of_attributes_per_style:
max_number: 11Rules
mix_attributes_ordering
Ensure that the attributes are ordered in groups of the same category in the Style constructor. It makes the code easier to read and understand the Style.
Don't
Style (
$box.color.red(),
$text.color.blue(),
$box.height(200),
$text.style.fontSize(10),
)Do
Style (
$box.color.red(),
$box.height(200),
$text.color.blue(),
$text.style.fontSize(10),
)mix_avoid_defining_tokens_or_variants_within_style
Ensure that Variant and MixToken instances are not created directly inside Style constructors. Instead, instantiate Variant and MixToken outside of Style constructors.
Variants and MixTokens should be shared across the application. If they are created inside a Style, it means that they are local to the Style, and it will be harder to reuse them.
Don't
Style(
const Variant('example')(
$text.textAlign.center(),
$box.height(200),
$box.width(200),
),
)Style(
$box.color.ref(ColorToken('primary')),
)Do
final example = Variant('example');
Style(
example(
$text.textAlign.center(),
$box.height(200),
$box.width(200),
),
)final primary = ColorToken('primary');
Style(
$box.color.ref(primary),
)mix_avoid_defining_tokens_within_theme_data
Ensure that Tokens instances are not created directly inside MixThemeData constructors.
When you create tokens within a MixThemeData, you're essentially creating a localized scope that may not be easily accessible elsewhere in your application. This can lead to unnecessary token recreation or, worse, duplicated efforts to reuse them.
Don't
MixThemeData(
colors: {
const ColorToken('a'): Colors.black12,
}
)Do
final primary = ColorToken('a');
MixThemeData(
colors: {
primary: Colors.black12,
}
)mix_avoid_empty_variants
Avoid creating empty variants directly inside Style. Empty variants are essentially useless and can make the code harder to read and understand.
Don't
final a = Variant('a');
final wrong_case = Style(
a(),
);Do
final correct_case = Style(
a(
$box.color.amber(),
),
);mix_avoid_variant_inside_context_variant
ContextVariant and the standard Variant are applied at different moments during the Style lifecycle. Because of this, we strongly recommend that you don't create a Variant inside the ContextVariant's scope. Instead, you can combine the Variants using the & and | operators.
Don't
final variantTest = Variant('test');
Style (
$box.color.red(),
$on.hover(
$box.color.green(),
variantTest(
$box.color.blue(),
)
),
)Do
final variantTest = Variant('test');
Style (
$box.color.red(),
$on.hover(
$box.color.green(),
),
($on.hover & variantTest)(
$box.color.blue(),
),
)mix_max_number_of_attributes_per_style
Limit the number of attributes per style. The default value is 10. This rule aims to encourage developers to keep their styles concise and focused on a few key aspects.
Don't
final style = Style (
$attribute1(),
$attribute2(),
$attribute3(),
$attribute4(),
$attribute5(),
$attribute6(),
$attribute7(),
$attribute8(),
$attribute9(),
$attribute10(),
$attribute11(),
);Do
final auxStyle = Style(
$attribute1(),
$attribute2(),
$attribute3(),
$attribute4(),
$attribute5(),
);
final mainStyle = Style(
auxStyle(),
$attribute6(),
$attribute7(),
$attribute8(),
$attribute9(),
$attribute10(),
$attribute11(),
);Parameters
max_number (int)
The maximum number of attributes allowed per style. The default value is 10.
Assists
Extract Attributes
It is a powerful refactoring tool designed to improve the structure and maintainability of your Mix code by extracting style attributes from a Style instance into a separate Style instance.
Usage
This assist automatically becomes available when you move your cursor into a Style's constructor scope. It will be suggested as an assist option.
The assistant can extract attributes even when the style is in different code structures.
- Field declarations
- Method declarations (getters)
- Top-level variable declarations
- Function declarations (getters)