【问题标题】:how to await setState in Flutter? [duplicate]如何在 Flutter 中等待 setState? [复制]
【发布时间】:2020-04-14 19:11:37
【问题描述】:

我正在向ListView 动态添加项目。当我添加新项目时,它应该像 WhatsApp 应用程序一样滚动到底部。

我就是这样做的

setState(() {
  _textList.add(text);
});
_scrollController.animateTo( //Should run after rebuild
  _scrollController.position.maxScrollExtent,
  duration: const Duration(milliseconds: 300),
  curve: Curves.easeInOut,
);

由于setState() 异步运行,maxScrollExtent 不会更新,这会导致只滚动到上一个项目。

如何为setStateawait。有没有办法做到这一点。我也不想打电话给Future.delayed

这是我的完整代码DartPad

谢谢。

【问题讨论】:

  • stackoverflow.com/questions/43370176/using-async-setstate
  • @Salma。该链接与 reactjs 相关 :(
  • SetState 是同步的,所以整个问题没有意义
  • @CrazyLazyCat 您应该在发送消息时使用此代码。就像在某个地方触发发送消息的事件一样。比如,发送按钮的侧 onTap

标签: flutter flutter-layout


【解决方案1】:

您可以尝试将此方法作为构建方法的第一行。

         WidgetsBinding.instance.addPostFrameCallback((_) {
                  if (_scrollController.hasClients) {
                    _scrollController.animateTo( 
      _scrollController.position.maxScrollExtent,
      duration: const Duration(milliseconds: 300),
      curve: Curves.easeInOut,
    );
  }

  });

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 2019-10-21
    • 2018-08-19
    • 2022-01-07
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多