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"),
                ),
              ],
            );
          },
        );
      },
    );