Flutter 中的快照是什么?

What is a snapshot in Flutter?

我一直在我的项目中使用 Firebase 数据库。我一直在关注教程,当将小部件返回给未来的构建器时,它说要使用:

if(snapshot.hasError) {
    // Cannot connect to database
}
else {
    // Return widgets as normal
}

我查看了 Flutter 文档,他们说快照是:

Immutable representation of the most recent interaction with an asynchronous computation.

但是这是什么意思,为什么上面的代码有意义?

快照只是您可能从 Firebase 得到的响应。所以他们在这里只是想检查响应是否为空。

要从收到的响应中访问数据,您只需执行以下操作:

final responseData = snapshot.data

事实上,您也可以将快照更改为您想要的任何名称。

快照是您在 FutureBuilder 中收听的 FutureStream 的结果。

在与正在 return 编辑的数据交互并在您的构建器中使用它之前,您必须先访问它。

要访问这些数据,从技术上讲,这些数据是通过您的 FutureBuilder 间接提供给您的,您需要向 FutureBuilder 提出要求。

你首先这样做,说 snapshot,因为这可以说是你告诉 Flutter 你将要使用的昵称,因为你的 Future 构建器看起来像这样:

 FutureBuilder(
     future: someFutureFunction(),
     builder: (context, snapshot) { // Here you told Flutter to use the word "snapshot".
     if (snapshot.connectionState == ConnectionState.waiting)
         return Center(child: CircularProgressIndicator());
     else
         return Text(counter.toString());
}),

如果您将其称为“finno”,您稍后可以通过键入 finno.data 来访问此信息。

snapshot 有许多您可以使用的属性,例如 hasDataconnectionStatus.

如果你的未来被期望return你创建的对象,例如

Student(String name, int age)

您可以通过说 print(snapshot.data.name) 来打印姓名。

注意:快照有两个常见含义。一种是在构建方法中与 StreamBuilder 或 FutureBuilder 一起使用的方法。另一种是您从 Firebase 返回的数据类型。不幸的是,您经常在 FutureBuilder 或 StreamBuilder 中使用 Firebase 快照,它们也使用术语快照,并且来自 Firebase 的快照在适当的时间最终出现在构建器中的 snapshot.data 值中。呃!