Dart2&x27;s的大小调整观察员被省道缩小器破坏
我有以下Dart2代码片段(Dart 2.7),它在开发模式下运行时100%有效,但在生产模式下运行时失败Dart2&x27;s的大小调整观察员被省道缩小器破坏,dart,Dart,我有以下Dart2代码片段(Dart 2.7),它在开发模式下运行时100%有效,但在生产模式下运行时失败 ResizeObserver rowObserver; 当建筑完成时 pub global run webdev build --output=web:build --release 我尝试过将--release改为--no release,但不确定如何在该模式下运行它 更改为dynamic,我得到了与缩小完全相同的问题: final ResizeObserverCallback
ResizeObserver rowObserver;
当建筑完成时
pub global run webdev build --output=web:build --release
我尝试过将--release改为--no release,但不确定如何在该模式下运行它
更改为dynamic
,我得到了与缩小完全相同的问题:
final ResizeObserverCallback rowObserverCallback = (dynamic blah1, dynamic blah2){
更改为Object,至少我进入了resize回调:
final ResizeObserverCallback rowObserverCallback = (Object blah1, Object blah2){
print("inside row observer callback");
print(blah1.runtimeType);
print(blah2.runtimeType);
print(blah1 is List<ResizeObserverEntry>);
试图在黑暗中射击,但没有击中任何东西
final ResizeObserverCallback rowObserverCallback = (Object blah1, Object blah2){
print("inside row observer callback");
print(blah1.runtimeType);
print(blah2.runtimeType);
print(blah1 is List<ResizeObserverEntry>);
print(blah1 is ResizeObserverEntry);
print(blah1 is TableRowElement);
print(blah1 is List<TableRowElement>);
print(blah1 is JsArray);
print(blah1 is NumToArrayPipe);
print(blah1 == null);
print(blah1 is Function);
print(blah1 is ResizeObserver);
最后一个按预期打印为真
EDIT2:
使用JS Interopt,我正在执行console.log
以查看blah1的实际类型,结果发现它是一个包含数组的DartObject
context["console"].callMethod("log", [blah1]);
为了访问ResizeObserverEntry列表,我应该将blah1强制转换为什么
EDIT3
我制作了一个可以重现错误的演示:
bug\u resize\u observer.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="div1" style="background-color: red">
<textarea style="padding: 10px; margin: 10px;">
TESTING
</textarea>
</div>
<div class="div2" style="background-color: blue">
.
</div>
<script defer src="bug_resize_observer.dart.js"></script>
</body>
</html>
在开发模式下,调整文本区域大小时,蓝色div模仿红色div的高度:
在发布模式下,您只会收到以下错误:
EDIT4:
在此处记录错误:
ResizeObserver问题已在2.8.dev-13中修复,ResizeObserver条目仍然损坏:
final ResizeObserverCallback rowObserverCallback = (Object blah1, Object blah2){
print("inside row observer callback");
print(blah1.runtimeType);
print(blah2.runtimeType);
print(blah1 is List<ResizeObserverEntry>);
for (ResizeObserverEntry entry in [blah1 as ResizeObserverEntry]) {
print(" ... entry is ${entry.runtimeType} and entry.target is ${entry.target.runtimeType}");
//resizeRow(entry.target as TableRowElement);
}
};
name: blah
version: 0.0.2
description: Blah Blah
environment:
sdk: ">=2.6.0 <3.0.0"
dependencies:
angular: ^5.3.1
angular_forms: ^2.1.2
http: any
js: ^0.6.0
logging: "^0.11.3+1"
html: any
json_serializable: any
blahvo:
path: ../blah-vo
dev_dependencies:
angular_test: 2.3.0
build_runner: ^1.5.2
build_test: ^0.10.2
build_web_compilers: ^2.0.0
test: ^1.0.0
J.c1.prototype={
k:function(a,b){H.p(b,H.j(a,0))
if(!!a.fixed$length)H.a7(P.E("add"))
a.push(b)},
u.c1=new ResizeObserver(H.aU(new L.j6(),2))},
this.a.c1.unobserve(a)},
r.c1.observe(a)},
if(a.constructor==Array)return J.c1.prototype
c1:function c1(a){this.$ti=a},
_.f3=_.c1=_.bg=_.c0=_.f2=null},
final ResizeObserverCallback rowObserverCallback = (Object blah1, Object blah2){
print("inside row observer callback");
print(blah1.runtimeType);
print(blah2.runtimeType);
print(blah1 is List<ResizeObserverEntry>);
print(blah1 is ResizeObserverEntry);
print(blah1 is TableRowElement);
print(blah1 is List<TableRowElement>);
print(blah1 is JsArray);
print(blah1 is NumToArrayPipe);
print(blah1 == null);
print(blah1 is Function);
print(blah1 is ResizeObserver);
final ResizeObserverCallback rowObserverCallback = (Object blah1, Object blah2){
print("inside row observer callback");
print(blah1.runtimeType);
print(blah2.runtimeType);
print(blah2 is List<ResizeObserverEntry>);
print(blah2 is ResizeObserverEntry);
print(blah2 is TableRowElement);
print(blah2 is List<TableRowElement>);
print(blah2 is JsArray);
print(blah2 is NumToArrayPipe);
print(blah2 == null);
print(blah2 is Function);
print(blah2 is ResizeObserver);
context["console"].callMethod("log", [blah1]);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="div1" style="background-color: red">
<textarea style="padding: 10px; margin: 10px;">
TESTING
</textarea>
</div>
<div class="div2" style="background-color: blue">
.
</div>
<script defer src="bug_resize_observer.dart.js"></script>
</body>
</html>
import "dart:html";
void main() {
final DivElement div1 = querySelector("div.div1");
final DivElement div2 = querySelector("div.div2");
final ResizeObserver divResizeObserver = ResizeObserver((List<ResizeObserverEntry> blah1, ResizeObserver blah2) {
print("inside divResizeObserverCallback");
for (ResizeObserverEntry entry in blah1) {
div2.style.height = "${entry.target.clientHeight}px";
}
});
divResizeObserver.observe(div1);
}