【问题标题】:Flutter Provider, where to place a function call to load data from firestore databaseFlutter Provider,在哪里放置函数调用以从 firestore 数据库加载数据
【发布时间】:2020-06-12 15:00:05
【问题描述】:

我目前正在开发一个应用程序,我想获取用户朋友的一些数据。理想情况下,登录后,此信息会加载到屏幕上以供查看。

我最初在我的 HomeScreen 的“build”方法中调用函数来执行此操作,但这导致了无限循环,因为函数调用以“notifyListeners()”结束。

话虽如此,我应该在哪里调用以避免循环,同时在从数据库中获取数据后仍要更新 UI?

【问题讨论】:

  • 能否将您目前得到的代码添加到问题中?
  • 如果你使用 statefull 小部件,initState 是调用任何 api 的正确位置
  • 你也可以在Provider的构造函数中获取数据。

标签: flutter dart google-cloud-firestore state-management


【解决方案1】:

您应该看看FutureBuilder widget,它提供了很好的功能来加载异步数据并在可用时显示结果。在加载数据时,或者如果您的代码遇到错误,您可以显示不同的小部件。本质上它是这样工作的:

FutureBuilder<String>(
  future: _yourFuture,
  builder: (context, snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.active:
      case ConnectionState.waiting:
        // Return loading indicator
        return Container();
      case ConnectionState.done:
        if (snapshot.hasError) {
          // Return error
          return Container();
        } else if (snapshot.hasData) {
          // Data loaded => use snapshot.data to access it
          return Container();
        }
  }
})

我不建议在initState() 期间加载数据,因为此方法不能异步,因此您无法等待结果。

希望对你有帮助。

【讨论】:

    最近更新 更多