当前位置: 首页 > 知识库问答 >
问题:

设置状态省道/颤振中带大括号的胖箭头符号

爱亮
2023-03-14

我对飞镖/颤动非常陌生,我对=

布尔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 ');。

共有2个答案

易品
2023-03-14

作为记录,建议您使用以下语法:

RaisedButton(
    onPressed: () {
      setState(() {
        print('hello');
        _products.add('More stuff');
      });
    },
    child: Text('Add Product'),
),

语法(args)=

此外,您需要使用分号 ;而不是逗号来终止语句。

正如其他人所指出的,您使用的语法< code>(args) =

这是一场完美的小语法错误Storm,对于JavaScript程序员来说,这似乎是合理的,但在Dart中,这实际上意味着完全不同的东西。而且,更糟糕的是,代码工作正常。集合文字将按顺序计算其表达式,并且无论如何没有人看到创建的集合。语法只是不能泛化-您不能将任何表达式更改为例如for循环(不过,在下一个版本的Dart中,您将能够这样做)。

因此,在Dart中,永远不要使用< code>=

昌乐生
2023-03-14

这是我想回答的有趣问题之一。

正如官方文件在这里所说,是的=

同样来自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模式机制,但必须将其定义为返回对象而不是简单返回对象的函数。但是令我困惑的部分是花括号周围的