gpt4 book ai didi

flutter - 如何在 showModalBottomSheet 中设置状态

转载 作者:行者123 更新时间:2023-12-03 02:39:46 26 4
gpt4 key购买 nike

我们无法更新小部件状态的 BottomSheet 是否有任何限制?正如您在下面的示例中所看到的,我使用的是 Switch,但它的显示没有改变,虽然值更新了,只是它不会再次重新渲染。

现在这是 StatefulWidget 的一部分。

我在使用 DropdownButton 小部件时遇到了同样的问题。这些都可以在正常页面中正常工作。

有人有这个想法吗?

showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return BottomSheet(
onClosing: () {},
builder: (BuildContext context) {
return Switch(
onChanged: (bool v) {
debugPrint('v is ${v.toString()}');
// b = v; <<-- This is also not working when using StatelessWidget
setState(() => b = v);
debugPrint(b.toString());
},
value: b,
);
},
);
},
);

最佳答案

这里的问题是 BottomSheet 您正在创建的是 不属于 您的 StatefulWidget .如果您只是为了使用 setState 而使小部件有状态内部 showModalBottomSheet ,您现在可以还原该更改。

您真正想要做的是在您的 BottomSheet 中设置状态.您可以通过传递 StatefulWidget 来做到这一点。到 builder或使用 StatefulBuilder ,为了简单起见,我将在此示例中执行此操作:

showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return BottomSheet(
onClosing: () {},
builder: (BuildContext context) {
bool b = false;
return StatefulBuilder(
builder: (BuildContext context, setState) => Switch(
onChanged: (bool v) {
setState(() => b = v);
},
value: b,
),
);
},
);
},
);

我也搬了 b builder 内的值 BottomSheet的功能.

如果要使用 b 的值在您原来的内部 StatefulWidget同样,您将再次将其移出并且您可能想调用 this.setState以及更新其他小部件(仅当您需要更新时)。

关于flutter - 如何在 showModalBottomSheet 中设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56530043/

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