小编Sha*_*uli的帖子

Dart - 如果我按 Map 的键搜索而不是在 List 中执行 singleWhere 是否会提高性能?

因此,例如,鉴于我有以下课程

class Foo{
  String id;
  Foo(this.id);
}
Run Code Online (Sandbox Code Playgroud)

我想要某种 Foos 集合,然后能够通过其 id 找到任何 Foo。我想比较这两种实现方式:

带地图:

var foosMap  = <String, Foo>{"foo1": new Foo("foo1"), "foo2": new Foo("foo2")}; 
var foo2 = foosMap["foo2"];
Run Code Online (Sandbox Code Playgroud)

使用列表:

var foosList = <Foo>[new Foo("foo1"), new Foo("foo2")];
var foo2 = foosList.singleWhere((i) => i.id == "foo2");
Run Code Online (Sandbox Code Playgroud)

第一种方式(使用地图)在性能方面是否更方便?还有其他需要考虑的因素吗?

dart

4
推荐指数
1
解决办法
1693
查看次数

如何创建可以将位置子项作为参数的组件(Dart)?

我正在寻找有关如何制作可以采用位置子参数的webcomponents的资源.就像是:

<x-editable-component>
  <span>{{value}}</span> // this could be any uneditable element
  <textarea>{{value}}</textarea> //could be any editable element
</x-editable-component>
Run Code Online (Sandbox Code Playgroud)

上面的元素在editable == false时显示跨度,在editable == true时显示textarea.editable是一个全局监视的静态变量.

我认为有可能通过继承来获得这种组合行为.但是,我想知道是否有可能以上面提到的可组合方式执行此操作.组件(x-editable-component)只需要两个子节点,一个子节点在可编辑时显示,另一个子节点在不可编辑时显示.

为了清楚起见,我希望能够灵活地将任意两个孩子写成x-editable-component的子代,所以也许在某个地方我可以编写一个x-editable组件.

<x-editable-component>
  <div>{{value}}</div> // this could be any uneditable element
  <input>{{value}}</input> //could be any editable element
</x-editable-component>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

dart dart-webui

4
推荐指数
1
解决办法
197
查看次数

如何在 Dart 中解码作为 Base64 字符串的图像?

ctrl+v当我按下页面时,我尝试使用gist中的代码从剪贴板获取图像,这将console.log获得它所获取的图像内容。

我发现图像内容是一个长的base64字符串,带有特殊的前缀:

data:image/png;base64,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
Run Code Online (Sandbox Code Playgroud)

如何将其解码为二进制?我尝试删除前缀data:image/png;base64,并使用 base64 库将其余部分解码为二进制,并将其保存到文件中image.png。但文件无法显示,出现invalid format错误。

但是如果我将整个字符串粘贴到http://base64online.org/decode/,它也可以播放图像。

我使用的base64库是https://github.com/wstrange/base64,我的代码是:

data:image/png;base64,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
Run Code Online (Sandbox Code Playgroud)

