【发布时间】:2019-12-16 12:01:57
【问题描述】:
我有一个页面,其中包含一个文本,它应该显示我在 TextEditingController 中介绍的文本。我只粘贴重要的代码,如果需要更多请告诉我:
@override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(
key: _scaffoldKey,
appBar: _buildBar(context),
body: Container(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 10),
),
buildTitle(),
],
)))),
onWillPop: () => _onWillPop(context));
...
}
buildTitle() 方法是:
Widget buildTitle() {
return Column(children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
name == null ? "" : name,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
IconButton(
icon: Icon(Icons.edit),
onPressed: () {
changeName();
},
),
],
),
...
]);
}
而 changeName() 是:
void changeName() {
showDialog(
context: context,
builder: (context) {
return StatefulBuilder(builder: (context, setState) {
return AlertDialog(
title: Text('Name'),
content: TextField(
autofocus: true,
controller: _textController,
decoration: InputDecoration(
hintText: "Name of product",
errorText: incorrectName
? 'The name could not be empty'
: null,
),
),
actions: <Widget>[
FlatButton(
child: new Text('OK'),
onPressed: () {
if (_textController.text.length == 0) {
setState(() {
_textController.text.length == 0
? incorrectName = true
: incorrectName = false;
});
} else {
setState(() {
incorrectName = false;
name = _textController.text;
});
Navigator.of(context).pop();
}
},
),
FlatButton(
child: new Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});
});
}
起初,名称是空的,所以只出现编辑按钮,但是当我点击确定时,文本不会改变,但我有其他方法使用 SetState,当我点击时,名称就会出现。
为什么在这种情况下不使用 SetState 更新名称?
【问题讨论】:
标签: android flutter dart widget setstate