gpt4 book ai didi

dart - StreamBuilder 子部件交互

转载 作者:IT王子 更新时间:2023-10-29 07:05:56 34 4
gpt4 key购买 nike

以下代码按预期构建和运行——当用户键入内容时,会显示一条错误消息,直到该字符串通过电子邮件验证格式。

Widget emailField(){
return StreamBuilder(
stream: bloc.emailStream,
builder: (BuildContext context, snapshot) {
return TextField(
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
hintText: 'you@example.com',
labelText: 'E-mail address',
errorText: snapshot.error
),
onChanged: (newValue){
bloc.updateEmail(newValue);
},
);
},
);

有人告诉我,当流发生变化时,将调用 builder 字段来重建 TextField。但如果是这样的话,TextField 不应该总是有一个空字符串吗?相反发生的是它保留了它的值(value)。

我想了解这里到底发生了什么。谢谢!

最佳答案

不是真的,如果你看一下 TextField 的代码,你会发现它是一个 StatefulWidget,所以它有一个 State 并且状态保持值。

 class TextField extends StatefulWidget

此外,如果您不提供 TextEditingController<,您还可以使用 TextEditingController 来处理(获取/清除/设置)TextField 的数据 如您在源代码中所见,它将默认创建。

 @override
void initState() {
super.initState();
if (widget.controller == null)
_controller = TextEditingController();
}

您可以在此处找到更多信息:https://flutter.io/cookbook/forms/text-field-changes/

关于dart - StreamBuilder 子部件交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52866972/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com