首页 > 解决方案 > 由于以下原因而失败:状态不佳:BuiltList 没有构建器工厂

问题描述

我正在builtvalue为我的PODO班级使用

以下是我的 json 回复

{
    "status": 1,
    "msg": "Success",
    "allotmentMasterID": "1",
    "allotmentInfoID": "1",
    "category": [
        {
            "categoryID": "1",
            "categoryName": "Major",
            "selectedCount": "0",
            "status": 1
        },
        {
            "categoryID": "2",
            "categoryName": "Mandatory",
            "selectedCount": "0",
            "status": 0
        },
        {
            "categoryID": "3",
            "categoryName": "Minor",
            "selectedCount": "0",
            "status": 0
        }
    ]
}

built value为此创建了一个

以下是课程

library specialisation_model_first_screen;

import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';

part 'specialisation_model_first_screen.g.dart';

abstract class SpecialisationModelFirstScreen
    implements
        Built<SpecialisationModelFirstScreen,
            SpecialisationModelFirstScreenBuilder> {
  SpecialisationModelFirstScreen._();

  factory SpecialisationModelFirstScreen(
          [updates(SpecialisationModelFirstScreenBuilder b)]) =
      _$SpecialisationModelFirstScreen;

  @nullable
  @BuiltValueField(wireName: 'status')
  int get status;
  @nullable
  @BuiltValueField(wireName: 'msg')
  String get msg;
  @nullable
  @BuiltValueField(wireName: 'allotmentMasterID')
  String get allotmentMasterID;
  @nullable
  @BuiltValueField(wireName: 'allotmentInfoID')
  String get allotmentInfoID;
  @nullable
  @BuiltValueField(wireName: 'category')
  BuiltList<Category> get category;

  static Serializer<SpecialisationModelFirstScreen> get serializer =>
      _$specialisationModelFirstScreenSerializer;
}

abstract class Category implements Built<Category, CategoryBuilder> {
  Category._();

  factory Category([updates(CategoryBuilder b)]) = _$Category;

  @nullable
  @BuiltValueField(wireName: 'categoryID')
  String get categoryID;
  @nullable
  @BuiltValueField(wireName: 'categoryName')
  String get categoryName;
  @nullable
  @BuiltValueField(wireName: 'selectedCount')
  String get selectedCount;
  @nullable
  @BuiltValueField(wireName: 'status')
  int get status;

  static Serializer<Category> get serializer => _$categorySerializer;
}



library serializers;

import 'package:built_value/serializer.dart';

part 'package:dice_clutter/models/serializers/serializers.g.dart';

@SerializersFor(const [SpecialisationModelFirstScreen])

Serializers serializers = _$serializers;

Serializers standardSerializers = (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

以下是我的serializers.g.dart文件

part of serializers;
Serializers _$serializers = (new Serializers().toBuilder()
      ..add(SpecialisationModelFirstScreen.serializer))
    .build();

当我发出api请求时,我得到了正确的响应,但引发了以下错误

failed due to: Bad state: No builder factory for BuiltList<Category>. Fix by adding one, see SerializersBuilder.addBuilderFactory.

这是build value图书馆本身的错误还是我做错了什么?

在某些情况下——我不完全理解具体原因——我的对象无法使用 StandartJsonPlugin 反序列化。

标签: dartflutter

解决方案


您需要将该类添加Category到可以序列化的类列表中:

@SerializersFor(const [
  SpecialisationModelFirstScreen,
  Category, <-- Category available for serialization
])

然后重新生成你的built_value类。

更多细节可以在这个答案中找到


推荐阅读