📜  Flutter – FutureBuilder 小部件(1)

📅  最后修改于: 2023-12-03 15:00:48.163000             🧑  作者: Mango

Flutter – FutureBuilder 小部件

Flutter 的 FutureBuilder 小部件是一种非常有用的小部件,可以帮助开发者在需要阻塞 I/O 操作时,能够很好地将界面的处理与数据获取分离开来,同时也可以在数据到达后自动更新UI。在本文中,我们将对该小部件进行更详细的介绍,包括其基本用法和示例。

FutureBuilder 小部件

在 Flutter 中,FutureBuilder 小部件是一个基于 Future 对象来构建 UI 的小部件,它是一个异步的小部件,它们通常用于处理一些需要耗时操作的场景,例如,从网络获取数据并渲染到界面上。

当一个异步操作完成后,FutureBuilder 将自动根据接收到的数据更新 UI,而不需要手动干预或调用 setState()。

如何使用 FutureBuilder 小部件

使用 FutureBuilder 小部件非常简单。我们只需要定义一个 Future 对象,并将其传递给 FutureBuilder 小部件。FutureBuilder 执行后,等待 Future 对象解析完返回内容,并根据返回内容自动更新 UI。下面是一个使用 FutureBuilder 小部件的示例代码:

Future<String> getData() async {
  await Future.delayed(Duration(seconds: 5));
  return "Data Loaded";
}

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<String>(
      future: getData(),
      builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
        switch (snapshot.connectionState) {
          case ConnectionState.waiting:
            return Center(child: CircularProgressIndicator());
          case ConnectionState.done:
            return Text(snapshot.data ?? "");
          default:
            return Text("Error occurred");
        }
      },
    );
  }
}

在上面的代码中,我们定义了一个名为 getData() 的异步函数,它模拟从网络获取数据并等待 5 秒钟。然后,我们将该函数传递给 FutureBuilder 小部件,并通过 builder 构建器函数定义了 FutureBuilder 小部件的 UI。

在 builder 构建器函数中,我们使用 AsyncSnapshot 参数来表示异步任务的结果,并使用 ConnectionState 枚举来检查异步任务的状态。在不同的连接状态下,我们显示不同的内容。如果连接状态为 ConnectionState.waiting,则显示一个进度条;如果连接状态为 ConnectionState.done,则返回从异步任务中接收到的数据。

最后,我们将 MyWidget 作为一个小部件添加到应用程序中。

总结

在本文中,我们了解了什么是 FutureBuilder 小部件以及如何使用它。通过 FutureBuilder,我们可以更方便地处理异步任务,并自动更新 UI。除了在网络场景中使用 FutureBuilder,我们还可以将其用于本地数据库、文件IO等场景中。如果你想了解更多关于 FutureBuilder 小部件的细节,可以参考官方文档:Flutter FutureBuilder