Flutter对象转字符串插件to_string_plus的使用

Flutter对象转字符串插件to_string_plus的使用

Pub Package Build Status

一个基于build_runner生成类的toString方法的工具。

谁使用这个工具

那些厌倦了编写和维护toString()方法的人。

安装

在你的pubspec.yaml文件中添加依赖:

dependencies:
  to_string_plus: ^0.0.1

dev_dependencies:
  to_string_generator: ^0.0.1
  build_runner: ^1.7.1

使用

在你想要编写toString()方法的类中:

  • @ToString()注解类。
  • 覆盖toString方法。

示例代码:

/// cat.dart
import 'package:to_string_plus/to_string_plus.dart';

part 'cat.g.dart';

@ToString()
class Cat {
  Cat(this.color, this.weight);

  String color;
  double weight;

  @override
  String toString() {
    // [_$CatToString] 在 `cat.g.dart` 中生成,
    // 并返回类似于 "Cat{color: white, weight: 1.2}" 的字符串
    return _$CatToString(this);
  }
}

默认情况下,getter、静态字段和私有字段不会在toString中显示。但是你可以使用@ToString()来使它们显示。

示例代码:

/// cat.dart
import 'package:to_string_plus/to_string_plus.dart';

part 'cat.g.dart';

@ToString()
class Cat {

  @ToString()
  static int leg = 4;

  Cat(this.color, this.weight, this.wings);

  String color;
  double weight;
  String wings;

  String _heart = "warm";

  @ToString()
  bool get hasWings => wings != null;

  @override
  String toString() {
    // [_$CatToString] 在 `cat.g.dart` 中生成,
    // 并返回类似于 "Cat{leg: Cat.leg, color: white, weight: 1.2, wings: null, _heart: warm, hasWings: false}" 的字符串
    return _$CatToString(this);
  }
}

父类和混入类

如果你在父类或混入类上使用@ToString()注解,它们的字段(公共字段和其他带有@ToString()的字段)将包含在基类的方法toString中。

示例代码:

/// cat.dart
@ToString()
class Animal {
  bool needOxygen = true;
}

@ToString()
class Rocket {
  bool canFly = true;
}

@ToString()
class Cat extends Animal with Rocket{
  String name;

  @override
  String toString() {
    // [_$CatToString] 在 `cat.g.dart` 中生成,
    // 并返回类似于 "Cat{needOxygen: true, canFly: true, name: kitty}" 的字符串
    return _$CatToString(this);
  }
}

支持格式化输出

格式化输出支持嵌套类缩进!

示例输出:

Cat{
  classify: Animal,
  color: red,
  weight: 12.0,
  wings: has,
  ball: Ball{         <= 嵌套
    color: red,
  },
}

有两种方式可以启用格式化输出:

  • 使用@ToString()注解:
ToString(
    prettyPrint: true,

    // 默认为 "  "
    indent: "  "
)
/// class Cat {...
  • 创建一个build.yaml文件并启用所有类的格式化输出:
targets:
  $default:
    builders:
      to_string_generator|to_string_plus:
        options:
          prettyPrint: true
          indent: "  "

最后,我们使用build_runner

在flutter中运行:

flutter packages pub run build_runner build

在dart中运行:

pub run build_runner build

更多关于Flutter对象转字符串插件to_string_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter对象转字符串插件to_string_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


to_string_plus 是一个 Flutter 插件,它可以帮助开发者快速将 Dart 对象转换为字符串。这对于调试、日志记录或需要将对象转换为字符串的场景非常有用。下面是如何使用 to_string_plus 插件的详细步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  to_string_plus: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 to_string_plus 包:

import 'package:to_string_plus/to_string_plus.dart';

3. 使用 @ToString() 注解

你可以在类上使用 @ToString() 注解来自动生成 toString() 方法。这个注解会自动生成一个包含类所有字段的 toString() 方法。

@ToString()
class Person {
  final String name;
  final int age;

  Person(this.name, this.age);
}

void main() {
  var person = Person('Alice', 30);
  print(person.toString());  // 输出: Person(name: Alice, age: 30)
}

4. 自定义 toString() 方法

如果你需要自定义 toString() 方法的输出,你可以手动实现 toString() 方法,或者使用 @ToString() 注解的参数来调整输出。

@ToString(includePrivate: true, includeSuper: true)
class Employee extends Person {
  final double salary;

  Employee(String name, int age, this.salary) : super(name, age);
}

void main() {
  var employee = Employee('Bob', 25, 50000.0);
  print(employee.toString());  // 输出: Employee(name: Bob, age: 25, salary: 50000.0)
}

5. 其他功能

to_string_plus 还支持其他一些功能,比如:

  • includePrivate: 是否包含私有字段。
  • includeSuper: 是否包含父类的字段。
  • exclude: 排除某些字段。
@ToString(includePrivate: false, exclude: ['age'])
class Student extends Person {
  final int grade;

  Student(String name, int age, this.grade) : super(name, age);
}

void main() {
  var student = Student('Charlie', 20, 10);
  print(student.toString());  // 输出: Student(name: Charlie, grade: 10)
}

6. 生成代码

to_string_plus 使用 Dart 的代码生成功能。为了生成代码,你需要运行以下命令:

flutter pub run build_runner build
回到顶部