gpt4 book ai didi

android - Flutter SetState 不更新文本

转载 作者:IT王子 更新时间:2023-10-29 07:15:51 24 4
gpt4 key购买 nike

我有一个包含文本的页面,该文本应显示我在 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();
},
)
],
);
});
});
}

起初,name 是空的,所以只出现编辑按钮,但是当我点击 Ok 时,Text 没有改变,但我有另一个 SetState 方法,当我点击时,名字就会出现。

在这种情况下,为什么不使用 SetState 更新名称?

最佳答案

更改 changeName() 返回类型:

Future<String> changeName() {
showDialog<String>(
context: context,
builder: (context) {
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) {
Navigator.of(context).pop(null);
} else {
Navigator.of(context).pop(_textController.text);
}
},
),
FlatButton(
child: new Text('Cancel'),
onPressed: () {
Navigator.of(context).pop(null);
},
)
],
);
});
}

在你的 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: () async {
name = await changeName();
setState((){});
},
),
],
),
...
]);

关于android - Flutter SetState 不更新文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57418296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com