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

问题描述 投票:0回答:1

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

文本字段位于有状态窗口小部件内,该窗口小部件是父有状态窗口小部件的组件。该块已在“窗口小部件”构建器外部初始化。

我要做的是重置流,以便当子窗口小部件在视图内外动画时,快照错误不再存在。目前,子窗口小部件重建后错误仍然存​​在。有关如何实现这一点的任何想法?

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,
                         ),
                      );
                  }
              ),
          ),
      );
   }
}
android ios mobile dart flutter
1个回答
0
投票

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

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

因此,当值正确时,strem将接受有效值w / o错误。

© www.soinside.com 2019 - 2024. All rights reserved.