Если у меня есть этот экран, содержащий некоторые виджеты:
@override
Widget build(BuildContext context) {
return Column(children :[
TextFieldWidget(),
ClearButton(),
])
}
виджет текстового поля - это виджет без сохранения состояния, возвращающий текстовое поле с контроллером, называемым «цвет».
виджет ClearButton возвращает кнопку с повышенными правами, я хочу, чтобы при нажатии на кнопку текст текстового поля очищался. Как мне это сделать.
ты можешь попробовать это
class CustomApp extends StatelessWidget {
CustomApp({ Key? key }) : super(key: key);
final TextEditingController controller = new TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
CustomTextFieldWiget(controller: controller),
CustomButton(
onPressed: () {
controller.text = "";
},
)
],
),
);
}
}
class CustomButton extends StatelessWidget {
final VoidCallback? onPressed;
const CustomButton({Key? key, this.onPressed}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextButton(
onPressed: onPressed,
child: Text("Button"),
);
}
}
class CustomTextFieldWiget extends StatelessWidget {
final TextEditingController? controller;
const CustomTextFieldWiget({Key? key, this.controller}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextField(
controller: controller,
);
}
}
Вы можете играть с ним.
class TestWidget extends StatelessWidget {
TestWidget({Key? key}) : super(key: key);
final TextEditingController controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
TextFiledWidget(controller: controller),
ClearButton(
callback: () {
controller.clear();
},
)
],
));
}
}
class ClearButton extends StatelessWidget {
const ClearButton({
Key? key,
required this.callback,
}) : super(key: key);
final VoidCallback callback;
@override
Widget build(BuildContext context) {
return ElevatedButton(onPressed: callback, child: Text("clear"));
}
}
class TextFiledWidget extends StatelessWidget {
const TextFiledWidget({
Key? key,
required this.controller,
}) : super(key: key);
// you can also use callback method
final TextEditingController controller;
@override
Widget build(BuildContext context) {
return TextField(
controller: controller,
);
}
}
Попробуй это,
Создать переменную
var _controller = TextEditingController();
И ваш TextField:
TextField(
controller: _controller,
decoration: InputDecoration(
hintText: 'Enter a message',
suffixIcon: IconButton(
onPressed: _controller.clear,
icon: Icon(Icons.clear),
),
),
)
Есть icon
, который при нажатии очищает textfield
спасибо, я знаю это, но я хочу очистить от другой кнопки на другом экране