我对飞镖/颤动非常陌生,我对=
布尔isNoble(整数原子数)=
当我试图在flutter应用程序中设置状态时,我的疑问就来了。
RaisedButton(
onPressed: () => {
setState(() {
print('hello');
_products.add('More stuff');
})
},
child: Text('Add Product'),
),
现在,当我用 = 更改 setState 方法时
RaisedButton(
onPressed: () => {
setState(() => {
print('hello'),
_products.add('More stuff'),
})
},
child: Text('Add Product'),
),
上面提到的两种方法都可以工作,也就是说,它们按预期设置状态。我所要做的就是在使用胖箭头符号时将分号改为逗号。
这背后的逻辑是什么?粗箭头符号是如何与包含多个表达式的花括号一起工作的。
编辑
正如赫曼斯·拉杰所提到的=
RaisedButton(
onPressed: () => {
setState(() {
return {
print('hello'),
_products.add('More stuff'),
};
})
},
child: Text('Add Product'),
),
返回的包含打印函数和_products.add的< code>set如何实际更新状态。它不应该抛出某种错误吗,因为通常setState是由一个表达式完成的,比如< code > _ products . add(' More stuff ');。
作为记录,建议您使用以下语法:
RaisedButton(
onPressed: () {
setState(() {
print('hello');
_products.add('More stuff');
});
},
child: Text('Add Product'),
),
语法(args)=
此外,您需要使用分号
;
而不是逗号来终止语句。
正如其他人所指出的,您使用的语法< code>(args) =
这是一场完美的小语法错误Storm,对于JavaScript程序员来说,这似乎是合理的,但在Dart中,这实际上意味着完全不同的东西。而且,更糟糕的是,代码工作正常。集合文字将按顺序计算其表达式,并且无论如何没有人看到创建的集合。语法只是不能泛化-您不能将任何表达式更改为例如for循环(不过,在下一个版本的Dart中,您将能够这样做)。
因此,在Dart中,永远不要使用< code>=
这是我想回答的有趣问题之一。
正如官方文件在这里所说,是的=
同样来自
Dart 2.2
及以上,Set
可以使用包含在{}
中的逗号分隔值来定义,如此处文档中所述。
因此,您正在使用的语法,即
{}
,用逗号分隔的语句,它被=视为Set
。
此示例可能有助于您了解发动机罩下发生的情况:
dynamic reflect(dynamic a){
return a;
}
void main() {
Function shortHand = () => {reflect(1),reflect('a'),reflect({}),reflect([]),}; // this function when called will return a Set<dynamic>
print(shortHand().runtimeType); // will print `_LinkedHashSet<dynamic>`
}
那么语法呢
<代码>()=
<代码>()=
同样
()=
注意:不推荐使用这种用逗号分隔的函数调用返回集合的方法,除非您希望返回一个< code >集合
,否则也请不要使用这种方法
回复编辑 :
让我给你分析一下函数调用和结果。所以你的代码是这样的,
() => {
setState(() {
return {
print('hello'),
_products.add('More stuff'),
};
})
}
这里是
=
当您调用
setState
时,将执行以下代码,该代码再次返回一个 Set
,其中包含 { (打印结果),(_product.add 的结果),}
() {
return {
print('hello'),
_products.add('More stuff'),
};
}
当您执行
_products时,状态将更新。add('More stuff')
,其中'More-stuff'
将被添加到_products
,而不管您在哪里调用它。调用<code>setState
希望这有所帮助!
我一直在研究一些Graph QL/React/Relay示例,遇到了一些奇怪的语法。 在图形QL对象中定义字段时,使用以下语法: 据我所知,这只是定义一个匿名函数,并将其分配给xType.fields.该匿名函数返回包含字段定义的对象。 然而,我假设图形QL模式机制是工作的,这必须被定义为返回对象的函数,而不仅仅是返回对象。但是让我困惑的部分是花括号周围的括号。 这是为了区分对象定义和函数定义吗?
当我运行命令时,由于flutter设置的Dart版本,我得到了以下错误: Flutter 0.6.0•频道beta•https://github.com/Flutter/Flutter.git 框架•修订9299C02CF7(2周前)•2018-08-16 00:35:12+0200 引擎•修订E3687F70C7 工具•飞镖2.1.0-dev.0.0.Flutter-BE6309690F 我想知
问题内容: 可以有人,请解释以下内容: 我正在关注Dan Abramov的讲座并进行练习。 该代码工作正常,但是,当以下特定功能 用 大括号编写时,测试将失败。 相同的代码在 没有 大括号的 情况下也 可以正常工作。 这是JsBin。请从第31行开始。 问题答案: case ‘toggleTodo’ : return ( state.map( (one) => oneTodo( one, acti
在android Studio上使用flutter构建我的应用程序,当我上传我的应用程序包(通过制作时,会弹出消息: 我已经尝试了目前在线的所有解决方案来解决这个问题。以下各项的每种组合: 这些解决方案: https://github.com/flutter/flutter/issues/60240#issuecomment-894683946 https://github.com/flutter
问题内容: 我一直在研究一些Graph QL / React / Relay示例,但遇到了一些奇怪的语法。 在Graph QL Objects中定义字段时,使用以下语法: 根据我的收集,这只是定义一个匿名函数并将其分配给xType.fields。该匿名函数返回包含字段定义的对象。 我假设使用Graph QL模式机制,但必须将其定义为返回对象而不是简单返回对象的函数。但是令我困惑的部分是花括号周围的
谢谢