TextField 和 BLoC:预填充字段
TextField & BLoC : pre-filling a field
我有一个屏幕,上面有我用来 post 广告的表单,我使用同一个屏幕来编辑广告。当我想编辑广告时,表格会预先填写广告内容。我通过将要显示的文本提供给 TextEditingController
.
来做到这一点
同时,我使用 BLoC 模式来管理我的应用程序的业务逻辑,并在 Textfield
属性 的 onChange
属性 中生成一个新状态。因此,每次更改时都会构建文本字段,因此也会构建 TextEditingController
以防止我更改字段的文本。
TextField(
controller: isUpdate ?
TextEditingController(
text: isUpdate == true ? myAd.property.toString() //as it builds at every single change, the text can't be modified
: null,
): null,
onChanged: (newValue) {
context.read<MyBloc>().add(TitleChanged(value: newValue))
有没有办法让我预填该字段,但只预填一次 - 不是在每次构建时 - 以便我可以继续编辑它?
更改代码以使用 TextFormField
并设置 initialValue
TextFormField(
initialValue: isUpdate ? myAd.property.toString(): null,
onChanged: (newValue) {
context.read<MyBloc>().add(TitleChanged(value: newValue))
您可以将文本作为字符串包含在您的 Blocs 状态中,因此您可以使用 state.formText
而不是使用 myAd.property.toString()
。
任何时候您使用 TitleChanged
事件更改表单,您也会更新您的 bloc 中的 formText
。
我有一个屏幕,上面有我用来 post 广告的表单,我使用同一个屏幕来编辑广告。当我想编辑广告时,表格会预先填写广告内容。我通过将要显示的文本提供给 TextEditingController
.
同时,我使用 BLoC 模式来管理我的应用程序的业务逻辑,并在 Textfield
属性 的 onChange
属性 中生成一个新状态。因此,每次更改时都会构建文本字段,因此也会构建 TextEditingController
以防止我更改字段的文本。
TextField(
controller: isUpdate ?
TextEditingController(
text: isUpdate == true ? myAd.property.toString() //as it builds at every single change, the text can't be modified
: null,
): null,
onChanged: (newValue) {
context.read<MyBloc>().add(TitleChanged(value: newValue))
有没有办法让我预填该字段,但只预填一次 - 不是在每次构建时 - 以便我可以继续编辑它?
更改代码以使用 TextFormField
并设置 initialValue
TextFormField(
initialValue: isUpdate ? myAd.property.toString(): null,
onChanged: (newValue) {
context.read<MyBloc>().add(TitleChanged(value: newValue))
您可以将文本作为字符串包含在您的 Blocs 状态中,因此您可以使用 state.formText
而不是使用 myAd.property.toString()
。
任何时候您使用 TitleChanged
事件更改表单,您也会更新您的 bloc 中的 formText
。