Flutter 颤振传递状态数据至功能
我正在尝试修改Flutter 颤振传递状态数据至功能,flutter,flutter-layout,Flutter,Flutter Layout,我正在尝试修改showDialog函数外部的状态。以下是我现有的代码: showDialog( context: context, builder: (context) { String contentText = "Content of Dialog"; return StatefulBuilder( builder: (context, setState) { return
showDialog
函数外部的状态。以下是我现有的代码:
showDialog(
context: context,
builder: (context) {
String contentText = "Content of Dialog";
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text("Title of Dialog"),
content: Text(contentText),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.pop(context),
child: Text("Cancel"),
),
FlatButton(
onPressed: () {
setState(() {
contentText = "Changed Content of Dialog";
});
},
child: Text("Change"),
),
],
);
},
);
},
);
在富国大厦
我想重构并编写一个我称之为
updateContent(){
setState(() {
contentText = "Changed Content of Dialog";
});
}
但是,我无法以这种方式更新文本。我认为contextText变量声明中存在问题。将其设置为类变量
String contentText = "Content of Dialog";
_whereShowDialogTriggered()
{
showDialog(
context: context,
builder: (context) {
//String contentText = "Content of Dialog";
return StatefulBuilder(
...
showDialog(
上下文:上下文,
生成器:(上下文){
String contentText=“对话框的内容”;
返回状态生成器(
生成器:(上下文,设置状态){
updateContent(){
设置状态(){
contentText=“更改了对话框的内容”;
});
}
返回警报对话框(
标题:文本(“对话框标题”),
内容:文本(contentText),
行动:[
扁平按钮(
onPressed:()=>Navigator.pop(上下文),
子项:文本(“取消”),
),
扁平按钮(
onPressed:updateContent,
子项:文本(“更改”),
),
],
);
},
);
},
);
尽管如此,此时可能还是为对话框创建一个新的(StatefulWidget)更好。它必须属于showDialog(),才能让setState工作,小部件才能更新。我可以进一步提取updateContent()吗?
updateContent
必须在相同的范围(或更低的范围)内定义作为使用的变量,它需要生成器提供的setState
函数。因此,将其移动到比我的代码中更高的位置会使事情变得更糟(您必须注入setState)。如果您想要更好的封装,请为showDialog的构建器现在创建的所有内容定义一个新的小部件。
String contentText = "Content of Dialog";
_whereShowDialogTriggered()
{
showDialog(
context: context,
builder: (context) {
//String contentText = "Content of Dialog";
return StatefulBuilder(
...
showDialog(
context: context,
builder: (context) {
String contentText = "Content of Dialog";
return StatefulBuilder(
builder: (context, setState) {
updateContent() {
setState(() {
contentText = "Changed Content of Dialog";
});
}
return AlertDialog(
title: Text("Title of Dialog"),
content: Text(contentText),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.pop(context),
child: Text("Cancel"),
),
FlatButton(
onPressed: updateContent,
child: Text("Change"),
),
],
);
},
);
},
);