首页 文章

颤动/飞镖 - (){}和()=> {}之间的差异

提问于
浏览
2

在Flutter / Dart中,示例有时显示胖箭,有时不显示 . 以下是示例:

RaisedButton(
  onPressed: () {
    setState(() {
      _myTxt = "Text Changed";
    });
  },

在其他地方你看到:

void main() => runApp(MyApp());

2 回答

  • 8

    胖箭头语法只是返回表达式的简写,类似于 (){ return expression; } .
    根据docs .

    注意:箭头(=>)和分号(;)之间只能出现表达式而非语句 . 例如,您不能在其中放置if语句,但可以使用条件表达式

    void main(){
        final cls = TestClass();
        cls.displayAnInt((){
           //you can create statements here and then return a value
           int num1 = 55;
           int num2 = 1;
           int sum = num1 + num2;
           return sum;
        });
       cls.displayAnInt(() => 55 + 1); // simply return an int expression
    }
    class TestClass{
    
        displayAnInt(makeIntFunc){
    
           int intValue = makeIntFunc();
           print('The int value is $intValue');
        }
    }
    

    从上面的代码中,您可以看到在使用回调函数时可以生成多行语句,然后返回一个值,而胖箭头只有一个没有返回关键字的表达式 .

    考虑你的答案关于胖箭不支持dart中的多行语句 . 这是可以理解的,因为做 () => {somtheing} 意味着你正在返回一张 Map ,它会期望看到类似 () => {'name':'John', 'age':25} 而不是 () => { _myTxt = "Text Changed";_myTxt = "Never Mind"; } 的东西 .

  • 1

    我发现那个意思完全一样 . 唯一的区别是,如果只有一个语句,您可以使用(您没有)胖箭头 . 以下是带有胖箭头的上述 RaisedButton 声明 . 注意我必须删除两个花括号和一个分号:

    RaisedButton(
      onPressed: () {
        setState(() =>
          _myTxt = "Text Changed"
        );
      },
    

    如果你已经习惯了其他语言允许你在一个粗箭头之后放置多个语句,你会发现你不能用飞镖,如果你尝试,你会得到一个错误,如下所示:

    this wont work

    RaisedButton(
      onPressed: () {
        setState(() => {
          _myTxt = "Text Changed";
          _myTxt = "Never Mind";
        });
      },
    

相关问题