Flutter 中 Futurebuilder 中的快照到底是什么意思?

What exactly means the snapshot in a Futurebuilder in Flutter?

我不确定我在 Flutter 中的快照是否正确。 所以我想问问大家是否同意我对snapshot的看法。

假设我有下面的 FutureBuilder:

 FutureBuilder(
     future: someFutureFunction(),
     builder: (context, snapshot) {
     if (snapshot.connectionState == ConnectionState.waiting)
         return Center(child: CircularProgressIndicator());
     else
         return Text(counter.toString());
}),

例如someFutureFunction() returns Future<String>... FutureBuilder(builder: (context, snapshot){}中的回调中的snapshot是否需要访问返回值( Future<String>) someFutureFunction() ??

我只是想在脑子里保存错误信息之前先确认一下是否正确:)

谢谢

快照是与您最近的互动 API 例如,如果您刚刚发送了您的请求,直到得到答复,connectionState 处于等待状态,如果收到答复,快照中的数据将被填充....并且您提出的问题和答案是肯定的

Snapshot 是您的数据的包装器,具有一些有用的属性。它提供您的连接状态,以便您可以根据状态变化确定和更新您的视图。如果将它用于任何网络调用,您会更好地理解它。 ConnectionStates 可以是以下任何一种。

活跃

Connected to an active asynchronous computation.
For example, a Stream that has returned at least one value, but is not yet done.

完成

Connected to a terminated asynchronous computation.

none

Not currently connected to any asynchronous computation.
For example, a FutureBuilder whose FutureBuilder.future is null.

等待中

Connected to an asynchronous computation and awaiting interaction.

此外,您可能会收到在获取数据时可能遇到的任何错误。

这是 FutureBuilder 的一个更好的例子,它可以处理其他一些情况...

FutureBuilder<String>(
     future: someFutureFunction(),
     builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
     if (snapshot.connectionState == ConnectionState.waiting)
         return Center(child: CircularProgressIndicator());
     else if (snapshot.hasData)
         return Text(snapshot.data);
     else if (snapshot.hasError)
         return Text('Error occured!');

})

您可以从此处找到有关快照的更多信息 https://api.flutter.dev/flutter/widgets/AsyncSnapshot-class.html

快照在内部作为 AsyncSnapshot 工作,它随着指定的 [connectionState] 和可选的 [data] 或 [error] 以及可选的 [stackTrace] 而改变(但不是数据和错误)。

查看下面的代码了解更多详情:

  /// Creates an [AsyncSnapshot] in [ConnectionState.none] with null data and error.
  const AsyncSnapshot.nothing() : this._(ConnectionState.none, null, null, null);

  /// Creates an [AsyncSnapshot] in [ConnectionState.waiting] with null data and error.
  const AsyncSnapshot.waiting() : this._(ConnectionState.waiting, null, null, null);

  /// Creates an [AsyncSnapshot] in the specified [state] and with the specified [data].
  const AsyncSnapshot.withData(ConnectionState state, T data): this._(state, data, null, null);

  /// Creates an [AsyncSnapshot] in the specified [state] with the specified [error]
  /// and a [stackTrace].
  ///
  /// If no [stackTrace] is explicitly specified, [StackTrace.empty] will be used instead.
  const AsyncSnapshot.withError(
    ConnectionState state,
    Object error, [
    StackTrace stackTrace = StackTrace.empty,
  ]) : this._(state, null, error, stackTrace);

如果异步计算最新接收到的数据不为空则[hasData]为真。 如果异步计算从未返回值,这可能是 设置为相关小部件指定的初始数据值。

最后,我们可以说快照是一种改变其状态的异步计算。