Flutter代码生成插件barrel_generator的使用

Flutter代码生成插件barrel_generator的使用

Barrel Generator 插件用于为Dart和Flutter项目中的每个文件夹生成barrel文件。一个barrel文件是一个导出目录中所有文件的文件。这在你有很多文件在一个目录中且希望一次性导入它们时非常有用。

开始使用

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

dependencies:
  barrel_annotation: ^1.0.0

dev_dependencies:
  build_runner: ^2.4.13
  barrel_generator: ^1.0.3

然后,用 BarrelConfig 注解装饰你的项目源根目录中的一个文件:

import 'package:barrel_annotation/barrel_annotation.dart';

@BarrelConfig(exclude: [
  'lib/lib.barrel.dart',
])
void main() {
  print('Hello, World!');
}

运行以下命令以生成barrel文件:

dart run build_runner build --delete-conflicting-outputs

特性

  • ✅ 为每个文件夹生成barrel文件
  • ✅ 排除文件和目录
  • ✅ 为Flutter项目生成barrel文件
  • ✅ 为Dart项目生成barrel文件
  • ✅ 为包生成barrel文件

配置

BarrelConfig 注解具有以下属性:

  • exclude: 一个包含要从barrel文件中排除的文件和目录的列表。

示例

假设你有以下目录结构:

lib/
  excluded/
    f.dart
    g.dart
  folder/
    subfolder/
    a.dart
    b.dart
    c.dart
  example.dart

配置如下:

import 'package:barrel_annotation/barrel_annotation.dart';

@BarrelConfig(exclude: [
  'lib/lib.barrel.dart',
  'lib/excluded/**',
])
void main() {
  print('Hello, World!');
}

生成的barrel文件结构将如下所示:

lib/
  excluded/
    f.dart
    g.dart
  folder/
    subfolder/
    a.dart
    b.dart
    c.dart
    folder.barrel.dart
  example.dart

lib/folder/folder.barrel.dart 的内容将如下所示:

// This file is generated by barrel_generator

// Barrel files
export 'subfolder/subfolder.barrel.dart';
// Other files
export 'c.dart';
export 'a.dart';
export 'b.dart';

更多关于Flutter代码生成插件barrel_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码生成插件barrel_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用barrel_generator插件来生成Barrel文件的代码案例。Barrel文件通常用于组织和管理Dart中的导出语句,使得在多个文件中引用时可以更方便地管理依赖。

步骤 1: 添加依赖

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

dev_dependencies:
  build_runner: ^2.1.4  # 确保build_runner是最新版本
  barrel_generator: ^latest_version  # 替换为最新的版本号

步骤 2: 创建文件结构

假设你有一个目录结构如下:

lib/
├── features/
│   ├── feature_a/
│   │   ├── models/
│   │   │   ├── model_a.dart
│   │   │   └── model_b.dart
│   │   └── barrel.dart  # 将生成的Barrel文件放在这里
│   └── feature_b/
│       ├── models/
│       │   ├── model_c.dart
│       │   └── model_d.dart
│       └── barrel.dart  # 将生成的Barrel文件放在这里
└── app.dart

步骤 3: 编写Dart文件

在每个子目录中创建一些示例Dart文件。例如,在feature_a/models/目录下创建model_a.dartmodel_b.dart

model_a.dart

// lib/features/feature_a/models/model_a.dart
export 'package:your_package_name/features/feature_a/models/model_a.dart' show ModelA;

class ModelA {
  String name;

  ModelA(this.name);
}

model_b.dart

// lib/features/feature_a/models/model_b.dart
export 'package:your_package_name/features/feature_a/models/model_b.dart' show ModelB;

class ModelB {
  int value;

  ModelB(this.value);
}

注意:在真实项目中,你不需要再次导出自己的文件,这里只是为了演示完整的路径。

步骤 4: 创建Barrel文件模板

在每个需要生成Barrel文件的目录中创建一个空的barrel.dart文件。例如,在feature_a/models/目录下创建barrel.dart

feature_a/models/barrel.dart

// This is an auto-generated file. Do not edit!

步骤 5: 配置build.yaml

在项目根目录下创建或编辑build.yaml文件,以配置barrel_generator

targets:
  $default:
    builders:
      barrel_generator:barrel:
        enabled: true
        generate_for:
          - lib/features/**/*.dart

步骤 6: 运行Build Runner

在终端中运行以下命令来生成Barrel文件:

flutter pub get
flutter pub run build_runner build

结果

运行完上述命令后,barrel_generator将自动生成Barrel文件,例如feature_a/models/barrel.dart可能看起来像这样:

feature_a/models/barrel.dart

// This is an auto-generated file. Do not edit!
export 'model_a.dart';
export 'model_b.dart';

现在你可以在feature_a或更高层级的文件中通过单个导入语句来引用feature_a/models中的所有导出内容:

feature_a/some_file.dart

import 'package:your_package_name/features/feature_a/models/barrel.dart';

void someFunction() {
  ModelA modelA = ModelA('Name');
  ModelB modelB = ModelB(42);
}

这样,你就成功地使用barrel_generator插件在Flutter项目中生成并使用了Barrel文件。

回到顶部