Class Dart扩展地图以方便延迟加载

Class Dart扩展地图以方便延迟加载,class,map,dart,extends,Class,Map,Dart,Extends,我正在尝试将数据从服务器延迟加载到映射中。 出于这个原因,我想向Map添加功能,以便当一个键不存在时,执行一个调用以获取值 我尝试的是: class LazyMap扩展了地图{ //现在就使用.length。当它起作用时,使用xhr 运算符[](键)=>LazyMap.putIfAbsent(键,()=>key.length); } LazyMap测试=新的LazyMap(); main(){ 打印(test.containsKey('hallo');//false //我更喜欢使用这种简洁的语

我正在尝试将数据从服务器延迟加载到映射中。
出于这个原因,我想向Map添加功能,以便当一个键不存在时,执行一个调用以获取值

我尝试的是:

class LazyMap扩展了地图{
//现在就使用.length。当它起作用时,使用xhr
运算符[](键)=>LazyMap.putIfAbsent(键,()=>key.length);
}
LazyMap测试=新的LazyMap();
main(){
打印(test.containsKey('hallo');//false
//我更喜欢使用这种简洁的语法,而不必使用putIfAbsent
//每次我需要地图上的东西时
打印(测试['hello']);//5
打印(test.containsKey('hallo');//true
}
这会引发一个错误,声明“无法解析隐式超级调用的构造函数映射”,这对我来说很神秘

这是我第一次尝试扩展任何东西,所以我可能在做一些愚蠢的事情。 任何关于如何做得更好的建议,或者可能告诉我我使用了一种不好的做法,都将不胜感激

我研究过这个答案:,但这是关于扩展列表,而不是地图。我已查找地图库,但找不到。
我已经研究了这个答案,但这似乎是一个非常古老的答案,没有真正的解决办法

亲切问候,, Hendrik Jan

看看这个,您不能扩展Map及其子类。我认为实现你想要的最好的方法就是实现它

类LazyMap实现Map{
映射_inner={};
运算符[](键)=>\u内部.putIfAbsent(键,()=>key.length);
//将所有方法转发到\u内部
}
你应该看看;)在这个回答中,我指的是。在它旁边有一个

您可以使用作为超类或作为mixin来执行您想要的操作:

import'package:quiver/collection.dart';
类LazyMap扩展了DelegatingMap{
最终委托={};
运算符[](键)=>putIfAbsent(键,()=>key.length);
}

请注意,由于xhr是异步的,您将无法将其用于xhr。

Hi Faris。你发布的链接无效。它指向你自己的gmail收件箱,这当然对我不起作用。你能编辑这个链接吗?除此之外,这是一个非常有用的答案。我本来希望听到其他的,但我不得不努力实现它。有没有一个例子,所有的方法都被转发给_inner?我不确定它们的语法是否正确。嗨,Alexandre。我确实看到了你的答案,看起来很有用。在我有更多使用Dart的经验之前,我更喜欢使用“库存”Dart,而不是使用外部库。对于图书馆,我不确定几年后是否仍有相同的图书馆。我可能会查看quivel,看看它是如何编写的。pub.dartlang.org永远不会删除现有的包。所以你可以毫无恐惧地使用软件包。这很好。在Javascript中,有许多库没有得到维护或质量低下。Dart pub包的维护和质量是否有任何保证?还是由用户决定他/她是否认为质量足够高?(或者这应该是一个新的SO问题?)我认为这可能是一个伟大的SO问题!