gpt4 book ai didi

dart - Flutter - 为什么 slider 不会在 AlertDialog 中更新?

转载 作者:IT老高 更新时间:2023-10-28 12:36:56 25 4
gpt4 key购买 nike

我在做一个 AlertDialog,所以当我尝试在 value 状态中插入 Slider 小部件时听起来真的很陌生,如果 Slider 在 AlertDialog 之外,则不会发生这种情况

new Slider(
onChanged: (double value) {
setState(() {
sliderValue = value;
});
},
label: 'Oi',
divisions: 10,
min: 0.0,
max: 10.0,
value: sliderValue,
)

AlertDialog的完整小部件代码

Future<Null> _showDialog() async {
await showDialog<Null>(
context: context,
builder: (BuildContext context) {
return new AlertDialog(
title: const Text('Criar novo cartão'),
actions: <Widget>[
new FlatButton(onPressed: () {
Navigator.of(context).pop(null);
}, child: new Text('Hello'))
],
content: new Container(
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new Text('Deseja iniciar um novo cartão com quantos pedidos ja marcados?'),
new Slider(
onChanged: (double value) {
setState(() {
sliderValue = value;
});
},
label: 'Oi',
divisions: 10,
min: 0.0,
max: 10.0,
value: sliderValue,
)
],
),
),
);
}
);
}

一切都在 StatefullWidget 的 State 类下。

它看起来不会更新值,当尝试更改值时保持在同一位置。

更新 1

问题是 Slider (onChanged, value) 中有 2 个必需参数,所以我应该更新这个或 UI 保持不变,看视频应用程序是如何运行的

Video on Youtube

更新 2

我还在 Github 存储库中打开了一个问题以获得帮助,如果有人想获得更多信息,可以转到 issue #19323

最佳答案

问题在于保持状态的不是您的对话框。它是调用 showDialog 的小部件。当您调用 setState 时也是如此,您正在调用对话框创建者。

问题是,对话框不是内置在 build 方法中的。它们位于不同的小部件树上。所以当对话创建者更新时,对话不会。

相反,您应该使您的对话框有状态。将数据保存在该对话框中。然后使用 Navigator.pop(context, sliderValue) 将 slider 值发送回对话框创建者。

对话框中的等价物是

FlatButton(
onPressed: () => Navigator.of(context).pop(sliderValue),
child: Text("Hello"),
)

然后您可以在 showDialog 结果中捕获:

final sliderValue = await showDialog<double>(
context: context,
builder: (context) => MyDialog(),
)

关于dart - Flutter - 为什么 slider 不会在 AlertDialog 中更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51271061/

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