프로그램으로 Dart 코드를 만들어 보십시오
freezed와 모조된build를 가지고 있습니다runner로 코드를 생성하는 시스템의 패키지가 있습니다. 그러나 처음에 프로그램으로Dart 코드를 생성하려면 어떻게 해야 합니까?신경 쓰이니까 한번 해 봐.
code_builder
code_builder 패키지를 사용하면 프로그램에서 Dart 코드를 생성할 수 있습니다.
import 'package:code_builder/code_builder.dart';
import 'package:dart_style/dart_style.dart';
void main() {
final animal = Class((b) => b
..name = 'Animal'
..extend = refer('Organism')
..methods.add(Method.returnsVoid((b) => b
..name = 'eat'
..body = const Code("print('Yum');"))));
final emitter = DartEmitter();
print(DartFormatter().format('${animal.accept(emitter)}'));
}
README의 샘플 코드는 이렇습니다.정의 클래스, 정의 방법, 출력하면 완성.쉽게 사용할 수 있어요.class Animal extends Organism {
void eat() => print('Yum!');
}
dart_스타일 포장을 사용했지만 전선을 정돈해 감각이 좋은 물건입니다.일단 넣으면 돼.・code프로그램으로 코드를 만드는 녀석
데이터스타일: 생성된 코드를 성형한 녀석
JSON을 기반으로 Dart 코드를 만들어 봅니다.
실제 사용처로는 모조를 기반으로 코드를 만들거나, 어떤 구조화된 정보가 기재된 파일(JSON이나 YAML 등)을 기반으로 코드를 만드는 느낌이라고 생각한다.번거로운 일을 줄일 것 같다.
여기서 JSON을 정의하고 이를 바탕으로 코드를 만들어 보려고 합니다.시도해 본 전체적인 상황은 이렇다.
JSON
{
"User": {
"id": "String",
"age": "int",
}
}
을 정의할 때class User {
User({this.id, this.age})
final String id;
final int age;
}
같은 느낌의 코드를 만들었으면 좋겠어요.전체 코드
전체적으로 JSON에서 데이터를 생성할 수 있는 코드라는 느낌이 든다.
// @dart=2.9
import 'dart:convert';
import 'package:code_builder/code_builder.dart';
import 'package:dart_style/dart_style.dart';
void main() {
final json = '''
{
"User": {
"id": "String",
"name": "String",
"age": "int",
"createdAt": "DateTime",
"updatedAt": "DateTime"
},
"Post": {
"id": "String",
"title": "String",
"body": "String",
"createdAt": "DateTime",
"updatedAt": "DateTime"
}
}
''';
final emitter = DartEmitter();
final formatter = DartFormatter();
final data = jsonDecode(json) as Map<String, dynamic>;
for (final entry in data.entries) {
final fields = entry.value as Map<String, dynamic>;
final klass = Class((b) {
// クラス名
b.name = entry.key;
// コンストラクタ
b.constructors.add(Constructor(
// Namedパラメータ
(b) => b.optionalParameters.addAll([
for (final entry in fields.entries)
Parameter((b) => b
..name = entry.key
..named = true
..toThis = true)
]),
));
// インスタンス変数
b.fields.addAll([
for (final entry in fields.entries)
Field((b) => b
..name = entry.key
..modifier = FieldModifier.final$
..type = Reference(entry.value)),
]);
});
// クラスをコードとして出力
print(formatter.format('${klass.accept(emitter)}'));
}
}
class User {
User({this.id, this.name, this.age, this.createdAt, this.updatedAt});
final String id;
final String name;
final int age;
final DateTime createdAt;
final DateTime updatedAt;
}
class Post {
Post({this.id, this.title, this.body, this.createdAt, this.updatedAt});
final String id;
final String title;
final String body;
final DateTime createdAt;
final DateTime updatedAt;
}
는 기본적으로 클래스에 대해 구조기나 변수 같은 정의할 요소를 계속 증가하면 된다.어떤 요소든 XxBuilder를 통해 상세한 요소를 추가할 수 있기 때문에 매우 간단하다.하지만 인상 속의 처리가 어떤 요소인지 사용해보지 않으면 모르는 부분도 있으니 시도와 오류를 반복해 보자.최후
비교적 간단한 코드라면 간단하게 생성할 수 있다.복잡한 코드라도 노력만 하면 만들 수 있지만 단순히 귀찮을 수도 있다.
다음은build나는 runner를 통해 코드 생성을 시도하고 싶다.
제작 학습, Flutter 및 Firebase 응용 프로그램 개발
나는 Flutter와Firebase를 이용한 응용 개발과 관련된 서적을 총결하였다.
Flutter에서 어플리케이션 개발 시작
Reference
이 문제에 관하여(프로그램으로 Dart 코드를 만들어 보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/umatoma/articles/ef2f518a06df76텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)