Dart 对象到 native - UnimplementedError : structured clone of other type

标签 dart dart-html

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

Dart 对象。

class AppState {
  final int index;

  AppState(this.index){
  }
}

API 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)

最佳答案

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

关于Dart 对象到 native - UnimplementedError : structured clone of other type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36267797/

相关文章:

flutter - 为什么我的扩展容器不占用设备的剩余高度?

flutter - 在 Flutter 中,如何在较大的屏幕尺寸上修复 PopupMenuItem Widget 中的截断文本?

dart - Flutter:下拉列表中的选定值

Flutter StreamBuilder在初始化时称为两次

jquery - Dart 中的事件 Jquery UI

performance - Dart:静态与动态资源利用率

svg - 如何使用 Dart 向 SVG 动态添加线性渐变

flutter - 如何从 Dart 中的流中调用流

events - OnKeyDown事件不会立即更新,OnKeyUp是

dart - 如何使用 dart 将多个对象打印到 console.log ?