#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'),
]