initialize method

Future<Relationship<E, N>> initialize({
  1. required Map<String, RemoteAdapter<DataModel>> adapters,
  2. required DataModel<DataModel> owner,
  3. required String name,
  4. String? inverseName,
})

Initializes this relationship (typically when initializing the owner in DataModel) by supplying the owner, and related adapters and metadata.

Implementation

Future<Relationship<E, N>> initialize(
    {required final Map<String, RemoteAdapter> adapters,
    required final DataModel owner,
    required final String name,
    final String? inverseName}) async {
  if (isInitialized) return this;

  _adapters = adapters;
  _adapter = adapters[internalType] as RemoteAdapter<E>;

  _ownerKey = owner._key!;
  _name = name;
  _inverseName = inverseName;

  // initialize uninitialized models and get keys
  final newKeys = _uninitializedModels.map((model) {
    return model._initialize(_adapters, save: true)._key!;
  });
  _uninitializedKeys.addAll(newKeys);
  _uninitializedModels.clear();

  // initialize keys
  if (!_wasOmitted) {
    // if it wasn't omitted, we overwrite
    _graph._removeEdges(_ownerKey,
        metadata: _name, inverseMetadata: _inverseName);
    _graph._addEdges(
      _ownerKey,
      tos: _uninitializedKeys,
      metadata: _name,
      inverseMetadata: _inverseName,
    );
    _uninitializedKeys.clear();
  }

  isInitialized = true;
  return this;
}