Передача TextEditingController в качестве параметра функции?

#flutter #dart #textfield #texteditingcontroller

#flutter #dart #текстовое поле #texteditingcontroller

Вопрос:

Я создал два текстовых поля в flutter с помощью функции, но я хочу использовать два разных TextEditingControllers для каждого. Как я могу передать TextEditingController в качестве параметра функции?

          Widget fieldmaker(String title) {
        return Container(
          width: double.infinity,
          height: 50,
          padding: EdgeInsets.symmetric(
            horizontal: 10,
          ),
          child: TextField(
            controller: ,
            decoration: InputDecoration(
              hintText: title,
              hintStyle: TextStyle(
                fontSize: 20,
              ),
              contentPadding: EdgeInsets.all(2),
            ),
          ),
        );
     }
final amountcontroller=TextEditingController();
  final titlecontroller=TextEditingController();

        Widget build(BuildContext context) {
      return Column(
        children: [
          fieldmaker('Title'),
          fieldmaker('Amount'),
        ],
      );
    }
  

Ответ №1:

Вы можете передать его в качестве аргумента своей функции:

          Widget fieldmaker(String title,TextEditingController controller) {
        return Container(
          width: double.infinity,
          height: 50,
          padding: EdgeInsets.symmetric(
            horizontal: 10,
          ),
          child: TextField(
            controller: controller,
            decoration: InputDecoration(
              hintText: title,
              hintStyle: TextStyle(
                fontSize: 20,
              ),
              contentPadding: EdgeInsets.all(2),
            ),
          ),
        );
     }
final amountcontroller=TextEditingController();
  final titlecontroller=TextEditingController();

        Widget build(BuildContext context) {
      return Column(
        children: [
          //pass them to the function from here
          fieldmaker('Title',titlecontroller), 
          fieldmaker('Amount',amountcontroller),
        ],
      );
    }
  

Ответ №2:

передайте это как

 fieldmaker('Title', amountcontroller);
  

и измените свою функцию

 fieldmaker(String title, TextEditingController yourTextEditingController){
//use yourTextEditingController here
return Container(
          width: double.infinity,
          height: 50,
          padding: EdgeInsets.symmetric(
            horizontal: 10,
          ),
          child: TextField(
            controller: yourTextEditingController,
            decoration: InputDecoration(
              hintText: title,
              hintStyle: TextStyle(
                fontSize: 20,
              ),
              contentPadding: EdgeInsets.all(2),
            ),
          ),
        );

}

  

Ответ №3:

Если бы ваш метод fieldMaker был классом, который FieldMaker расширяет StatefulWidget, класс мог бы создать TextController и настроить его на основе заголовка. Тогда вы можете:

 children: <Widget>[
  FieldMaker('Title'),
  FieldMaker('Amount'),
]