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