当flutter以=>开始时,如何调用multi语句?

3yhwsihp  于 2022-12-14  发布在  Flutter
关注(0)|答案(5)|浏览(167)

我是flutter和dart的新手。我看到main调用第一个小部件,如下所示,并添加了print语句。

void main() {
  print('begin ');
  runApp(MyApp());
  print('end');
}

我看另一个办法是

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

但是当我试着跟随它时它不工作

void main() => { print(' begin '); runApp(MyApp()); };

我的问题是,如果我想在第二种(***=〉***)方法中运行多个语句,我如何才能做到这一点,=〉操作符的名称是什么?

93ze6v8z

93ze6v8z1#

如果你有一个只包含一行的方法,你可以使用=〉来保存空间,并使整个方法声明和主体适合在一行上。你可以有多个操作,只要它们适合在一行上。它基本上翻译成'只返回这个值'(它的行为就像一个return语句)。

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

完全等同于说:

void main(){
  return runApp(MyApp());
}

但是,如果您有一个包含多行的方法,则需要使用方括号。

zkure5ic

zkure5ic2#

我不知道为什么没有人回答,但可以使用箭头函数调用许多语句,但您需要在它们之间使用逗号(类似于将参数传递给函数),这在将许多函数传递给onTap或OnClick函数时很有用
你例子:

void main() => { print(' begin '), runApp(MyApp()) ,print(' end ')};
bbmckpt7

bbmckpt73#

=>本身并不是一个运算符。它是一种语法,允许您编写执行单个操作并返回值的单行函数。例如:

// Return a value
String getString() => 'a string';

// Do something
void doSomething() => doSomethingElse();

// It also works for getters
int _privateValue;
int get publicValue => _privateValue;

// They are also common in higher order functions
var numbers = [1, 2, 3, 4, 5];
var oddNumbers = numbers.where((n) => n % 2 != 0); // Output: [1, 3, 5]

这些示例中的每一个都等效于使用花括号和return语句完全写出的方法。
然而,根据定义,单行函数只需要一行代码。如果你想要第二行代码,你就不能使用单行函数,而必须编写一个完整的方法:

// Incorrect, will cause the second statement to execute separately 
// or will throw an error, depending on where and how you do this
void oneLinerFunction() => print('1'); print('2');

// The correct way to define a method with more than one line of code in it
void fullMethod() {
  print('1');
  print('2');
}

在最后一个例子中,将=>{}组合起来并不会让单行函数执行多行代码,而是让函数尝试返回一个map或set,因为这就是花括号中的值的含义。例如:

Map<String, int> getMap() => { 'a': 1, 'b': 2 };

如果你试图用它偷偷地把多行代码插入到函数中,编译器会把它解释为一个集合,最好的情况下不会像你预期的那样工作,最坏的情况下会抛出一个错误。

zsohkypk

zsohkypk4#

=>运算符称为箭头运算符
使用=>运算符内联定义的函数称为Lambda函数箭头函数。这些函数执行并返回单个语句。
如果要执行多个语句,可以使用匿名函数。指定时使用{},不使用=>运算符:

someFunc( () { print("1"); print("2"); print("3");} )

(匿名函数也可以有返回值)
有一个关于它的大线程here on Stack Overflow

uklbhaso

uklbhaso5#

正如其他人所说,=>运算符被称为箭头运算符,它是一个单行程序。
我希望在按钮的onPressed中有多行代码,这是一种实现方法:

ElevatedButton(
          onPressed: () {
            print('one');
            print('two');
          },
          child: Text("Click me"),
        ),

相关问题