likes
comments
collection
share

Flutter 项目结构篇之- analysis_options.yaml

作者站长头像
站长
· 阅读数 3

analysis_optins.yaml文件是一个静态分析文件。我们将在这篇文章中介绍analysis_options.yaml里面的代码用处了,以及一些自己的想法。

以下是一个简单的例子:

include: package:flutter_lints/flutter.yaml
analyzer:
  errors:
   # avoid_print: ignore
     todo: ignore

  avoid_empty_else: ignore
   # exclude: [build/**]
  enable-experiment:
     - extension-methods
  strong-mode:
     implicit-casts: false
     implicit-dynamic: false
     
linter:
   rules:

include

include: package:flutter_lints/flutter.yaml

通过导入其他文件来导入定义好的静态分析规则代码,允许您将已定义的外部文件带入您的项目中。静态分析插件在pubspec.yaml引入的情况下,然后插件在analysis_options.yaml的include设置。

flutter_lints: ^1.0.0

analyzer

analyzer:
  errors:
  exclude:
  enable-experiment:
  strong-mode:

为整个静态分析设置自定义内容。

errors

errors:
  avoid_print: ignore

左侧规则名称,右侧有四个类型:ignore, info, warning,error

在引入上述静态分析插件时,如果你想禁用某些规则。analyzer该选项errors设置为ignore,可以禁用整个项目中指定的规则。其他的就是信息,警告,报错的字面意思。另外还可以在ignore代码里面用:ignore:ignore_for_file:来替代。

// ignore: avoid_print
print('Lineter Test');

//你可以用ignore_for_file:方式去除整个项目中某些规则的警告,多个规则以,隔开。
// ignore_for_file: prefer_const_constructors
Text('save network image to photo')

exclude

exclude:
  - lib/client.dart
  - lib/data/model/*.freezed.dart
  - test/_data/**

可以设置将规则不应用于某些文件或者说从静态分析插件分析中排除一些文件。

enable-experiment

enable-experiment:
   - extension-methods

开启扩充套件方法,加入上面的设定,并且保证Dart SDK >= 2.6.0

strong-mode

启用严格的类型检查。默认情况下会启用隐式类型转换或相对松散的类型检查。如果您需要设置比Dart的默认类型检查更加严格的类型检查,您可以通过analyzer在strong-mode 进行以下设置:

strong-mode:
   implicit-casts: false
   implicit-dynamic: false

implicit-casts

implicit-casts: false 隐式转换 可以通过设置禁止隐式类型转换的实现。 为了不写几个字符,这会导致代码潜在的不安全。 该implicit-cast功能与变量赋值有关。为了不写几个字符,而开启implicit-casts,这会导致代码潜在的不安全。同理implicit-dynamic也是。

没有禁用情况:

num a = 42; // we assigned an `int` to `num`, this is valid``
// UNSAFE! We assigned `num` to `double`. This is valid with `implicit-cast` only.
// This will crash at runtime, as `baseClass` contains an `int` here.
double b = a;

禁用的话,上面的代码将无法编译成功。但是我们可以通过强制转换来修复这个编译错误:

num a = 42;
double b = a as double;
或者
double c = a is double ? a : 0.0;

implicit-dynamic

implicit-dynamic: false 隐式动态 dynamic可以禁止在动态类型声明中使用类型。implicit-dynamic功能是关于类型推断的。如果启用,当类型推断失败,implicit-dynamic将使类型回退到dynamic

通过禁用`implicit-dynamic`,这将使我们的声明不再编译:
 var list = []; // Compile error: Missing type argument for list literal.

你可以指定类型来修复代码,如下:

var list = <int>[];

当你添加不是指定类型,或者使用的指定类型会报下面的错误:

    list.add(42); // works
    list.add('hello world'); // The argument type 'String' can't be assigned to the parameter type 'int'.dartargument_type_not_assignable
    for (final item in list) {
       // Compile error, no property `somePropertyThatDoesNotExist` on `int`
      print(item.somePropertyThatDoesNotExist);
    }

最后建议您尽可能启用严格的类型检查,因为它在编译时使类型检查更加严格并使您的代码更加严谨。

linter

linter:
   rules:

这里就是启用一些lint 规则。完整lint 规则列表可在此处获得。但是由于lint 规则太多了,有 160 多个规则,其中一些规则会定期添加。我们在单个文件去了解哪些已启用,哪些未启用可能会非常困难和麻烦。那么如何管理lint 规则呢?

为了解决这个问题,我建议创建两个不同的文件:

  • 一个 all_lint_rules.yaml文件用来启用所有规则。 这是所有规则列表的本地副本。
  • analysis_options.yaml文件, 导入该all_lint_rules.yaml文件,并禁用您不想要的规则。
 linter:
    rules:
      avoid_print: false

这样做有俩个好处:

  • 第一就知道什么是禁用的,因为我们analysis_options.yaml 不再包含启用规则,只包含禁用的规则。
  • 第二当添加新规则时,很容易维护我们的列表。只需将官方列表复制粘贴到我们的all_lint_rules.yaml文件中即可。

以上就介绍完analysis_options.yaml 的文件的作用了。下篇将谈论 main.dart里面的第一代码:

void main() {
   runApp(const MyApp());
}