首页 > 解决方案 > 为什么我的 TextEditingController 不起作用?

问题描述

我想要做的是我正在尝试根据用户的需要创建一个 texteditingcontroller 字段。但问题是,当我打印或尝试使用 valueitem.text时,它​​显示为 null。我该如何解决?

class TextEditingModel {
   TextEditingController hint =  TextEditingController(text: '');

  TextEditingModel ({this.hint});

   TextEditingModel hintchange(){
     print(hint);
     return hint;
   }
}
List<TextEditingModel> texteditingcontrollers = [];

   RaisedButton(
    child: Text('Add Controller',
    onPressed: (){
     setState(() {

   TextEditingModel model = TextEditingModel();
  texteditingcontrollers.add(model);

   });
   },),

  for(final item in texteditingcontrollers)
  TextFormField(controller: item.hintchange()),

标签: flutter

解决方案


在它TextEditingModelhintchange()返回类型上TextEditingModel,它应该与hint数据类型相同。同时喜欢在提示上有默认值和可选参数,比如

class TextEditingModel {
  TextEditingController? hint;

  TextEditingModel({this.hint});

  TextEditingController hintchange() {
    return hint ?? TextEditingController(text: '');
  }
}

用例正在按照您的方式工作。


class Test extends StatefulWidget {
  Test({Key? key}) : super(key: key);

  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  List<TextEditingModel> texteditingcontrollers = [];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          for (final item in texteditingcontrollers)
            TextFormField(controller: item.hintchange()),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            TextEditingModel model =
                TextEditingModel(hint: TextEditingController(text: "Asda"));
            texteditingcontrollers.add(model);
          });
        },
      ),
    );
  }
}


推荐阅读