我想从凸起按钮的onPressed清除文本。请注意,我知道我可以使用有状态的小部件并设置状态。但是我试图避免使主页成为有状态的小部件,而是使用块模式和流。考虑到这一点,我如何清除文本字段的文本?
TextBox
答案 0 :(得分:0)
如果要使用TextEditingController
。您必须使用StatefulWidget
。正如文档所述,您必须将控制器放置在小部件的dispose()
方法中。
class TextEditingExample extends State<MyHomePage> {
final _controller = TextEditingController();
void initState() {
_controller.addListener(() {
final text = _controller.text.toLowerCase();
_controller.value = _controller.value.copyWith(
text: text,
selection:
TextSelection(baseOffset: text.length, extentOffset: text.length),
composing: TextRange.empty,
);
});
super.initState();
}
void dispose() {
_controller.dispose();
super.dispose();
}
Widget build(BuildContext context) {
return Scaffold(
body: Container(
alignment: Alignment.center,
padding: const EdgeInsets.all(6),
child: Column(
children: <Widget>[
TextFormField(
controller: _controller,
decoration: InputDecoration(border: OutlineInputBorder()),
),
RaisedButton(
onPressed: () {
_controller.clear();
_controller.dispose();
},
child: Icon(Icons.add),
)
],
),
),
);
}
}
class HomePage extends StatelessWidget {
final TextEditingController _controller = new TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
StreamBuilder<String>(
//stream: bloc.getTextStream,
builder: (context, snapshot) {
return TextField(
controller: _controller,
// onChanged: bloc.addString,
decoration: InputDecoration.collapsed(
hintText: 'Category@Value',
),
);
}),
RaisedButton(
onPressed: () {
_controller.clear();
//disposing right way after using it, because it has to be diposed
// and there is no way we can dispose it in StatelessWidget
_controller.dispose();
},
child: Icon(Icons.add),
)
],
),
);
}
}
答案 1 :(得分:0)
不知道能不能帮到你。这是我的简单解决方案。只需将 null 分配给您的流控制器。
bloc.getTextStream.add(null);