onDrop static method

Future<bool> onDrop(
  1. IDragDrop droppable,
  2. IDragDrop draggable, {
  3. RenderBox? dragBox,
  4. RenderBox? dropBox,
  5. Offset? dropSpot,
})

Implementation

static Future<bool> onDrop(IDragDrop droppable, IDragDrop draggable,
    {RenderBox? dragBox, RenderBox? dropBox, Offset? dropSpot}) async {
  bool ok = true;

  // same object dropped on itself
  if (draggable == droppable) return ok;

  // original data
  var original = droppable.drop;

  // set drop data
  droppable.drop = draggable.data;

  // fire onDrop event of the droppable
  if (ok) {
    // expression
    var expression = droppable.onDropObservable?.signature ??
        droppable.onDropObservable?.value;

    // bindings
    var bindings = draggable.onDropObservable?.bindings;

    // variables
    var variables = EventHandler.getVariables(
        bindings, droppable as WidgetModel, draggable as WidgetModel,
        localAliasNames: ['this', 'drop'], remoteAliasNames: ['drag']);

    // execute event
    ok = await EventHandler(droppable as WidgetModel)
        .executeExpression(expression, variables);
  }

  // fire onDropped event of the draggable
  if (ok) {
    // expression
    var expression = draggable.onDroppedObservable?.signature ??
        draggable.onDroppedObservable?.value;

    // bindings
    var bindings = draggable.onDroppedObservable?.bindings;

    // variables
    var variables = EventHandler.getVariables(
        bindings, draggable as WidgetModel, droppable as WidgetModel,
        localAliasNames: ['this', 'drag'], remoteAliasNames: ['drop']);

    // execute event
    ok = await EventHandler(draggable as WidgetModel)
        .executeExpression(expression, variables);
  }

  // undo data
  if (!ok) droppable.drop = original;

  return ok;
}