【问题标题】:How to define relations inside @freezed entity with objectbox dart?如何使用objectbox dart定义@freezed实体内部的关系?
【发布时间】:2022-01-05 18:27:08
【问题描述】:

关注this

我有一个CurrentUser 实体如下:

import 'package:admin/core/auth/enums/content_type.dart';
import 'package:admin/core/permission/model/permission.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:objectbox/objectbox.dart';

part 'current_user.freezed.dart';
part 'current_user.g.dart';

@freezed
class CurrentUser with _$CurrentUser {
  @Entity(realClass: CurrentUser)
  factory CurrentUser(
      {@Id(assignable: true) int? localId,
      @Unique() String? id,
      required DateTime createdAt,
      required DateTime updatedAt,
      required String email,
      required String username,
      String? mobile,
      @Default(false) bool? isEmailConfirmed,
      @Default(false) bool? isMobileConfirmed,
      @Default(false) bool? isSuperAdmin,
      @Default([]) List<ContentType>? accessTo,
      DateTime? lastLoginAt,
      DateTime? lastLogoutAt,
      @Default([]) List<Permission>? permissions}) = _CurrentUser;

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

但是这里的字段permissions 应该是与模型Permission 的一对多关系。这种情况下如何定义关系?

提前致谢。

【问题讨论】:

  • 有这样的@Default(ToMany&lt;Permission&gt;()) List&lt;Permission&gt;? permissions 吗?

标签: flutter dart objectbox freezed


【解决方案1】:

您实际上会使用ToMany(或ToOne)作为参数类型,所以

required ToMany<Permission> permissions

对于这个例子。对于这种情况,ToMany(或ToOne)有一个特殊的构造函数,它接受项目列表(或ToOne 的单个项目)。

另请参阅 objectbox-dart 中的冻结测试实体:https://github.com/objectbox/objectbox-dart/blob/main/generator/integration-tests/part-partof/lib/frozen.dart

【讨论】:

  • 谢谢。它似乎有效。
  • 但是如何在@freezed 表示的实体内定义枚举转换器?这里Permission 实体有一个代表CRUD 的action 枚举,但@freezed 似乎只支持自定义getter。
  • 认为我必须在这种情况下使用字符串,并在实体类之外进行一些类型转换。
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多