Flutter诊断工具插件witch_doctor的使用

Flutter诊断工具插件witch_doctor的使用

By: CenturyBoys

巫医 (Witch-doctor)

巫医是一个依赖注入的代码生成器。

主要概念:

  • 容器:如何注册接口、实现、注入类型、paramsnamedParams,这些都通过其名称进行作用域划分。
  • 生成器:这将为可能的可注入类创建所有必要的基础代码。

生成器 (Generator)

此库需要为可能的可注入类生成基础代码。巫医插件拥有自己的构建器 witchDoctorFactory,它将使用注解 @Antibiotic() 来生成注入代码。

你需要在你的 dev_dependencies 中添加 source_genbuild_runner,并运行 dart pub get

在你的类文件中,你需要添加部分导入,并注解你的类。

part 'your_class_file_name.g.dart';

abstract class Interface {
  int sum();
}

@Antibiotic()
class Impl extends Interface {
  int a;
  int b;

  Impl(this.a, this.b);

  @override
  int sum() {
    return a + b;
  }
}

接下来,生成代码,为此运行 dart run build_runner build

现在,如果一切顺利,你将在当前文件路径中找到一个名为 your_class_file_name.g.dart 的新文件,其中包含类 YourClassNamePythonPoison

容器 (Container)

你必须使用容器来注册你的注入。方法 getContainer 将提供一个带有一个注册方法的容器。容器按名称进行作用域划分,如果没有提供名称,它们将使用默认容器。以下是签名:

class TopHatContainer {
  void register<T>(
      InjectionType injectionType,
      PythonPoison instanceCallback,
      [
        List<dynamic> params = const [],
        Map<Symbol, dynamic>? namedParams = const {}
      ]
      );
}
  • 接口和实现的继承关系将会被检查,如果有任何问题会抛出异常。PythonPoison 类必须是从类型 T 继承的扩展类。
  • 注入类型将会被检查,如果有任何问题会抛出异常。有两种类型的注入:单例(singleton)和工厂(factory)。单例类型对于每次注入都会返回相同的实例,而工厂类型则会为每次注入返回一个新的实例。

你可以创建一个容器并注册它,然后下一步是什么?

要使用容器,你需要使用 load 方法加载它。当前容器是一个加载容器的扁平聚合,这意味着如果你有两个具有相同抽象类但不同实现的容器,并且你加载了两个容器,最后加载的容器将会覆盖之前的容器。

import 'package:witch_doctor/src/witch_doctor_container.dart';
import 'package:witch_doctor/witch_doctor.dart';

part 'your_class_file_name.g.dart';

abstract class InterfaceA {
  int sum();
}

@Antibiotic()
class ImplA extends InterfaceA {
  int a;
  int b;

  ImplA(this.a, this.b);

  @override
  int sum() {
    return a + b;
  }
}

void main() {
  // 创建带有名称 "container_name" 的容器
  TopHatContainer container = WitchDoctor.getContainer(name: "container_name");

  // 注册 `<Interface>` 传递注入类型、pythonPoison、默认参数和命名参数
  container.register<InterfaceA>(InjectionType.factory, ImplAPythonPoison(), [10], {"b": 20});

  // 加载容器
  WitchDoctor.load(name: "container_name");
}

解析 (Resolve)

巫医可以在任何地方被调用以解析依赖项。为此,请使用 resolve 方法。抽象类的签名将被检查,巫医将搜索已注册的接口以注入依赖项。

class WitchDoctor {
  static T resolve<T>();
}

示例代码

import 'package:witch_doctor/witch_doctor.dart';

import 'src/impl.dart';
import 'src/interface.dart';

void main() {
  // 创建带有名称 "container_name" 的容器
  TopHatContainer container = WitchDoctor.getContainer(name: "container_name");

  // 注册 `<Interface, Implementation>` 传递注入类型和默认参数
  container.register<Interface>(
      InjectionType.factory, ImplPythonPoison(), [10, 20], {});

  // 加载容器
  WitchDoctor.load(name: "container_name");

  // 使用接口解析实例
  Interface instance = WitchDoctor.resolve<Interface>();

  // 调用实现中的抽象方法 sum
  int value = instance.sum();

  print('value: $value');
}

更多关于Flutter诊断工具插件witch_doctor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter诊断工具插件witch_doctor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter doctor工具的详细步骤和代码案例(尽管flutter doctor本身不是一个插件,而是Flutter SDK自带的命令行工具)。这个工具用于诊断Flutter开发环境的配置问题。

使用Flutter Doctor工具

1. 安装Flutter SDK

首先,确保你已经安装了Flutter SDK。如果还没有安装,可以从Flutter官网下载并按照相应平台的安装指南进行安装。

2. 运行Flutter Doctor

在命令行(终端或命令提示符)中,运行以下命令来启动flutter doctor

flutter doctor

3. 分析输出

flutter doctor命令会检查你的开发环境,并输出一个报告,列出所有潜在的问题。以下是一个示例输出:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.8.1, on macOS 12.0.1 21A559 darwin-x64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] IntelliJ IDEA Community Edition (version 2021.2.3)
[✓] VS Code (version 1.63.2)
[✓] Connected device (3 available)

• No issues found!

如果看到No issues found!,这意味着你的开发环境配置正确。如果有任何问题,flutter doctor会列出每个问题并给出可能的解决方案。

4. 查看详细输出

如果你需要更详细的诊断信息,可以运行:

flutter doctor -v

这将提供每个检查项的详细信息,包括任何潜在问题的具体描述。

5. 示例代码(模拟环境配置)

虽然flutter doctor本身不是一个插件或代码,但你可以通过脚本自动化运行这个命令并解析其输出来辅助你的开发过程。以下是一个简单的bash脚本示例,用于运行flutter doctor并保存输出到文件:

#!/bin/bash

# 运行 flutter doctor 并保存输出到文件
flutter doctor -v > flutter_doctor_report.txt

# 提示用户检查报告
echo "Flutter doctor report saved to flutter_doctor_report.txt"

将上述代码保存为check_flutter_env.sh,然后在命令行中运行:

chmod +x check_flutter_env.sh
./check_flutter_env.sh

这将在当前目录下生成一个名为flutter_doctor_report.txt的文件,其中包含详细的flutter doctor输出。

总结

flutter doctor是一个强大的工具,用于确保你的Flutter开发环境配置正确。通过运行这个命令,你可以快速识别并解决任何潜在的问题。希望这个指南和代码示例能帮助你更好地使用flutter doctor

回到顶部