Flutter类型定义插件dart_types的使用

Flutter类型定义插件dart_types的使用

dart_types 是一个用于构建和展示 Dart 类型图的工具。它有助于可视化和理解特定库或包的类型层次结构。

特性:

  • 可以生成给定 Dart 类型或给定库/库的类型图。
  • 可以生成 Mermaid 代码(作为代码、查看 URL、编辑 URL 或图像 URL)。
  • 列出路径内的所有类型。

注意:目前忽略泛型。

安装

要将该包作为 CLI 工具安装,运行以下命令:

dart pub global activate dart_types

可用命令包括:

Global options:
-h, --help            打印此使用信息。
-v, --[no-]verbose    输出详细信息。

可用命令:
list      列出给定 `path` 中的所有可用类型
mermaid   生成 Mermaid 图表(代码、编辑器 URL、查看器 URL 或图像 URL)

运行 "dart_types help <command>" 了解关于某个命令的更多信息

使用 dart_types mermaid

生成 Mermaid 图表(代码、编辑器 URL、查看器 URL 或图像 URL)

用法: dart_types mermaid [参数]
-h, --help                    打印此使用信息。
-p, --path                    指定包含类型(可以多个)的文件/项目的路径
-f, --filter                  使用模式过滤类型(可以多个)
-x, --[no-]ignore-privates    忽略所有私有类型

-t, --type                    限定类型层次结构到特定类型(可以多个)
-c, --code                    打印 Mermaid 图表代码
-u, --url                     生成一个指向 mermaid.live 图表查看器的 URL
-e, --url-edit                生成一个指向 mermaid.live 图表编辑器的 URL
-i, --url-image               生成一个指向 mermaid.ink 图像的 URL
-g, --graph-type              指定图表类型:Top Bottom, Bottom Up, Right Left, Left Right
                            [TB, BT, RL, LR (默认)]

注意:有关如何作为包使用的示例,请参阅 example 文件夹。

示例

运行以下命令:

dart_types mermaid --path /path/to/flutter/sdk/packages/flutter/lib --code -ignore-privates --type StatelessWidget

生成以下 Mermaid 图表代码:

%% To view the graph, copy the code below to:
%%  https://mermaid.live/
graph LR
    931422573("Object") --&gt; 639058955("Widget")
    639058955 --&gt; 464006715("StatelessWidget")
    639058955 --&gt; 416054233("PreferredSizeWidget")
    464006715 --&gt; 1056914755("Builder")
    464006715 --&gt; 262732828("CallbackShortcuts")
    464006715 --&gt; 337536055("CheckedModeBanner")
    464006715 --&gt; 610219950("Container")
    464006715 --&gt; 936772830("DefaultTextEditingShortcuts")
    464006715 --&gt; 162789820("DisplayFeatureSubScreen")
    464006715 --&gt; 609146547("ExcludeFocus")
    464006715 --&gt; 49112299("ExcludeFocusTraversal")
    464006715 --&gt; 747420043("GestureDetector")
    464006715 --&gt; 146799707("GridPaper")
    464006715 --&gt; 902421044("HeroMode")
    464006715 --&gt; 742478379("HtmlElementView")
    464006715 --&gt; 821894802("Icon")
    464006715 --&gt; 679314("ImageIcon")
    464006715 --&gt; 599778847("IndexedStack")
    464006715 --&gt; 386259944("KeyboardListener")
    464006715 --&gt; 756704846("KeyedSubtree")
    464006715 --&gt; 341174972("ModalBarrier")
    464006715 --&gt; 339198387("NavigationToolbar")
    464006715 --&gt; 409547886("OrientationBuilder")
    464006715 --&gt; 48107699("PageStorage")
    464006715 --&gt; 743848276("Placeholder")
    464006715 --&gt; 456230168("PlatformSelectableRegionContextMenu")
    464006715 --&gt; 42097335("PositionedDirectional")
    464006715 --&gt; 961235098("PreferredSize")
    464006715 --&gt; 1065842558("RawMagnifier")
    464006715 --&gt; 472365102("ReorderableDragStartListener")
    464006715 --&gt; 427683055("SafeArea")
    464006715 --&gt; 286068455("ScrollView")
    464006715 --&gt; 445477711("SingleChildScrollView")
    464006715 --&gt; 126306520("SliverConstrainedCrossAxis")
    464006715 --&gt; 592348889("SliverFillRemaining")
    464006715 --&gt; 83650908("SliverFillViewport")
    464006715 --&gt; 827955045("SliverPersistentHeader")
    464006715 --&gt; 378627107("SliverSafeArea")
    464006715 --&gt; 716412635("SliverVisibility")
    464006715 --&gt; 460084456("Spacer")
    464006715 --&gt; 900189511("Text")
    464006715 --&gt; 535960679("Title")
    464006715 --&gt; 638939478("TwoDimensionalScrollView")
    464006715 --&gt; 661441418("UnconstrainedBox")
    464006715 --&gt; 521488773("View")
    464006715 --&gt; 956347801("ViewAnchor")
    464006715 --&gt; 740469611("Visibility")
    760877175("BoxScrollView") --&gt; 733462125("GridView")
    760877175 --&gt; 167943787("ListView")
    416054233 --&gt; 961235098
    472365102 --&gt; 721803713("ReorderableDelayedDragStartListener")
    286068455 --&gt; 760877175
    286068455 --&gt; 257018606("CustomScrollView")

