Skip to content

ParentElement's property overflow change to scroll post exception #166

@pba-cra

Description

@pba-cra

Affected version

main

No same issues found.

  • Yes, I search all issues but not found.

Steps to Reproduce

Code example

let div;
div = createElement(
  'div',
  {
    style: {
      width: '100%',
      height: '500px',
      background: 'red',
      overflow: 'hidden',
    },
  },
  [
  ]
);
document.body.appendChild(div);
document.body.style.width = '100%';
document.body.style.height = '100vh';
document.body.style.background = '#000';
document.body.style.overflow = 'hidden';
document.body.style.position = 'relative';
document.body.style.color = '#fff';

let div2 = createElement(
  'div',
  {
    style: {
      position: 'absolute',
      width: '20px',
      height: '20px',
      background: 'green',
    },
  },
  []
);
append(div,div2);
div.style.overflow = 'scroll';

function createElement(tag, props, child) {
  const el = document.createElement(tag);
  setElementProps(el, props);
  if (Array.isArray(child)) {
    child.forEach(c => el.appendChild(c));
  } else if (child) {
    el.appendChild(child);
  }
  return el;
}

function append(parent, child) {
  parent.appendChild(child);
}

function createElementWithStyle(tag, style, child) {
  const el = document.createElement(tag);
  setElementStyle(el, style);
  if (Array.isArray(child)) {
    child.forEach(c => el.appendChild(c));
  } else if (child) {
    el.appendChild(child);
  }
  return el;
}
function setElementProps(el, props) {
  let keys = Object.keys(props);
  for (let key of keys) {
    if (key === 'style') {
      setElementStyle(el, props[key]);
    } else {
      el[key] = props[key];
    }
  }
}
function setElementStyle(dom, object) {
  if (object == null) return;
  for (let key in object) {
    if (object.hasOwnProperty(key)) {
      dom.style[key] = object[key];
    }
  }
}
function createText(content) {
  return document.createTextNode(content);
}

Expected results

no exception post

Actual results

post exception

flutter: type 'Null' is not a subtype of type 'ContainerParentDataMixin' in type cast
#0 RenderBoxModel.getPreviousSibling (package:webf/src/rendering/box_model.dart:1371:63)
#1 Element.addToContainingBlock (package:webf/src/dom/element.dart:770:50)
#2 Element._updateRenderBoxModelWithPosition. (package:webf/src/dom/element.dart:750:15)
#3 List.forEach (dart:core-patch/growable_array.dart:416:8)
#4 Element._updateRenderBoxModelWithPosition (package:webf/src/dom/element.dart:749:32)
#5 Element.setRenderStyleProperty (package:webf/src/dom/element.dart:1233:9)
#6 Element.setRenderStyle (package:webf/src/dom/element.dart:1522:5)
#7 BodyElement.setRenderStyle (package:webf/src/html/body.dart:40:15)
#8 Element._onStyleChanged (package:webf/src/dom/element.dart:1599:7)
#9 CSSStyleDeclaration._emitPropertyChanged (package:webf/src/css/style_declaration.dart:559:22)
#10 CSSStyleDeclaration.flushPendingProperties (package<…>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions