我有一个需要保存的配置单元对象列表,其中还有另一个配置单元对象列表,例如:

@freezed
class CorrectionDestination extends HiveObject with _$CorrectionDestination {
  CorrectionDestination._();

  @HiveType(typeId: 4)
  factory CorrectionDestination({
    @HiveField(0) required int stepId,
    @HiveField(1) required String stepTitle,
    @HiveField(2) required String stepType,
    @HiveField(3) required bool isCurrentStep,
    @HiveField(4) required int projectStepId,
    @HiveField(5)
    @JsonKey(defaultValue: [])
    required List<DestinationResults> results,
  }) = _CorrectionDestination;

  factory CorrectionDestination.fromJson(Map<String, dynamic> json) =>
      _$CorrectionDestinationFromJson(json);
}

我的目的地结果看起来像是

@freezed
class DestinationResults extends HiveObject with _$DestinationResults {
  DestinationResults._();

  @HiveType(typeId: 5)
  factory DestinationResults({
    @HiveField(0) required int stepResultId,
    @HiveField(1) required String stepResultTitle,
  }) = _DestinationResults;

  factory DestinationResults.fromJson(Map<String, dynamic> json) =>
      _$DestinationResultsFromJson(json);
}

当我try 将列表转换为LIST时,会出现问题:

final box = await Hive.openBox<List<CorrectionDestination>>('correctionDestinations');

虽然我可以清楚地看到print语句中的对象(如果我们将从OpenBox函数中删除泛型类型):

final availableDestinations = box.get(inspectionId);
print(availableDestinations);

我已经仔细判断了我的适配器,并有以下Flutter doctor 输出:

[✓] Flutter (Channel stable, 3.16.3, on macOS 14.2 23C64 darwin-arm64, locale en-UA)
    • Flutter version 3.16.3 on channel stable at /Users/lesha/fvm/versions/3.16.0
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b0366e0a3f (5 weeks ago), 2023-12-05 19:46:39 -0800
    • Engine revision 54a7145303
    • Dart version 3.2.3
    • DevTools version 2.28.4

推荐答案

这是意料之中的,因为您从配置单元获得的列表被认为是"来自外部数据源的集合".

Invalid casts章这一部分:

在使用不是您创建的集合的情况下,例如从JSON或外部数据源,您可以使用由Iterable个实现提供的cast()方法,例如List.

下面是首选解决方案的一个示例:收紧对象的类型.

Map<String, dynamic> json = fetchFromExternalSource();
var names = json['names'] as List;
assumeStrings(names.cast<String>());

Flutter相关问答推荐

允许冻结在初始化时使用工厂

本机调试符号包含无效的目录调试符号.目前仅支持Android ABI

Flutter BLoC et workmanager:如何创建独特的仓库初始化模式?

从超级应用程序启动时,Flutter 小应用程序中未加载资源

Flutter OpenID Connect无效参数:redirect_uri using Keycloak

在Flutter 中更改扩展瓷砖的高度

如何确定Flutter 中的文本 colored颜色 ?

尽管 onCollision 处理了我的角色还是从平台上掉了下来

Flutter应用无法上传到Microsoft Store

Flutter底部面板局部显示

Flutter屏幕适配 - 在模拟器和真实手机上文本尺寸不同

如何与 PostgreSQL 和外部网站交互 flutter apk?

我可以定义一次 sharedPreferences 并在需要数据显示到 flutter 应用程序时调用它吗?

在 flutter 的另一个类中使用变量值

如何根据应用程序主题(深色和浅色)更改谷歌 map 的主题?

为什么 setState 不改变我的变量 Flutter?

如何在 flutter 中更改日期 Select 器 colored颜色 ?

Flutter Web App 未启动:脚本的 MIME 类型不受支持

如何在dart中编写多个条件?

在另一个页面编辑数据后更新 Flutter 页面的惯用方法?