style 464006715 color:#7FFF7F

注意:要查看输出,请将图表粘贴到 https://mermaid.live

或者,你可以直接使用以下命令生成 URL:

dart_types mermaid --path /path/to/flutter/sdk/packages/flutter/lib --url -ignore-privates --type StatelessWidget

更多关于Flutter类型定义插件dart_types的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter类型定义插件dart_types的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_types 是一个用于生成 Dart 类型定义的 Flutter 插件。它可以帮助开发者自动生成类型定义文件,特别是在处理 JSON 数据时,可以减少手动编写模型类的工作量。

安装 dart_types 插件

首先,你需要在 pubspec.yaml 文件中添加 dart_types 插件的依赖:

dev_dependencies:
  dart_types: ^1.0.0

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

使用 dart_types 生成类型定义

假设你有一个 JSON 文件 user.json,内容如下:

{
  "name": "John Doe",
  "age": 30,
  "email": "john.doe@example.com"
}

你可以使用 dart_types 来生成对应的 Dart 类。

  1. 创建 build.yaml 文件

    在项目根目录下创建一个 build.yaml 文件,内容如下:

    targets:
      $default:
        builders:
          dart_types|dart_types:
            enabled: true
    
  2. 运行生成命令

    在终端中运行以下命令来生成类型定义:

    flutter pub run build_runner build
    

    这将会在 lib/models 目录下生成一个 user.dart 文件,内容如下:

    // GENERATED CODE - DO NOT MODIFY BY HAND
    
    part of 'user.dart';
    
    class User {
      final String name;
      final int age;
      final String email;
    
      User({
        required this.name,
        required this.age,
        required this.email,
      });
    
      factory User.fromJson(Map<String, dynamic> json) {
        return User(
          name: json['name'] as String,
          age: json['age'] as int,
          email: json['email'] as String,
        );
      }
    
      Map<String, dynamic> toJson() {
        return {
          'name': name,
          'age': age,
          'email': email,
        };
      }
    }
    
  3. 使用生成的类

    现在你可以在你的项目中使用生成的 User 类:

    import 'models/user.dart';
    
    void main() {
      final userJson = {
        "name": "John Doe",
        "age": 30,
        "email": "john.doe@example.com"
      };
    
      final user = User.fromJson(userJson);
      print(user.name); // 输出: John Doe
    }
    

自定义生成选项

你可以通过配置 build.yaml 文件来自定义生成的代码。例如,你可以指定生成的类名、文件路径等。

targets:
  $default:
    builders:
      dart_types|dart_types:
        enabled: true
        options:
          class_name: "CustomUser"
          output_directory: "lib/custom_models"
回到顶部