android - 重置流以清除任何快照错误

标签 android ios mobile dart flutter

我有一个包含在 StreamBuilder 中的文本字段并绑定(bind)到一个流,当数据添加到接收器时,该流通过验证器运行。有一个按钮可将文本字段值添加到接收器,并且任何快照错误都会显示在 InputDecoration 上。

文本字段位于有状态小部件内,该小部件是父有状态小部件的组件。该 block 是在 Widget 构建器外部初始化的。

我想要做的是重置流,以便当子窗口小部件动画进入和退出 View 时快照错误不再存在。目前,子窗口小部件重建后错误仍然存​​在。关于如何实现这一目标有什么想法吗?

class Parent extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
      return ParentState();
    }
}

class ParentState extends State<Parent> with TickerProviderStateMixin {
    @override
    Widget build(BuildContext context) {
      return Container(
        child: Stack(
          children: <Widget>[
            child(),
            // other forms
          ],
        )
      );
    }
}

class Child extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
      return ChildState();
    }
}

class ChildState extends State<Child> {
    Bloc bloc;

    @override
    void initState() {
      super.initState();
      bloc = Bloc();
    }

    @override
    Widget build(BuildContext context) {
      return BlocProvider(
          bloc: appBloc,
          child: Container(
              child: StreamBuilder(
                  stream: bloc.input,
                  builder: (context, snapshot) {
                     return TextFormField(
                         decoration: InputDecoration(
                            errorText: snapshot.error,
                         ),
                      );
                  }
              ),
          ),
      );
   }
}

最佳答案

看起来您的验证器仍然向流中添加错误。通常验证代码如下所示:

...
if (value.validated) {
  sink.add(value);
} else {
  sink.addError('invalid value');
}

因此,当值正确时,strem 将接受有效值,不会出现错误。

关于android - 重置流以清除任何快照错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561047/

相关文章:

android - 低功耗蓝牙扫描失败

iphone - 停止 NSDictionary 的 block 枚举

angular - Ionic 3如何实现应用程序用户设置并存储它们

android - 如何在所有移动浏览器上正确显示网页

android - 拍摄照片并应用效果(缩放、旋转、灰色、用手指绘制)

android - 在 Android 手机上安装大型 apk 应用程序

java - 导入 com.google.android.gms.gcm 无法解析,Google Play Services 已经安装

php - AFNetworking,AFHTTPRequestOperationManager 为 200 代码时操作失败

objective-c - ios字典数组

listview - Flutter有状态代码问题。设置什么状态?