Flutter代码规范与钩子校验插件flutter_hooks_lint_plugin的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter代码规范与钩子校验插件flutter_hooks_lint_plugin的使用

flutter_hooks_lint_plugin 是一个用于 flutter_hooks 的 Dart 分析器插件,灵感来源于 eslint-plugin-react-hooks

规则

缺失/不必要的键

检测 useEffect 调用中的缺失或不必要的键。 它会查找 HookWidget 中的构建变量(类字段、局部变量等),然后比较构建变量和 useEffect 调用中指定的键之间的引用。如果有任何差异,则报告错误。

final variable1 = callSomething();
final variable2 = callSomething();

useEffect(() {
  print(variable1);
}, [variable2]); // 缺失键 'variable1',多余的键 'variable2'

避免嵌套使用钩子

检测是否在控制流语法(如 if, for, while 等)下使用了钩子,这是一条不好的实践。 如果在这些控制流语法下使用了钩子,则报告错误。

if (flag) {
  final variable = useState('hello'); // 避免嵌套钩子
}

安装

pubspec.yaml 文件中添加 flutter_hooks_lint_plugin 依赖:

dev_dependencies:
  flutter_hooks_lint_plugin: ^0.6.1

analyzer_options.yaml 文件中添加 flutter_hooks_lint_plugin 插件指令:

analyzer:
  plugins:
    - flutter_hooks_lint_plugin

然后运行 flutter pub get 并重启您的 IDE/编辑器。

选项

您可以通过 analysis_options.yaml 自定义插件的行为:

flutter_hooks_lint_plugin:
  exhaustive_keys:
    # 钩子在状态生命周期中不会改变
    constant_hooks:
      # 默认值
      - useRef
      - useIsMounted
      - useFocusNode
      - useContext

      # 您自定义的钩子
      - useConstantValue

抑制 lint

有几种方法可以抑制 lint:

  1. 在文件顶部添加 // ignore_for_file: exhaustive_keys, nested_hooks 以抑制整个文件中的 lint。
  2. 在当前行或下一行添加 // ignore: exhaustive_keys, nested_hooks 以抑制该行的 lint。
  3. 在当前行或下一行添加 // ignore_keys: foo, bar 以抑制特定键的 lint。

命令行界面 (CLI)

您也可以通过命令行接口使用此插件:

$ dart pub run flutter_hooks_lint_plugin:flutter_hooks_lint analyze ./

$ flutter pub run flutter_hooks_lint_plugin:flutter_hooks_lint analyze ./

TODO

  • 支持 Fix(建议)

贡献

欢迎提交 PR!

您可以修改插件的依赖项为本地路径:

dependencies:
  flutter_hooks_lint_plugin:
    path: /home/mjhd/flutter_hooks_lint_plugin # 绝对路径到克隆目录

许可证

MIT 许可证 © mjhd


完整示例

以下是一个完整的示例,展示了如何使用 flutter_hooks_lint_plugin

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends HookWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  Widget build(BuildContext context) {
    final counter = useState(0);

    useEffect(() {
      if (title == 'Hello') {
        counter.value++;
      }

      return () {};
    }, [title]);

    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${counter.value}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          counter.value++;
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter代码规范与钩子校验插件flutter_hooks_lint_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码规范与钩子校验插件flutter_hooks_lint_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter代码规范与钩子校验插件flutter_hooks_lint_plugin的使用

在Flutter开发中,代码规范不仅有助于提升代码的可读性和可维护性,还能减少潜在的bug。此外,对于使用Flutter Hooks的项目,校验钩子的正确使用也非常重要。flutter_hooks_lint_plugin 是一个非常有用的插件,它能帮助开发者在开发过程中自动校验Flutter Hooks的使用是否符合规范。

以下是如何在Flutter项目中集成并使用flutter_hooks_lint_plugin的详细步骤,包括必要的代码示例。

1. 安装flutter_hooks_lint_plugin

首先,在你的Flutter项目的根目录下,通过pubspec.yaml文件添加flutter_hooks_lint_plugin依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_hooks: ^0.x.x  # 确保你已经在项目中使用了flutter_hooks

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_hooks_lint_plugin: ^x.x.x  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 配置analysis_options.yaml

接下来,在项目根目录下创建或更新analysis_options.yaml文件,以启用flutter_hooks_lint_plugin提供的lint规则。

include: package:flutter_lints/flutter_recommended.yaml

linter:
  rules:
    # 这里可以启用或禁用特定的lint规则
    # flutter_hooks_lint_plugin会自动添加其规则
    # 这里可以添加其他自定义规则

注意:flutter_hooks_lint_plugin会自动将其lint规则集成到flutter_lints中,因此只需包含flutter_recommended.yaml即可。

3. 使用Flutter Hooks并自动校验

现在,你可以在Flutter项目中使用Hooks,并且flutter_hooks_lint_plugin会在分析代码时自动校验Hooks的使用情况。

以下是一个简单的使用Flutter Hooks的示例:

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

void main() {
  runApp(HookExampleApp());
}

class HookExampleApp extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final int count = useState(0)[0];
    final ValueSetter<int> setCount = useState(0)[1];

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Hooks Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'You have pushed the button this many times:',
              ),
              Text(
                '$count',
                style: Theme.of(context).textTheme.headline4,
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () => setCount(count + 1),
          tooltip: 'Increment',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

在这个示例中,我们使用了useState钩子来管理一个简单的计数器状态。

4. 运行Lint检查

最后,运行lint检查来验证代码是否符合规范:

flutter analyze

如果flutter_hooks_lint_plugin检测到任何关于Hooks使用的不规范之处,它会在控制台中输出相应的错误信息。

通过以上步骤,你就可以在Flutter项目中集成并使用flutter_hooks_lint_plugin来确保Hooks的正确使用,并提升代码的整体质量。

回到顶部