You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级空安全后built_value报错:Serializer<dynamic>无法赋值给Serializer<SingleItemType>

报错原因

空安全版本的built_value强化了泛型类型校验,serializers.serializerForType()方法返回值类型为Serializer<dynamic>,而deserializeWith<SingleItemType>要求入参为Serializer<SingleItemType>,两者类型不匹配触发编译错误。

修复方案

在获取到对应类型的序列化器后,手动执行泛型类型强转即可,仅需要修改_deserialize方法中的deserializeWith调用行:

return serializers.deserializeWith<SingleItemType>(
  // 新增as强转,将dynamic类型的序列化器转为指定泛型的序列化器
  serializers.serializerForType(SingleItemType)! as Serializer<SingleItemType>,
  value,
);
修改后完整代码
import 'package:chopper/chopper.dart';
import 'package:built_collection/built_collection.dart';
import 'package:flutter_netflix_responsive_ui/models/serializers.dart';

class BuiltValueConverter extends JsonConverter {

  @override
  Response<BodyType> convertResponse<BodyType, SingleItemType>(
    Response response) {

    final Response dynamicResponse = super.convertResponse(response);
    final BodyType customBody =
        _convertToCustomObject<SingleItemType>(dynamicResponse.body);

    return dynamicResponse.copyWith<BodyType>(body: customBody);
  }

  dynamic _convertToCustomObject<SingleItemType>(dynamic element) {
    // 如果响应应返回的类型已明确设置为dynamic Map,则无需转换
    if (element is SingleItemType) return element;

    if (element is List)
      return _deserializeListOf<SingleItemType>(element);
    else
      return _deserialize<SingleItemType>(element);
  }

  BuiltList<SingleItemType> _deserializeListOf<SingleItemType>(
    List dynamicList,
  ) {
    // 生成存储单个自定义对象的BuiltList
    return BuiltList<SingleItemType>(
      dynamicList.map((element) => _deserialize<SingleItemType>(element)),
    );
  }

  SingleItemType? _deserialize<SingleItemType>(
    Map<String, dynamic> value,
  ) {
    // 反序列化后返回对应BuiltValue类型的泛型参数
    return serializers.deserializeWith<SingleItemType>(
      serializers.serializerForType(SingleItemType)! as Serializer<SingleItemType>,
      value,
    );
  }
}

内容的提问来源于stack exchange,提问作者Ngodiseni Netshifhefhe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:36:03