【问题标题】:What is a snapshot in Flutter?Flutter 中的快照是什么?
【发布时间】:2021-07-07 00:23:29
【问题描述】:

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

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

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

与异步计算的最近交互的不可变表示。

但这意味着什么,为什么上面的代码有意义?

【问题讨论】:

    标签: flutter dart snapshot


    【解决方案1】:

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

    在与返回的数据进行交互并在构建器中使用它之前,您必须先访问它。

    要访问技术上通过您的FutureBuilder 间接提供给您的这些数据,您需要向FutureBuilder 索取。

    你先说snapshot,因为这是你告诉Flutter你将要使用的昵称,因为你的Future builder看起来像这样:

     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

    例如,如果您的未来预计会返回您创建的对象

    Student(String name, int age)
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        要从收到的响应中访问数据,您可以这样做:

        final responseData = snapshot.data
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-25
          • 2023-03-24
          • 2021-08-01
          • 2012-12-14
          • 1970-01-01
          • 2020-07-22
          相关资源
          最近更新 更多