0

I am saving an object in the objectbox. As you can see in the screenshot the attribute "status" is not null. But when I access the object, the attribute appears to be null (other screenshot). Where Is my mistake?

Entity:

import 'package:admin_app/data/dto/enums.dart';
import 'package:admin_app/data/dto/model.dart';
import 'package:objectbox/objectbox.dart';

@Entity()
class UnknownCachedTicketScanEntity implements TicketScanDTOIn{
  int id = 0;

  String? eventId;
  String? ticketId;
  String? action;
  List<String>? eventIdList;
  bool? offline;
  String? verificationId;
  int? timestamp;
  String? statusAsString;
  TicketStatus? status;

  UnknownCachedTicketScanEntity({
    this.eventId,
    this.action,
    this.eventIdList,
    this.offline,
    this.ticketId,
    this.verificationId,
    this.timestamp,
    this.statusAsString,
    this.status
  });

  UnknownCachedTicketScanEntity.fromDTO(TicketScanDTOIn? ticketScanDTOIn, String eventId) {
    ticketId = ticketScanDTOIn?.ticketId;
    verificationId = ticketScanDTOIn?.verificationId;
    status = ticketScanDTOIn?.status;
    this.eventId = eventId;
  }

  @override
  Map<String, dynamic> toJson() => {};
}

implemented class:

@JsonSerializable()
class TicketScanDTOIn {
  String? action;
  List<String>? eventIdList;
  String? ticketId;
  String? verificationId;
  bool? offline;
  int? timestamp;
  TicketStatus? status; 

  TicketScanDTOIn({
    this.action,
    this.eventIdList,
    this.ticketId,
    this.verificationId,
    this.offline,
    this.timestamp,
    this.status,
  });

  factory TicketScanDTOIn.fromJson(Map<String, dynamic> json) =>
      _$TicketScanDTOInFromJson(json);

  Map<String, dynamic> toJson() => _$TicketScanDTOInToJson(this);
}

storing in objectbox:

final _cachedUnknownTicketsBox = service<ObjectBox>().store?.box<UnknownCachedTicketScanEntity>();
_cachedUnknownTicketsBox?.put(UnknownCachedTicketScanEntity.fromDTO(ticketScanDTOIn, eventId));

trying to access the status:

TicketStatus? checkStatus(ticketId) {
    final _cachedUnknownTicketsBox =
        service<ObjectBox>().store?.box<UnknownCachedTicketScanEntity>();
    final ticket = _cachedUnknownTicketsBox
        ?.getAll()
        .where((cachedTicket) => cachedTicket.ticketId == ticketId)
        .toList();
    if (ticket != null && ticket.isEmpty) return TicketStatus.TICKET_NOT_USED;
    final ticketStatus = ticket?.last.status;
    return ticketStatus;
  }

status not null status null

1 Answers1

0

When running ObjectBox generator you should have received a warning that TicketStatus is not a supported type. You either have to create a custom mapping to a supported database type for it, or create a relation. As TicketStatus appears to be an enum, converting it should do.

To convert it and store it as an int, add a getter/setter e.g. like:

TicketStatus? status;

int? get dbStatus {
   return status?.index;
}

set dbStatus(int? index) {
   // TODO Map from index to your enum,
   // make sure to handle null and
   // invalid values.
}    

Source with example: https://docs.objectbox.io/advanced/custom-types#convert-annotation-and-property-converter

Uwe - ObjectBox
  • 1,012
  • 1
  • 7
  • 11