I have this problem:
I have an array :
[
{
"name": "John",
},
{
"name": "Antonio",
},
{
"name": "Simon",
}
]
I use built_value, as follows I'm trying to deserialize a json string:
library name;
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'name.g.dart';
abstract class Name implements Built<Name, NameBuilder> {
String get name;
Name._();
factory Name([updates(NameBuilder b)]) = _$Name;
String toJson() {
return json.encode(serializers.serializeWith(Name.serializer, this));
}
static Name fromJson(String jsonString) {
return serializers.deserializeWith(
Name.serializer, json.decode(jsonString));
}
static Serializer<Name> get serializer => _$nameSerializer;
}
As I understand it, I will get the name, but how do I get The NameResult list from this?
Now I tried to do it this way:
library name_result;
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'name_result.g.dart';
abstract class NameResult implements Built<NameResult, NameResultBuilder> {
BuiltList<Name> get nameResult;
NameResult._();
factory NameResult([updates(NameResultBuilder b)]) = _$NameResult;
String toJson() {
return json.encode(serializers.serializeWith(NameResult.serializer, this));
}
static NameResult fromJson(String jsonString) {
return serializers.deserializeWith(
NameResult.serializer, json.decode(jsonString));
}
static Serializer<NameResult> get serializer => _$nameResultSerializer;
}
But I get the following error :
failed due to: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' in type cast occurred in Instance of 'NameBloc'.
How can I solve this?
serializers.dart
:
const builtListString = FullType(
BuiltList,
[FullType(String)],
);
...
final standardSerializers = (serializers.toBuilder()
..addBuilderFactory(
builtListString,
() => ListBuilder<String>(),
)
..add(Iso8601DateTimeSerializer())
..addPlugin(StandardJsonPlugin()))
.build();
final json = jsonDecode('[{ ... }]');
final names = standardSerializers.deserialize(
json,
specifiedType: builtListString,
) as BuiltList<String>;