【问题标题】:Flutter rxDart BehaviorSubject looses error messageFlutter rxDart BehaviorSubject 丢失错误消息
【发布时间】:2019-04-11 04:43:23
【问题描述】:

我在StreamBuilder 中有一个TextField,它监听BehaviorSubject 流。当快照有错误时,errorText 会显示它。

问题是当TextField 滚动出可见区域并在StreamBuilder 重建中滚动回来但错误文本消失了,因为这次snapshot.hasError 是假的。

如何维护错误?

【问题讨论】:

    标签: flutter rxdart


    【解决方案1】:

    您可能希望将错误存储在您的StatefulWidgetString 变量中。
    一旦您准备好清除错误(例如用户按下清除按钮),您只需将此变量设置为 null。

    String errorMsg;
    
    StreamBuilder(
      stream: myStream,
      builder: (BuildContext context, snapshot) {
    
        if (snapshot.hasError) {
          errorMsg = snapshot.error.toString();
        }
    
        if (errorMsg != null) {
          return Text(errorMsg);
        }
    
        return new Text(
          snapshot.data.toString(),
        );
      },
    )
    

    【讨论】:

    • 谢谢,它有效。我遇到了另一个问题:如果错误在 streamBuilder 构建之前就已经解决了,然后当它最终构建时,错误就不会出现。你有什么想法吗?
    • 您将 StreamBuilder 放在哪里?也许在另一个 Builder 中?您总是可以为同一个流拥有多个 StreamBuilder 实例。您可以在其他地方实例化这个构建器(它不会经常从外部重建)只是为了填充errorMsg
    • 我正在构建一个表单屏幕,它是 StreamBuilders 的 ListView,因此当点击“提交”按钮时,验证器会将错误发送到未填充的字段并显示错误文本。因此,在单击提交按钮时,并非所有字段都绘制在屏幕上,当用户向下滚动时,字段被绘制但没有错误消息。
    • 我明白了。错误我猜您可能想为此创建一个新问题,因为原始问题已解决。这样其他有类似问题的人就可以轻松找到解决方案。
    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2013-03-21
    • 1970-01-01
    相关资源
    最近更新 更多