Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous initState()方法中的异步函数调用是否总是在Flatter中的build()方法之后调用?_Asynchronous_Flutter_Dart_Async Await - Fatal编程技术网

Asynchronous initState()方法中的异步函数调用是否总是在Flatter中的build()方法之后调用?

Asynchronous initState()方法中的异步函数调用是否总是在Flatter中的build()方法之后调用?,asynchronous,flutter,dart,async-await,Asynchronous,Flutter,Dart,Async Await,我有一个测试代码如下: class SplashPageState extends State<SplashPage> { Future<void> dummy() async { print('Async function1'); Future.delayed(Duration.zero, () => print('Async function2')); print('Async function3'); awa

我有一个测试代码如下:

class SplashPageState extends State<SplashPage> {
  Future<void> dummy() async {
      print('Async function1');
      Future.delayed(Duration.zero, () => print('Async function2'));
      print('Async function3');
      await Future.delayed(Duration.zero, () => print('Async function4'));
      print('Async function5');
  }

  @override
  void initState() {
    print('initState 1');
    super.initState();
    print('initState 2');
    Future.sync(() {
      print('Future sync');

    });
    print('initState 3');
    Future.delayed(Duration.zero, () {
      print('Future value');
    });
    print('initState 4');
    dummy();
    print('initState 5');
  }

  @override
  Widget build(BuildContext context) {
    print('build');
    return Scaffold(
      appBar: AppBar(
        title: Text('1'),
      ),
      body: Text('2'),
    );
  }
}

我测试了100次,每次构建的顺序都是一样的。由于异步编程,我想知道“这个顺序总是保持每次运行吗?”

flift或者我应该说Dart是单线程编程,它在事件循环机制中工作。 所以,每次dart在没有WAIT关键字的情况下看到异步函数时,它都会将其放入事件循环中,在所有当前进程完成后,它会返回并恢复该异步函数。如果在
print('Async function5')中有前面提到的wait关键字它检查事件循环,并按照添加的延迟顺序恢复以前的事件堆栈

在那里你可以找到它如何工作的所有细节。还有,别忘了看看这些视频


回答得好。谢谢你的建议。
I/flutter (16218): initState 1
I/flutter (16218): initState 2
I/flutter (16218): Future sync
I/flutter (16218): initState 3
I/flutter (16218): initState 4
I/flutter (16218): Async function1
I/flutter (16218): Async function3
I/flutter (16218): initState 5
I/flutter (16218): build
I/flutter (16218): Future value
I/flutter (16218): Async function2
I/flutter (16218): Async function4
I/flutter (16218): Async function5