【发布时间】:2022-01-23 14:49:32
【问题描述】:
我已经阅读了 Flutter 中有关 Futures 的大部分文档。但我仍然不明白如何从函数中返回非未来值。
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp( Kitchen());
class Kitchen extends StatelessWidget {
String caption = '-none-';
Kitchen({Key? key}) : super(key: key);
String retrieve() async {
const String link = 'http://worldclockapi.com/api/json/utc/now';
Uri url = Uri.parse(link);
http.Response response = await http.get(url);
String result = response.toString();
return result;
}
@override
Widget build(BuildContext context) {
caption = retrieve();
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(title: const Text('Kitchen async demo') )
, body: Container(
color: Colors.cyan[50]
, child: Center( child: Text(caption) )
)
)
);
}
}
代码不会运行,因为retrieve 的返回类型必须是Future 所写的。如果我永远不能从这个函数返回任何东西,除了 Future,为什么还要使用 await 关键字呢?为什么 await 语句的返回类型不是 Future。没看懂。
【问题讨论】:
-
您不能从
async函数返回非Future值(尽管您可以返回void)。您实际上并不希望程序停止并等待http.get调用完成,因为如果您的互联网连接不佳,那么可能需要 10 秒,因此您的应用程序将在 10 秒内无响应。通过返回Future,您可以立即从函数返回,而无需等待/延迟应用程序,然后您可以在稍后到达时处理该值(也许通过使用FutureBuilder)。跨度> -
这能回答你的问题吗? How and when to use ‘async’ and ‘await’
标签: flutter dart asynchronous async-await