Flutter 3.0 introduce along with the lint 2.0. For project created after flutter 3.0 will automatically use the lint 2.0, but for project created previously required to migrate manually.
1. Add flutter_lints package to dev dependance
flutter pub add flutter_lints --dev
2. Add analysis_options.yaml to root level
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
3. Fix Reported Issues
Command Fix
According to the document, most of the issues can be fixed by running:
dart fix --apply
IDE Fix
For those hard to be command fixed, IDE can help use to fix most of them.
Manual Fix
Most frequent issue I got is the Avoid using private types in public APIs.
@override
_MyWidgetState createState() => _MyWidgetState();
Most of them should related to the State class. From the latest document:
Subclasses should override this method to return a newly created instance of their associated State subclass:
@override
State<MyWidget> createState() => _MyWidgetState();
Another issue I got most in my packages is the Publishable packages can't have 'path' dependencies.
For my case, it is example project which gets the error. Since it is not publishable, I have added the publish_to: none
to solve the issue.