- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到以下错误:
A value of type 'Future<int>' can't be assigned to a variable of type 'int'
它可能是另一种类型,而不是
int
,但是基本上,模式是
A value of type 'Future<T>' can't be assigned to a variable of type 'T'
所以...
Future
? Future<T>
时,我该使用哪个小部件来显示我的值? 最佳答案
如果您熟悉 Task<T>
或 Promise<T>
和async
/ await
模式,则可以直接跳至“如何在Flutter中使用Future的控件”部分。
什么是 future ,我将如何使用它?
好吧,documentation说:
An object representing a delayed computation.
Future
。因此,从数据库中加载数字的 promise 会返回
Future<int>
,而从互联网搜索中返回电影列表的 promise 可能会返回
Future<List<Movie>>
。将来会为您提供
Future<T>
。
A future represents the result of an asynchronous operation, and can have two states: uncompleted or completed.
T
的结果才能在应用程序中进行。您需要显示数据库中的号码或找到的电影列表。因此,您要等待,直到结果出现为止。这是
Future<T>
出现的地方:
Future<List<Movie>> result = loadMoviesFromSearch(input);
// right here, you need the result. So you wait for it:
List<Movie> movies = await result;
但是,等等,我们还不完整吗?我们不是又在等待结果吗?是的,确实如此。如果程序与顺序流没有某种相似之处,它们将完全混乱。但是关键是我们使用关键字
await
告诉编译器,此时,虽然我们要等待结果,但我们不希望应用程序冻结。我们希望所有其他正在运行的操作(例如动画)继续进行。
await
并返回
await
的函数中使用
async
关键字。因为当您用
Future<T>
编码时,正在等待的函数不再能立即返回其结果。您只能退还所拥有的东西,如果您必须等待,则必须退还 promise 以稍后交付。
Future<Pizza> getPizza() async {
Future<PizzaBox> delivery = orderPizza();
var pizzaBox = await delivery;
var pizza = pizzaBox.unwrap();
return pizza;
}
我们的getPizza函数必须等待比萨饼,因此与其立即返回
await
而不是立即返回披萨的 promise ,不如立即返回
Pizza
。现在,您可以依次在某处对getPizza函数进行
await
编码。
Future<T>
。这就是
FutureBuilder
出现的地方。您可以在有 future 时使用它,在等待时显示一件事(例如进度指示器),在完成时显示另一件事(例如结果)。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
/// ordering a pizza takes 5 seconds and then gives you a pizza salami with extra cheese
Future<String> orderPizza() {
return Future<String>.delayed(Duration(seconds: 5), () async => 'Pizza Salami, Extra Cheese');
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
home: Scaffold(
body: Center(
child: PizzaOrder(),
),
),
);
}
}
class PizzaOrder extends StatefulWidget {
@override
_PizzaOrderState createState() => _PizzaOrderState();
}
class _PizzaOrderState extends State<PizzaOrder> {
Future<String> delivery;
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
RaisedButton(
onPressed: delivery != null ? null : () => setState(() { delivery = orderPizza(); }),
child: Text('Order Pizza Now')
),
delivery == null
? Text('No delivery scheduled')
: FutureBuilder(
future: delivery,
builder: (context, snapshot) {
if(snapshot.hasData) {
return Text('Delivery done: ${snapshot.data}');
} else if(snapshot.hasError) {
return Text('Delivery error: ${snapshot.error.toString()}');
} else {
return CircularProgressIndicator();
}
})
]);
}
}
这是您使用FutureBuilder来显示 future 结果的方式。
关于flutter - 什么是 future ,我将如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63017280/
我正在通过这个示例https://www.rusoto.org/futures.html学习Rust和Rusoto 而且我发现许多代码已经过时了。所以我改变了这样的代码: use rusoto_cor
这是一个理论问题。我有一个服务可以调用来完成工作,但该服务可能无法完成所有工作,因此我需要调用第二个服务来完成它。 我想知道是否有办法在没有 Await.result 的情况下做类似的事情map 函数
这个问题是关于如何阅读 Rust 文档并提高我对 Rust 的理解,从而了解如何解决这个特定的编译器错误。 我读过 tokio docs并试验了许多 examples .在编写自己的代码时,我经常遇到
我有一个使用分页的 HTTP api,我想将它包装到一个通用的 Rust 流中,以便所有端点都可以使用相同的接口(interface),这样我就可以使用 Stream 附带的特征函数特征。 我收到了这
我正在查看 AKKA 的 Java Futures API,我看到了很多处理同一类型的多个 future 的方法,但我没有看到任何处理不同类型的 future 的方法。我猜我让事情变得更加复杂了。 无
环境:Akka 2.1,scala 版本 2.10.M6,JDK 1.7,u5 现在是我的问题: 我有: future1 = Futures.future(new Callable>(){...});
我有一些代码可以将请求提交给另一个线程,该线程可能会也可能不会将该请求提交给另一个线程。这会产生 Future> 的返回类型.是否有一些非令人发指的方法可以立即将其变成 Future等待整个 futu
如果我有以下代码: Future a = new Future(() { print('a'); return 1; }); Future b = new Future.error('Error!')
我一直试图简化我在 Scala 中做 future 的方式。我有一次收到了 Future[Option[Future[Option[Boolean]]但我在下面进一步简化了它。有没有更好的方法来简化这
Scala 中从 Future[Option[Future[Int]]] 转换的最干净的方法是什么?至 Future[Option[Int]] ?甚至有可能吗? 最佳答案 有两个嵌套Future s
使用下面的示例,future2 如何在 future1 完成后使用 future1 的结果(不阻塞 future3 从被提交)? from concurrent.futures import Proc
这两个类代表了并发编程的优秀抽象,因此它们不支持相同的 API 有点令人不安。 具体根据docs : asyncio.Future is almost compatible with concurre
我正在尝试使用 wasm_bindgen 实现 API 类使用异步调用。 #![allow(non_snake_case)] use std::future::Future; use serde::{
这个问题在这里已经有了答案: Futures / Success race (3 个回答) 去年关闭。 所有的 future 最终可能会成功(有些可能会失败),但我们希望第一个成功。并希望将这一结果表
我在练习asyncio在编写多线程代码多年之后。 注意到一些我觉得很奇怪的东西。都在 asyncio在 concurrent有一个Future目的。 from asyncio import Futur
如何将Future[Option[Future[Option[X]]]]转换为Future[Option[X]]? 如果它是 TraversableOnce 而不是 Option 我会使用 Futur
我正在尝试同时发送 HTTP 请求。为此,我使用 concurrent.futures 这是简单的代码: import requests from concurrent import futures
我们在 vertx 中使用 Futures 的例子如下: Future fetchVehicle = getUserBookedVehicle(routingContext, client);
下面的函数,取自 here : fn connection_for( &self, pool_key: PoolKey, ) -> impl Future>, ClientError>
我正在围绕Java库编写一个小的Scala包装器。 Java库有一个对象QueryExecutor,它公开了2种方法: execute(query):结果 asyncExecute(query):Li
我是一名优秀的程序员,十分优秀!