【问题标题】:Change text in a TextFormField in Flutter在 Flutter 中更改 TextFormField 中的文本
【发布时间】:2020-05-15 16:56:07
【问题描述】:

我有一个包含许多 TextFormField 的表单,它们在 ListView.builder 中动态加载,问题是我只想更改一个 TextFromField 的文本,但我使用 @987654325 更改了所有 TextFromField 的文本@ 这是因为我所有的 TextFormField 都使用同一个控制器,有没有办法改变一个 TextFormField 的文本,不管TextFormField 到底是什么?

非常感谢您的帮助。

这里是ListView.builderTextFormField

class ListBuilder extends StatefulWidget {
  final Preguntas preguntas;
  final formKey;
  ListBuilder({@required this.preguntas, this.formKey});
  Preguntas preguntasGlobal = Preguntas();
  @override
  _ListBuilderState createState() => _ListBuilderState();
}

class _ListBuilderState extends State<ListBuilder> {
  var textController = new TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Column(
       children: <Widget>[
        SizedBox(height: 15.0),
        ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true, 
          itemCount: widget.preguntas.secciones[0].preguntas.length,
          itemBuilder: (BuildContext context, int i){
            return Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                TextFormField(
                  controller: textController,
                  decoration: InputDecoration(
                    errorStyle: TextStyle(fontFamily: "OpenSans-Regular", color: Color(0xffe81935)),
                    hintMaxLines: 500,
                    hintText: widget.preguntas.secciones[0].preguntas[i].respuestas[0].pregunta.descripcion,
                    hintStyle: TextStyle(fontFamily: "OpenSans-Regular", fontSize: 14.0),
                  ),
                  onChanged: (value){}
                ),
              ],
            ); 
          }
        ),
      ],
    );
  }
}

【问题讨论】:

  • 我相信这就是您正在寻找的答案Use dynamic TextField
  • 必须要有控制器吗?您具体想通过控制器实现什么目标?

标签: flutter dart


【解决方案1】:

将一个TextEditingController 用于多个文本字段是不正确的。您应该为每个文本字段创建一个控制器。

我会这样做:

class _ListBuilderState extends State<ListBuilder> {
  List<TextEditingController> _controllers;
  @override
  void initState() { 
    super.initState();
    // Pre-create controllers:
    _controllers = List<TextEditingController>.generate(
        widget.preguntas.secciones[0].preguntas.length, (index) => TextEditingController());
  }


  @override
  Widget build(BuildContext context) {
    return Column(
       children: <Widget>[
        SizedBox(height: 15.0),
        ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true, 
          itemCount: widget.preguntas.secciones[0].preguntas.length,
          itemBuilder: (BuildContext context, int i){
            return Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                TextFormField(
                  // Access a controller by index.
                  controller: _controllers[i],
                  decoration: InputDecoration(
                    errorStyle: TextStyle(fontFamily: "OpenSans-Regular", color: Color(0xffe81935)),
                    hintMaxLines: 500,
                    hintText: widget.preguntas.secciones[0].preguntas[i].respuestas[0].pregunta.descripcion,
                    hintStyle: TextStyle(fontFamily: "OpenSans-Regular", fontSize: 14.0),
                  ),
                  onChanged: (value){}
                ),
              ],
            ); 
          }
        ),
      ],
    );
  }
}

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2019-11-05
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多