[英]Flutter : clear textfield from another widget or screen
If I have this screen contain some widgets:如果我让这个屏幕包含一些小部件:
@override
Widget build(BuildContext context) {
return Column(children :[
TextFieldWidget(),
ClearButton(),
])
}
the textfield widget is stateless widget return textfild with controller called "color".文本字段小部件是无状态小部件,返回带有 controller 的文本字段,称为“颜色”。
the ClearButton widget return elevated button, I want when press on ths button the textfield text clear. ClearButton 小部件返回提升的按钮,我希望在按下按钮时清除文本字段文本。 How can I do that.我怎样才能做到这一点。
you can try this你可以试试这个
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,
);
}
}
You can play with it.你可以玩它。
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,
);
}
}
Try this,尝试这个,
Create a variable创建一个变量
var _controller = TextEditingController();
And your TextField:
还有你的TextField:
TextField(
controller: _controller,
decoration: InputDecoration(
hintText: 'Enter a message',
suffixIcon: IconButton(
onPressed: _controller.clear,
icon: Icon(Icons.clear),
),
),
)
There is an icon
which on press clear the textfield
有一个icon
可以在按下时清除textfield
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.