我正在将 Swift 应用程序移植到 Flutter,并且有各种用于时间输入的文本字段,因此为了让用户只能输入有效时间,我使用 Bloc 来验证它。基本上,在每次输入时,我都会在文本字段的 onChanged 回调中使用字符串和文本字段的 TextEditingController发送一个ValidateText()
事件。OpeningTimesBloc
onChanged: (String value) {
print('textfield 1 onChanged: called');
BlocProvider.of(context)
.add(ValidatedText(text: value, controller: monMorOp));
},
Run Code Online (Sandbox Code Playgroud)
我OpeningTimesBloc
进行验证并使用经过验证的字符串生成一个状态。在OpeningTimesScreen
s中BlocListener
,我获取并使用新值。现在我的麻烦是我有 28 个文本字段,因为我有TextEditingController monMorOp
每个工作日的早上和下午的开放和关闭时间(例如:周一早上开放)和下午的关闭时间。
我是否需要 28 个 TextEditingController 并对以下中的每个控制器进行状态检查BlocListener
:
if (state is ValidatedTextMonMorOp) {
setState(() {
monMorOp.controller.text = state.text;
});
}
Run Code Online (Sandbox Code Playgroud)
或者我怎样才能只传递一个引用,它将引导焦点所在的文本字段?也许是这样的?
if (state is ValidatedText) {
setState(() {
state.controller.text = state.text;
});
}
Run Code Online (Sandbox Code Playgroud)
一如既往,非常感谢您的时间和帮助。
您必须为每个控制器创建一个单独的控制器TextFormField
,因为如果您使用相同的控制器,则无法区分哪个TextFormField
发送哪个数据。
注意:不要忘记处理所有控制器,否则您将收到内存泄漏警告。
归档时间: |
|
查看次数: |
2348 次 |
最近记录: |