La méthode Object.newItem permet de créer un objet vide car lorsque ton application crée l’objet, on ne dispose pas encore de l’id et comme ton objet dépend de DirectusItem, tu obtiendras une exception car le champs id est obligatoire.
Pour faire plus simple, newItem permet de passer outre les vérifications lors de la création de ton objet.
Ensuite, dans ton ActivityService, tu dois avoir implémenter fromDirectus. Cette fonction retournera dans ton cas, un objet Activity. Elle est utilisé pour pouvoir créer les objets à la volée lors des différents appels à l’API.
Un exemple sera peut être plus clair.
Dans mon projet, j’ai un objet Message qui hérite de DirectusItem. J’ai également un objet MessageService qui gère les appels à la base de données pour les objets Message.
Le service est déclaré de cette façon :
class MessageService extends DirectusService<Message> {
MessageService({required DirectusApiManager apiManager})
: super(
apiManager: apiManager,
typeName: 'messages',
fields:"*"
);
@override
Message fromDirectus(rawData) {
return Message(rawData);
}
lorsque je déclare mon service, je spécifie à plusieurs endroits le type d’objet qu’il va gérer (dans l’exemple, il s’agit de Message)
- Lorsque je déclare que mon service hérite de DirectusService, note le Message entre les chevrons.
- La méthode
fromDirectus
retourne également un objet de type Message
comme MessageService hérite de DirectusService, la fonction pour ajouter un message existe déjà. Tu n’as pas besoin de la refaire.
donc si je veux créer un nouveau message dans la base, je fais comme ceci :
final Message newMessage = Message.newItem(); // Je crée mon objet message
newMessage.title = "titre"; // J'initialise les propriétés que je souhaite
...
final MessageService messageService = MessageService(apiManager: apiManager); // Je crée mon objet MessageService
final DirectusItemCreationResult result = await messageService.create(newMessage); // J'attends la réponse de l'API
L’objet DirectusItemCreationResult contient :
- isSuccess qui est un boolean te permettant de savoir si cela c’est bien passé
- createdItemList qui est une liste de Message si j’ai le droit de voir les objets crées.
- createdItem qui retourne le premier objet Message si j’ai le droit de voir les objets crées.
- error qui contient le message d’erreur si cela s’est mal passé.
class DirectusItemCreationResult<T> {
final bool isSuccess;
List<T> createdItemList = [];
DirectusApiError? error;
DirectusItemCreationResult({required this.isSuccess, this.error}) {
if (!isSuccess && error == null) {
throw Exception("error must be initialized");
}
}
T? get createdItem {
return createdItemList.isEmpty ? null : createdItemList.first;
}
}