📅  最后修改于: 2023-12-03 14:41:21.022000             🧑  作者: Mango
在 Flutter 中,FutureBuilder 和 StreamBuilder 都是用来创建 Widget 的异步数据源的 Widget。两者都可以用来处理异步数据,但它们之间有一些重要的区别。
FutureBuilder 是用于获取 Future 对象的 Widget,它会在 Future 对象 resolved 后重新构建它的 Widget 树。你可以看作是获取网络请求的应用场景。例如,在应用程序中获取了一个 Future 对象,然后等待 Future 对象 resolved 后,将其返回到 Widget 树中。
以下是 FutureBuilder 的示例代码:
FutureBuilder(
future: myFuture,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Text(snapshot.data.toString());
} else {
return Text("Waiting...");
}
},
);
在这个示例中,我们向 FutureBuilder 提供一个 Future 对象。在 Future 对象返回后,FutureBuilder 将其数据传递给 builder 函数。builder 函数根据连接状态返回不同的 Widget。
StreamBuilder 是处理 Stream 对象的 Widget。与 FutureBuilder 不同,StreamBuilder 可以处理多个值并更新 UI。比如,一个实时数据监视应用场景,每秒钟更新一次。
以下是 StreamBuilder 的示例代码:
StreamBuilder(
stream: myStream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Text(snapshot.data.toString());
} else {
return Text("Waiting...");
}
},
);
在这个示例中,我们向 StreamBuilder 提供一个 Stream 对象。在每个新值传递时,StreamBuilder 将新数据传递给 builder 函数。builder 函数根据连接状态返回不同的 Widget。
FutureBuilder 和 StreamBuilder 在执行上的区别主要集中在它们的异步处理上。
FutureBuilder 返回的结果是单一结果,通常代表一个异步操作的所有结果。这种类型的操作通常只需要异步获取一次数据,例如,从 API 获取一个基础用户文件。
但是 StreamBuilder 可以处理多个值,代表实时更新的操作,如推特提供的实时的推类。你可以在创建一个 StreamBuilder 时获取流,然后在 UI 数次更新中处理流的新值。
在 Flutter 中,FutureBuilder 和 StreamBuilder 都是用于异步数据的优秀 Widget。在选择使用哪个 Widget 时,要考虑要获取单一结果还是实时更新的多个值。