Flutter 如何在一个按钮上插入两个操作,然后按delete小部件,并通过new创建它?
在我试图展示的图片上:Flutter 如何在一个按钮上插入两个操作,然后按delete小部件,并通过new创建它?,flutter,textedit,flutter-web,Flutter,Textedit,Flutter Web,在我试图展示的图片上: 1-1-外观如何错误 2-2-我是如何解决的 但它只能同时按下两个按钮(先是删除,然后是随机) 最好只做一件事,但我还没有做 我试图插入代码来删除小部件,并通过一个按钮操作创建它。但它不起作用。 我不明白为什么以及如何让它工作 代码: @覆盖 小部件构建(构建上下文){ 返回脚手架( appBar:appBar( 标题:文本(widget.title), ), 正文:中( 子:列( mainAxisAlignment:mainAxisAlignment.cent
- 1-1-外观如何错误
- 2-2-我是如何解决的 但它只能同时按下两个按钮(先是删除,然后是随机)
@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
textWidget,
扁平按钮(
子项:文本(“随机”),
已按下:(){
设置状态(){
textWidget=Container();
textWidget=Form(
键:_textKey,
子项:TextFormField(
控制器:myTextController,
));
});
myTextController.text=rnd.nextInt(100000000).toString();
}),
扁平按钮(
子项:文本(“删除”),
已按下:(){
设置状态(){
textWidget=Container();
});
}),
],
),
),
);
之所以发生这种情况,是因为您在状态中设置了一个新值,然后在其中设置了另一个值,然后才进行更新。这是按预期进行的
但是,如果要先删除该项,然后再创建一个新项,则可以按如下方式延迟第二个操作:
onPressed: () {
setState(() {
textWidget = Container();
});
Future.delayed(const Duration(milliseconds: 500), () {
setState(() {
textWidget = Form(
key: _textKey,
child: TextFormField(
controller: myTextController,
));
});
myTextController.text = rnd.nextInt(1000000000).toString();
});
},
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
textWidget,
FlatButton(
child: Text("RANDOM"),
onPressed: () {
setState(() {
textWidget = Container();
textWidget = Form(
key: _textKey,
child: TextFormField(
controller: myTextController,
));
});
myTextController.text = rnd.nextInt(1000000000).toString();
}),
FlatButton(
child: Text("DELETE"),
onPressed: () {
setState(() {
textWidget = Container();
});
}),
],
),
),
);
onPressed: () {
setState(() {
textWidget = Container();
});
Future.delayed(const Duration(milliseconds: 500), () {
setState(() {
textWidget = Form(
key: _textKey,
child: TextFormField(
controller: myTextController,
));
});
myTextController.text = rnd.nextInt(1000000000).toString();
});
},