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

我在做一个 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(),
)

https://stackoverflow.com/questions/51271061/

相关文章:

dart - 如何在 Flutter 中绘制自定义圆角矩形边框(ShapeBorder)?

dart - 如何转换成双倍

dart - 如何将 Column 的子元素与底部对齐

android - Flutter dart 调试器断点停止工作

flutter - 如何在我的应用栏上添加抽屉和搜索图标

flutter - 如何删除 Flutter IconButton 大填充?

dart - 无法使用 Flutter 调用 Localhost,将随机端口分配给 HTTP GET

git - 如何解决 Flutter 上的 "Unable to find git in your

dart - 执行 POST 请求时如何解决 Flutter CERTIFICATE_VERIFY_

flutter - 在 flutter 应用程序中保存 jwt token 的最佳方法是什么?