¿Cómo puedo generar un nuevo TextEditingController cada vez que agregue un nuevo TextBlock?
Entonces, tengo esta página, donde puedo agregar múltiples TextFormFiled que representan un bloque de texto. La cosa es que se genera dinámicamente, así que nunca sabes cuántos controladores de edición de texto necesitas.
void addTextBlock() {
state.blocks.add(
TextBlock(hint: 'Description', controler: state.descriptionController));
}
Aquí está el código que se ejecuta cuando se pulsa el botón “Agregar bloque de texto” y, como se puede ver, utiliza el mismo controlador.
El widget TextBlock:
class TextBlock extends Block {
TextBlock({required this.controler, required this.hint})
: super(BlockType.TextBlock);
final String hint;
final TextEditingController controler;
@override
Widget toWidget() {
return TextFormField(
controller: controler,
decoration: InputDecoration(
filled: true,
fillColor: AppColors.textFieldBackground,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
borderSide: BorderSide(color: AppColors.textFieldHintColor),
),
contentPadding:
const EdgeInsets.symmetric(vertical: 22.0, horizontal: 24.0),
hintText: hint,
hintStyle:
AppTextStyles.normalRoboto(color: AppColors.textFieldHintColor),
),
maxLines: null,
keyboardType: TextInputType.multiline,
style: AppTextStyles.normalRoboto(color: AppColors.textFieldHintColor),
);
}
}
davy.ai
Solución
Para crear dinámicamente
TextFormField
para un número desconocido de bloques de texto, un enfoque es utilizar unaList<texteditingcontroller>
para almacenar un controlador para cada bloque. Aquí hay un código actualizado para el widgetTextBlock
:Luego, en el widget principal, puedes crear una
List<texteditingcontroller>
y pasarla a cada widgetTextBlock
utilizando el métodoIndexedWidgetBuilder
:De esta manera, cada vez que el usuario toque el botón “Agregar Bloque de Texto”, se agrega un nuevo
TextEditingController
a la lista, por lo que se crea un nuevoTextFormField
.