Menggunakan tumpukan source_gen untuk membuat generator kode, bagaimana saya bisa membuat generator yang menghasilkan kode yang akan menjadi input generator lain (lebih khusus json_serializable
)?
Sebagai contoh, pertimbangkan:
class Example extends Generator {
@override
String generate(LibraryReader library, BuildStep buildStep) {
return '''
@JsonSerializable(nullable: false)
class Person {
final String firstName;
final String lastName;
final DateTime dateOfBirth;
Person({this.firstName, this.lastName, this.dateOfBirth});
factory Person.fromJson(Map<String, dynamic> json) => _PersonFromJson(json);
Map<String, dynamic> toJson() => _PersonToJson(this);
}
''';
}
}
Ini adalah contoh generator kode yang menghasilkan kode yang kemudian perlu dikirim json_serializable
Apa yang bisa saya lakukan sehingga json_serializable
menghasilkan dengan benar di sini?
await Process.start('bash',arguments,runInShell: true);
tetapi ini adalah cara terakhir untuk bermain. sebenarnya saya baru saja mencoba semua logika pembuatan kode satu hari yang lalu pada tautan repo ini jadi .. saya pikir saya bisa membantu.flutter generate
/pub run build_runner build
. Kalau tidak, akan sangat tidak biasa untuk digunakan.Jawaban:
Periksa dokumentasi file konfigurasi build.yaml untuk info lebih lanjut, tetapi saya pikir Anda harus menggunakan
applies_builders
param yang memungkinkan untuk mengeksekusi build lain setelah yang ditentukan.Contoh ini memperlihatkan pembangun yang menghasilkan file .tar.gz dan kemudian menjalankan build lain yang menggunakan file .tar.gz sebagai input
jadi dengan
source_gen
Anda harus menerapkan untuk membangun Andadan mengkonfigurasi pembangun lainnya
sumber
Tidak mungkin hanya dengan anotasi karena mungkin ada dua paket yang keduanya memiliki
@JsonSerializable
anotasiAda dua situtations:
Anda tahu generator apa yang harus dijalankan setelah generator Anda.
Sayangnya saat ini tidak ada cara untuk memberi tahu source_gen bahwa generator Anda dapat menghasilkan kode yang membutuhkan pembuatan kode.
Saya membuat masalah di sini https://github.com/dart-lang/source_gen/issues/442 jika Anda ingin berlangganan
sumber
Anda bisa mendekode JSON dengan memanggil
jsonDecode()
fungsi, dengan string JSON sebagai argumen metode.Sekarang, Gunakan
User.fromJson()
konstruktor, untuk membuat instance Pengguna baru dari struktur peta dantoJson()
metode, yang mengubah instance Pengguna menjadi peta.pegawai.dart
json_serializable
adalah generator kode sumber otomatis yang menghasilkan boilerplate serialisasi JSON untuk Anda.Anda memerlukan satu dependensi reguler, dan dua dependensi dev untuk disertakan
json_serializable
dalam proyek Anda.Untuk detail lebih lanjut tentang serialisasi JSON Anda dapat merujuk di sini
Anda juga dapat menggunakan perpustakaan Asap .
Ini adalah bagian dari fungsi Mirrors tetapi memiliki implementasi berbasis Mirror dan juga Codegen. Ini ditulis oleh tim PolymerDart, jadi sedekat mungkin dengan "Resmi" yang akan kita dapatkan.
Saat mengembangkan, itu akan menggunakan encoding / decoding berbasis Mirrors; tetapi untuk penerbitan Anda dapat membuat transformator kecil yang akan menghasilkan kode.
Seth Ladd membuat contoh kode di sini , yang saya sedikit diperluas untuk mendukung objek anak:
sumber
json_serializable
hanyalah sebuah contoh dan bisa berupa apa saja