【问题标题】:Dart object to native - UnimplementedError: structured clone of other typeDart 对象到本机 - UnimplementedError:其他类型的结构化克隆
【发布时间】:2016-03-28 17:47:05
【问题描述】:

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

飞镖对象。

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 dart-html


【解决方案1】:

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

【讨论】:

  • 感谢您的解释。我担心使用“toMap()”方法的解决方案是否会覆盖 Dart 框架中已经存在的序列化功能。
猜你喜欢
  • 2012-02-18
  • 2018-09-28
  • 1970-01-01
  • 2022-06-16
  • 2017-11-26
  • 1970-01-01
  • 2013-09-06
  • 2019-10-23
  • 1970-01-01
相关资源
最近更新 更多