android Dart中getData()函数完成之前Print('Object ')的执行方式

zi8p0yeb  于 2023-02-10  发布在  Android
关注(0)|答案(2)|浏览(105)

我正在学习Dart中的异步和未来函数,但我感到困惑,因为我仍然不明白print(“object”)是如何在getData()函数之前编译的,因为传统上,一旦前一行或函数完全编译/执行,编译器就会读取下一行。如果我犯了错误,请纠正我,我是noob tbh

import 'package:flutter/material.dart';

class Loading extends StatefulWidget {
const Loading({super.key});

@override
State\<Loading\> createState() =\> \_LoadingState();
}

class \_LoadingState extends State\<Loading\> {
void getdata() async {
String parth = await Future.delayed(Duration(seconds: 3), () {
return 'parth';
});
print('Hey');
print(parth);
}

@override
int count = 0;
void initState() {
// TODO: implement initState
super.initState();
getdata();
print('object');
}

@override
Widget build(BuildContext context) {
// print(' Setstae vala + $count');
return Scaffold(
appBar: AppBar(
title: Text('Loading'),
),
body: ElevatedButton(
onPressed: () {
setState(() {
count++;
});
},
child: Text('$count')),
);
}
}
fiei3ece

fiei3ece1#

您的输出应如下所示:
1.客体
1.喂
1.帕斯
因为传统上,一旦前一行或函数被完全编译/执行,编译器就会读取下一行
正常情况下,是的。但是由于在本例中使用了async关键字,所以它的工作方式略有不同。
这里发生了什么:
你首先在initState中调用getData。在getData中你有一个延迟的future,你用keywoard await等待它。所以它等待3秒直到你把'parth'作为一个字符串返回。然而,同时,它继续在initState中运行以返回'object'。

wdebmtf2

wdebmtf22#

getdata是一个异步方法,您需要返回Future<void>以等待。
现在initState()不能是异步的,您可以创建另一个方法来等待并将其放置在此处。

void newMethod() async {
  await getdata();
  print('object');
}

并将newMethod()放入initState中。
也可以使用.then

getdata().then((_) {
    print('object');
  });

相关问题