我不知道哪里错了:(

base64 png image dart

4
推荐指数
1
解决办法
2万
查看次数

DART Web UI:如何在迭代循环中引用索引

我想在HTML中使用迭代循环的索引作为值,如:

   <select bind-value="gAddItem.drawType" 
            template iterate="int ind = 0; ind < gDrawDescs.length; ind++">
     <option value="{{ind.toString()}}"> {{gDrawDescs[ind]}} </option>
     </select>
Run Code Online (Sandbox Code Playgroud)

但是这种直观的语法似乎不起作用.有没有办法在Dart Web-ui中做到这一点?

dart dart-webui

3
推荐指数
1
解决办法
1889
查看次数

Dart'查询'显式演员

请考虑以下代码:

ButtonElement btnSend = (ButtonElement) query('#btnSendToServer');
Run Code Online (Sandbox Code Playgroud)

我收到一个内部错误:

Internal error: 'http://127.0.0.1:3030/home/Seth.Ladd/Projects/DartSimpleChat/SimpleChatClient/web/out/simplechatclient.dart': Error: line 30 pos 43: semicolon expected

ButtonElement btnSend = (ButtonElement) query('#btnSendToServer');
                                        ^
Run Code Online (Sandbox Code Playgroud)

所以问题是:

  • 这是做正确演员的正确方法吗?
  • 是否query支持显式/隐式转换?
  • 我应该担心退回的物体query还是我可以盲目相信那个物体会被退回ButtonElement吗?
  • 有查询只能搜索ButtonElements吗?

dart

3
推荐指数
1
解决办法
597
查看次数

按位运算,Dart2Js中的错误结果

我正在使用Dart对32位整数进行ZigZag编码.这是我正在使用的源代码:

int _encodeZigZag(int instance) => (instance << 1) ^ (instance >> 31);
int _decodeZigZag(int instance) => (instance >> 1) ^ (-(instance & 1));
Run Code Online (Sandbox Code Playgroud)

代码在DartVM中按预期工作.

但是在dart2js中,_decodeZigZag如果输入负数,则函数返回无效结果.例如-10.-10被编码19并应该被解码回来-10,但它被解码为4294967286.如果我(instance >> 1) ^ (-(instance & 1))在Chrome的JavaScript控制台中运行,我会得到预期的结果-10.对我来说,这意味着Javascript应该能够使用数字模型正确运行此操作.

但是Dart2Js生成以下JavaScript,它看起来与我在控制台中测试的代码不同:

return ($.JSNumber_methods.$shr(instance, 1) ^ -(instance & 1)) >>> 0;
Run Code Online (Sandbox Code Playgroud)

为什么Dart2Js将函数的右移0加到函数中?没有转变,结果将如预期的那样.

现在我想知道,这是Dart2Js编译器中的错误还是预期的结果?有没有办法强制Dart2Js输出正确的JavaScript代码?

或者我的Dart代码错了?

PS:还测试了将XOR分成其他操作,但是Dart2Js仍在添加正确的移位:

final a = -(instance & 1);
final b = (instance >> 1);

return (a & -b) …
Run Code Online (Sandbox Code Playgroud)

dart dart2js zigzag-encoding

3
推荐指数
1
解决办法
523
查看次数

是否可以通过名称获取类镜像?

假设我定义了一个app包含一些类的库:

library app;

class User {
    // some members
}
class Question {}
class Answer {}
Run Code Online (Sandbox Code Playgroud)

是否可以获取按名称指定的类的镜像?

var className = specifyClassName(); // may be "User", "Question", etc
ClassMirror cm = getClassMirror(className);
Run Code Online (Sandbox Code Playgroud)

dart dart-mirrors

3
推荐指数
1
解决办法
411
查看次数

无法从文本区域获取文本

我无法从我的textarea获取文本:

非常简单的textarea:

<textarea id="message" placeholder="Type your text here..."></textarea>
Run Code Online (Sandbox Code Playgroud)

我的飞镖码:

var area = document.query('#message');
document.query("#send").on.click.add((e) { 
   print('send ${area.text}');
});
Run Code Online (Sandbox Code Playgroud)

当我在区域中写入消息并按发送时,只显示:

send
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我的信息不打印.'text'不是正确的字段?(与innerHtml相同的问题)当我添加

area.text = 'Hello';
Run Code Online (Sandbox Code Playgroud)

消息在textarea中可见,打印效果很好.

dart

2
推荐指数
1
解决办法
1015
查看次数

如何在Dart中使用URL设置CSS背景图像?

我正在尝试找到jQuery.css()方法的等价物

在我的具体情况下,我想为画布设置背景图像.

在jQuery中,它将是:

 $("#canvas").css("background-image", "url(./assets/gridPattern.png)");
Run Code Online (Sandbox Code Playgroud)

dart

2
推荐指数
1
解决办法
686
查看次数

困惑的CSS选择器触发控制器

我无法理解如何使用属性选择器来限制控制器的范围.这是最小的控制器代码:

import 'package:angular/angular.dart';

@NgDirective(
  selector: '[my-controller]',
  publishAs: 'ctrl'
)
class MyController {
  String foo = 'fooooooooooooo';
}

main() {
  ngBootstrap(module: new Module()
      ..type(MyController));
} 
Run Code Online (Sandbox Code Playgroud)

以下是使用该控制器的视图:

<!DOCTYPE html>
<html>
  <body>
    <div> 

      <!-- DOES NOT WORK. MAKES SENSE. -->           
      <p>Outside ng-app: {{ctrl.foo}}</p>
    </div>

    <div ng-app>
      <div my-controller>
        <!-- WORKS. MAKES SENSE -->           
        <p>Inside my-controller div: {{ctrl.foo}}</p>
      </div>

      <!-- WORKS. WHY? It is outside the div with the my-controller attribute -->
      -->
      <p>Outside my-controller div: {{ctrl.foo}}</p>
    </div>

    <script type="application/dart" src="main.dart"></script>
    <script type="text/javascript" src="packages/browser/dart.js"></script> …
Run Code Online (Sandbox Code Playgroud)

dart angularjs angular-dart

2
推荐指数
1
解决办法
284
查看次数