直到ConnectionState.done都不会重绘setState

时间:2020-04-12 12:57:52

标签: flutter asynchronous dart

我有一个Scaffold返回的FutureBuilder小部件,我以一种显示原始加载指示符的方式对其进行了设置,然后用ConnectionState.done再次调用了builder方法,即会构建实际的屏幕。在屏幕上,有一些控件,当您点击这些控件时,会在数据库中执行各种数据修改,然后调用setState()

到目前为止,一切都很好,但是在setState上,我首先得到了加载指示器,当从sqlite检索数据时,将呈现屏幕。我很想跳过指标,等到数据在这里。

我猜测我可以将数据保存在内存中,在数据库和内存中以及在setState()中对其进行修改,即使使用ConnectionState.waiting,也可以使用缓存的数据来构建屏幕,但这并没有对于我来说,这似乎不太干净,因为它很容易出错(缓存的数据有时可能无法镜像数据库数据)。

有没有一种方法可以在ConnectionState.waiting时不重新渲染窗口小部件?

谢谢马丁

  @override
  Widget build(BuildContext context) {
    args = ModalRoute.of(context).settings.arguments;
    return FutureBuilder(
      builder: (context, projectSnap) {
        if (projectSnap.connectionState == ConnectionState.none &&
            projectSnap.hasData == null) {
          return Container(child: Text('Waiting for the data source...'));
        }
        if (projectSnap.connectionState == ConnectionState.waiting) {
          return Container(child: Text('Waiting for the data source...'));
        }
        return buildScreenBody(context);
      },
      future: loadDataSources(),
    );
  }

0 个答案:

没有答案