gpt4 book ai didi

flutter 异步调用不会在 initState() 中异步运行

转载 作者:行者123 更新时间:2023-12-04 15:38:49 25 4
gpt4 key购买 nike

我在 initState() 中调用异步函数,但系统实际上等待异步函数的结果。谁能告诉我为什么?

这是我的代码:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: MyHomePage());
}
}

class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
Future<int> _f;

@override
void initState() {
super.initState();
Stopwatch stopwatch = new Stopwatch()..start();
print('executed in ${stopwatch.elapsed}');
_f = getFuture();
print('executed in ${stopwatch.elapsed}');
}

Future<int> getFuture() async {
int i = 0;
while(i < 1000000000) {
i++;
}
return i;
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("test")),
body: FutureBuilder<int>(
future: _f,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
return Center(child: Text("snapshot: ${snapshot.data}"));
break;
default:
return Center(child: CircularProgressIndicator());
}
}

),
);
}
}

这是输出:

I/flutter (22058): executed in 0:00:00.000384
I/flutter (22058): executed in 0:00:04.536278

最佳答案

Future 函数被用来异步返回一个Future 对象。这意味着执行一次代码语句将花费更长的时间,例如从 api 获取 json 对象,而不是普通语句所需的通常时间,例如变量声明。

但是,您执行的是普通语句,需要几毫秒才能运行,即 1000000000 次。这将导致更长的执行时间,这是由每次执行的毫秒数构成的。

尽管它是一个 Future 函数,但它不返回一个 Future 对象或变量,因此它不是异步的。

关于flutter 异步调用不会在 initState() 中异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com