我有一个包含在 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/