Flutter架构规范检查插件clean_architecture_lint的使用

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

Flutter架构规范检查插件clean_architecture_lint的使用

  • clean_architecture版本 clean_architecture大小 clean_architecture问题 clean_architecture喜欢数
  • 自定义的lint规则用于Clean Architecture。

使用

pubspec.yaml文件中添加以下依赖项:

dev_dependencies:
  custom_lint: any
  clean_architecture: any

接下来,我们将展示如何在Flutter项目中使用clean_architecture_lint插件。我们创建一个简单的Flutter应用,并使用该插件进行架构规范检查。

示例代码

example/lib/main.dart
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 这个小部件是你的应用程序的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // 这是你的应用程序的主题。
        //
        // 尝试这样做:运行你的应用程序(使用`flutter run`)。你会看到应用程序有一个蓝色工具栏。然后,不退出应用程序,
        // 将颜色方案中的seedColor改为Colors.green,并触发热重载(保存更改或按热重载按钮,如果使用命令行启动应用程序,则按`r`)。
        //
        // 注意:计数器不会重置为零;应用程序的状态在重新加载过程中不会丢失。要重置状态,请使用热重启。
        //
        // 这也适用于代码,而不仅仅是值:大多数代码更改可以通过简单的热重载来测试。
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // 这个小部件是你的应用程序的主页。它是有状态的,意味着它有一个包含影响其外观的字段的State对象。
  // 这个类是状态的配置。它保留了由父组件(在这个例子中是App小部件)提供的值(在这个例子中是标题),并在构建方法中使用这些值。
  // 在Widget子类中的字段总是标记为`final`。

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  int aa = 0;

  void _incrementCounter() {
    setState(() {
      // 这次调用setState告诉Flutter框架某些东西已经改变,这会导致它重新运行下面的构建方法,
      // 因此显示可以反映更新后的值。如果我们不调用setState()改变_counter,那么构建方法将不会被再次调用,因此什么都不会发生。
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 每次调用setState时,此方法都会重新运行,例如上面的_incrementCounter方法所做的那样。
    //
    // Flutter框架已被优化为快速重新运行构建方法,因此你可以只需重建需要更新的部分,而不是逐个更改小部件实例。
    return Scaffold(
      appBar: AppBar(
        // 尝试这样做:将这里的颜色更改为特定颜色(可能是Colors.amber?),并触发热重载以查看AppBar颜色变化,而其他颜色保持不变。
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        // 这里我们从MyHomePage对象中获取值,该对象是由App.build方法创建的,并将其用于设置我们的appbar标题。
        title: Text(widget.title),
      ),
      body: Center(
        // Center是一个布局小部件。它接受一个子元素并将其中心定位到父元素的中心。
        child: Column(
          // Column也是一个布局小部件。它接受一个小部件列表,并垂直排列它们。
          // 默认情况下,它水平调整自身大小以适应其子元素,并尝试与其父元素一样高。
          //
          // Column有许多属性可以控制其自身的大小以及如何放置其子元素。在这里,我们使用mainAxisAlignment来垂直居中子元素;
          // 主轴是垂直的(交叉轴将是水平的)。
          //
          // 尝试这样做:启用调试绘制(在IDE中选择“切换调试绘制”操作,或者在控制台中按`p`),可以看到每个小部件的线框。
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              '你已经按了按钮这么多次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ), // 这个尾随逗号使自动格式化更好看。
    );
  }
}

更多关于Flutter架构规范检查插件clean_architecture_lint的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter架构规范检查插件clean_architecture_lint的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,为了确保遵循Clean Architecture规范,使用clean_architecture_lint插件可以帮助开发者自动检查和强制执行架构规则。以下是如何在Flutter项目中集成和使用clean_architecture_lint插件的示例代码和步骤。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加clean_architecture_lint依赖:

dev_dependencies:
  clean_architecture_lint: ^latest_version # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 配置分析选项

在项目的根目录下创建一个或编辑现有的.dart_tool/analysis_options.yaml文件,添加或更新以下配置以启用lint规则:

include: package:clean_architecture_lint/analysis_options.yaml

这行配置告诉Dart分析工具包含并使用clean_architecture_lint提供的分析规则。

3. 项目结构示例

为了遵循Clean Architecture,你的项目结构可能看起来像这样:

my_flutter_app/
├── lib/
│   ├── presentation/
│   │   ├── screens/
│   │   │   └── home_screen.dart
│   │   └── widgets/
│   │       └── my_widget.dart
│   ├── domain/
│   │   ├── entities/
│   │   │   └── user.dart
│   │   ├── usecases/
│   │   │   └── get_user_details.dart
│   │   └── repositories/
│   │       └── user_repository.dart
│   └── data/
│       ├── datasources/
│       │   └── user_data_source.dart
│       ├── models/
│       │   └── user_model.dart
│       └── repositories/
│           └── user_repository_impl.dart
├── test/
│   ├── presentation/
│   ├── domain/
│   └── data/
├── .dart_tool/
│   └── analysis_options.yaml
├── pubspec.yaml
└── README.md

4. 示例代码和规则应用

确保你的代码遵循Clean Architecture原则。例如,一个典型的Use Case可能如下所示:

domain/usecases/get_user_details.dart

import 'package:dartz/dartz.dart';
import 'package:my_flutter_app/domain/entities/user.dart';
import 'package:my_flutter_app/domain/repositories/user_repository.dart';

class GetUserDetails {
  final UserRepository userRepository;

  GetUserDetails(this.userRepository);

  Future<Either<String, User>> execute(String userId) async {
    return await userRepository.getUserById(userId);
  }
}

data/repositories/user_repository_impl.dart

import 'package:my_flutter_app/data/datasources/user_data_source.dart';
import 'package:my_flutter_app/data/models/user_model.dart';
import 'package:my_flutter_app/domain/entities/user.dart';
import 'package:my_flutter_app/domain/repositories/user_repository.dart';

class UserRepositoryImpl implements UserRepository {
  final UserDataSource userDataSource;

  UserRepositoryImpl(this.userDataSource);

  @override
  Future<Either<String, User>> getUserById(String userId) async {
    final UserModel userModel = await userDataSource.getUserById(userId);
    return Right(userModel.toEntity());
  }
}

5. 运行分析

现在,当你运行flutter analyze命令时,clean_architecture_lint插件将自动检查你的代码结构是否符合Clean Architecture的规则。如果代码违反了任何规则,你将看到相应的警告或错误信息。

6. 持续集成

为了确保代码质量,你可以将flutter analyze命令集成到你的持续集成(CI)管道中。这样,每次代码提交时都会自动运行分析检查。

通过上述步骤和示例代码,你可以有效地在Flutter项目中使用clean_architecture_lint插件来维护和强制执行Clean Architecture规范。

回到顶部