dart - 动态更改 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"),)
解决方案
您可以这样做 - 无需创建额外的小部件
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'),
);
推荐阅读
- python - 为什么不同 dx 的 2D 扩散模拟结果不同?
- javascript - 有没有更好的方法来扩展我的标准 Autodesk Forge Web 界面?
- node.js - 猫鼬find没有返回数组
- laravel - 我如何限制任何路由的直接访问并抛出 404 异常,即使存在路由?
- javascript - 无法在导航标题上调用函数
- react-native - pod install 后 Nativemodule AsyncStorage 为空
- javascript - 虚拟主机中的代理形成外部IP?
- swift - SwiftUi - 背景无法更改/无法访问
- vue.js - elastic beanstalk 自定义构建过程
- pentaho - 更改报告页面中的默认 alflytics 徽标