Dart对象为native - UnimplementedError:其他类型

时间:2016-03-28 17:47:06

标签: dart dart-html

将dart Web应用程序与浏览器历史记录集成,我想将dart对象推送到window.history堆栈。

Dart对象。

class AppState {
  final int index;

  AppState(this.index){
  }
}

阿比 https://api.dartlang.org/stable/1.15.0/dart-html/History/pushState.html

它适用于例如一个Map toMap()方法,以及匹配的工厂构造函数,但这是一种蛮力方式。只需依靠dart框架就可以得到下面的stackdump,这表明AppState错过了一些序列化方法。谁知道哪个?

Uncaught Unhandled exception:
UnimplementedError: structured clone of other type
#0      _StructuredClone.walk (file:///mnt/data/b/build/slave/dartium-lucid64-full-stable/build/src/dart/sdk/lib/html/html_common/conversions.dart:136)
#1      _StructuredClone.convertDartToNative_PrepareForStructuredClone (file:///mnt/data/b/build/slave/dartium-lucid64-full-stable/build/src/dart/sdk/lib/html/html_common/conversions.dart:151)
#2      convertDartToNative_PrepareForStructuredClone (file:///mnt/data/b/build/slave/dartium-lucid64-full-stable/build/src/dart/sdk/lib/html/html_common/conversions_dartium.dart:4)
#3      convertDartToNative_SerializedScriptValue (file:///mnt/data/b/build/slave/dartium-lucid64-full-stable/build/src/dart/sdk/lib/html/html_common/conversions.dart:33)
#4      History.pushState (dart:html:19793)
#5      AppHistoryCtrl.pushState (package:mintest/app_history_ctrl.dart:35:20)

1 个答案:

答案 0 :(得分:2)

这就是应该发生的事情。为了进入历史,它通过指定的结构化克隆算法进行序列化。那不知道如何处理任意Dart对象。例如,如果我们以某种方式将某些内容推送到历史记录中,则某些JavaScript代码可能会将其删除,并且无法处理任意Dart对象。所以,是的,需要将其转换为Map或结构化克隆算法所理解的其他结构。