首页 > 解决方案 > 动态更改 AlertDialog 标题 (showDialog())

问题描述

我正在向用户显示一个对话框,我想在单击对话框的肯定按钮时更改对话框的标题,但我该怎么做。

由于对话框已经在屏幕上可见并且setState()无法执行任何操作。

代码:

String title = "Old Title" // member variable

RaisedButton(onPressed: (){
    showDialog(context: context, builder: (context) {
      return AlertDialog(title: Text(title), actions: <Widget>[FlatButton(onPressed: () {
        setState(() => title = "New Title");
      }, child: Text("Change"))],);
    });
}, child: Text("Change"),)

标签: dartflutterflutter-layout

解决方案


您可以这样做 - 无需创建额外的小部件

RaisedButton(
  onPressed: () {
    showDialog(
        context: context,
        builder: (context) {
          StreamController<String> controller = StreamController<String>.broadcast();
          return AlertDialog(
            title: StreamBuilder(
              stream: controller.stream,
              builder: (BuildContext context, AsyncSnapshot<String> snapshot){
                      return Text(snapshot.hasData ? snapshot.data : 'Title');
              }),
            actions: [
              FlatButton(
                  onPressed: () {
                    controller.add('New Title');
                  },
                  child: Text('Change'))
            ],
          );
         });
  },
  child: Text('Change'),
);

推荐阅读