3 Steps to Migrate to Lint 2.0

3 Steps to Migrate to Lint 2.0

·

2 min read

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.

螢幕截圖_2022-06-16_下午11.13.29.png

螢幕截圖_2022-06-16_下午11.14.51.png

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.

螢幕截圖_2022-06-16_下午11.33.29.png

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.

Reference:

Introducing package:flutter_lints