私は、提供された回答からさらに詳細を期待していました。彼らは良い提案であったにもかかわらず、私が理解するにはあまりにも一般的でした。私自身の研究をした後、他の誰かの時間を節約することを期待して、上記のJSONの例に実装を分けます。だからここに私は、その後の手順です:私のフラッタープロジェクトで
dependencies:
built_value: ^1.0.1
built_collection: ^1.0.0
dev_dependencies:
build_runner: ^0.3.0
built_value_generator:^1.0.1
- 私はツールと呼ばれるフォルダを作成しました。その中にbuild.dartとwatch.dartの2つのファイルを置いています。これらのファイルの存在の実装がある私は私のJSON文字列をシリアル化でしょうserializers.dartファイルを作成し
build.dart
// Copyright (c) 2015, Google Inc. Please see the AUTHORS file for details.
// All rights reserved. Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import 'dart:async';
import 'package:build_runner/build_runner.dart';
import 'package:built_value_generator/built_value_generator.dart';
import 'package:source_gen/source_gen.dart';
/// Example of how to use source_gen with [BuiltValueGenerator].
///
/// Import the generators you want and pass them to [build] as shown,
/// specifying which files in which packages you want to run against.
Future main(List<String> args) async {
await build(
new PhaseGroup.singleAction(
new GeneratorBuilder([new BuiltValueGenerator()]),
new InputSet('built_value_example', const [
'lib/model/*.dart',
'lib/*.dart',
])),
deleteFilesByDefault: true);
}
watch.dart
// Copyright (c) 2016, Google Inc. Please see the AUTHORS file for details.
// All rights reserved. Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import 'dart:async';
import 'package:build_runner/build_runner.dart';
import 'package:built_value_generator/built_value_generator.dart';
import 'package:source_gen/source_gen.dart';
/// Example of how to use source_gen with [BuiltValueGenerator].
///
/// This script runs a watcher that continuously rebuilds generated source.
///
/// Import the generators you want and pass them to [watch] as shown,
/// specifying which files in which packages you want to run against.
Future main(List<String> args) async {
watch(
new PhaseGroup.singleAction(
new GeneratorBuilder([new BuiltValueGenerator()]),
new InputSet('built_value_example', const [
'lib/model/*.dart',
'lib/*.dart'])),
deleteFilesByDefault: true);
}
- 下回っショー私のカスタムダーツオブジェクトと私のモデルオブジェクトperson.dart
serializers.dart
library serializers;
import 'package:built_collection/built_collection.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'model/person.dart';
part 'serializers.g.dart';
Serializers serializers = (
_$serializers.toBuilder()..addPlugin(new StandardJsonPlugin())
).build();
person.dart
library person;
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'person.g.dart';
abstract class Person implements Built<Person, PersonBuilder> {
String get name;
int get age;
BuiltList<Car> get cars;
Person._();
factory Person([updates(PersonBuilder b)]) = _$Person;
static Serializer<Person> get serializer => _$personSerializer;
}
abstract class Car implements Built<Car, CarBuilder> {
String get name;
BuiltList<String> get models;
Car._();
factory Car([updates(CarBuilder b)]) = _$Car;
static Serializer<Car> get serializer => _$carSerializer;
}
上記の4つのファイルを作成したら、それはいくつかのコンパイルエラーが表示されます。まだ気にしないでください。これは、build.dartファイルがまだ実行されていないためです。このステップでは、build.dartを実行します。 Webstormを使用している場合は、単にbuild.dartを右クリックし、 "Run build.dart"を押してください。これにより、 "person.g.dart"と "serializers.g.dart"という2つのファイルが作成されます。注意深く気付いた場合は、build.dartファイルで、 'lib/model/.dart'と 'lib/ .dart'と入力します。ビルドは、指定されたパスを通ってファイルを探す場所を知り、 "何か"が含まれているファイルを探します。したがって、build.dartファイルを実行する前にそれらのファイルにその行を保持することが重要です。
最後に、main.dartファイルでシリアライザを使用してjson文字列をカスタムダーツオブジェクトクラスPersonにシリアル化します。私のmain.dartでは、私は
main.dart
Person _person;
@override
void initState() {
super.initState();
String json = "{"
"\"name\":\"John\",\"age\":30,\"cars\": "
"["
"{ \"name\":\"Ford\", \"models\":[ \"Fiesta\", \"Focus\", \"Mustang\" ] },"
"{ \"name\":\"BMW\", \"models\":[ \"320\", \"X3\", \"X5\" ] },"
"{ \"name\":\"Fiat\", \"models\":[ \"500\", \"Panda\" ] }"
"]}";
setState(() {
_person = serializers.deserializeWith(
Person.serializer, JSON.decode(json));
});
}
私のサンプルプロジェクトは、あなたがジャガーシリアライザを使用することができますGitHubのBuilt value sample project
こんにちは、ロバート。お返事をありがとうございます!私はまだこれがどのように動作するのか混乱しています。申し訳ありませんが、フラッタとダーツの新人です。あなたの答えに詳細を追加できますか?または、詳細を示す他のリンクを教えてください。私はまだ私が与えたJSONの例でこれがどのように機能するのかよく分かりません – user3217522