Flutter 颤振:使用等待时的差异

Flutter 颤振:使用等待时的差异,flutter,asynchronous,dart,async-await,Flutter,Asynchronous,Dart,Async Await,想象一下,我调用了一个异步函数,返回类型为Future调用\u uploadData,位于按钮的onPressed属性内,UI不依赖于函数调用 1st onPressed: () async { await _uploadData(); }, 或第二名 onPressed: () { _uploadData(); } 这有什么区别吗?如果没有,那么第一个代码就是更好的实践吗?是的,这些代码有不同的行为。如果使用async/await语法,代码将不会继续,而是等待将来完成其工作

想象一下,我调用了一个
异步
函数,返回类型为
Future
调用
\u uploadData
,位于
按钮的
onPressed
属性内,UI不依赖于函数调用

1st

onPressed: () async {
    await _uploadData();
},
或第二名

onPressed: () {
    _uploadData();
}

这有什么区别吗?如果没有,那么第一个代码就是更好的实践吗?

是的,这些代码有不同的行为。如果使用async/await语法,代码将不会继续,而是等待将来完成其工作。因此,如果您的UI不依赖于未来,请不要使用async/await。否则就使用它。如果您想理解它,请打开并添加以下代码

  void _incrementCounter() async{
    await Future.delayed(Duration(seconds: 5));
    setState(() {
      _counter++;
    });
  }

将_incrementCounter()方法转换为上述代码。

是的,这些代码具有不同的行为。如果使用async/await语法,代码将不会继续,而是等待将来完成其工作。因此,如果您的UI不依赖于未来,请不要使用async/await。否则就使用它。如果您想理解它,请打开并添加以下代码

  void _incrementCounter() async{
    await Future.delayed(Duration(seconds: 5));
    setState(() {
      _counter++;
    });
  }

将_incrementCounter()方法转换为上述代码。

谢谢!现在我很清楚了。另一件有趣的事情:将代码包装在incrementCounter中,使用循环执行,例如5次,然后在将来使用wait关键字执行代码。延迟,然后不执行,这将演示一系列异步调用,您只需确保每个调用都尽可能快地执行,不用彼此等待,谢谢!现在我很清楚了。另一件有趣的事情:将代码包装在incrementCounter中,使用循环执行,例如5次,然后在将来使用wait关键字执行代码。延迟,然后不执行,这将演示一系列异步调用,您只需确保每个调用都尽可能快地执行,不用彼此等待。