这是什么?
一些仅使用 package:analyzer 和 package:code_builder 从另一个 dart 代码构建 dart 代码的示例(即,没有 build_runner 或 build.yaml 文件)。
在 example 文件夹中,有三个独立的示例。每个示例都可以按如下方式执行:
[~/path/to/repo] dart run example/<file_name>.dart
ast_example- 展示了如何使用
package:analyzer从源代码生成抽象语法树 (AST)。 - 如何访问树中的元素。
- 展示了如何使用
code_builder- 展示了如何使用
package:code_builder以编程方式构建代码。
- 展示了如何使用
-
-
结合了以上两个示例来生成一个数据类。
-
简而言之,它将此作为输入
class Person { final String name; final String? nickname; final int age; final double height; final List<String> hobbies; }
- 以此作为输出
class Person { const Person({ required this.name, this.nickname, required this.age, required this.height, required this.hobbies, }); factory Person.fromMap(Map<String, dynamic> map) { return Person( name: map['name'], nickname: map['nickname'], age: map['age'].toInt(), height: map['height'].toDouble(), hobbies: List.from(map['hobbies']), ); } factory Person.fromJson(String source) => Person.fromMap(json.decode(source)); final String name; final String? nickname; final int age; final double height; final List<String> hobbies; Person copyWith({ String? name, String? nickname, int? age, double? height, List<String>? hobbies, }) { return Person( name: name ?? this.name, nickname: nickname ?? this.nickname, age: age ?? this.age, height: height ?? this.height, hobbies: hobbies ?? this.hobbies, ); } String toJson() => json.encode(toMap()); Map<String, dynamic> toMap() { return { 'name': name, 'nickname': nickname, 'age': age, 'height': height, 'hobbies': hobbies, }; } @override String toString() { return 'Person(name: $name, nickname: $nickname, age: $age, height: $height, hobbies: $hobbies)'; } @override bool operator ==(Object other) { if (identical(this, other)) return true; // TODO: handle list equality here return other is Person && other.name == name && other.nickname == nickname && other.age == age && other.height == height && other.hobbies == hobbies; } @override int get hashCode { return name.hashCode ^ nickname.hashCode ^ age.hashCode ^ height.hashCode ^ hobbies.hashCode; } }
-
免责声明
这些示例是(拙劣地)为学习目的而编写的,旨在理解这些包如何协同工作——仅此而已。