改变颤振中其他实例的变量值



我尝试为我的应用程序创建自定义下拉列表。下拉列表在同一屏幕上可以有三个重复项。当点击每个下拉列表时,都会有一个名为isDropdownOpened的变量设置为true。在这种情况下,当其中一个下拉列表打开时,我希望其他下拉列表不必再次将其isDropdownOpened变量设置为false。那么,当其他下拉实例被点击时,如何自动更改isDropdownOpened值呢?

我应该使用像provider、bloc和cubit这样的状态管理吗?甚至我也可以用setState来做。

这是代码。

class SearchDropdownButton extends StatefulWidget {
const SearchDropdownButton({
Key? key,
required this.text,
}) : super(key: key);
final String text;
@override
State<SearchDropdownButton> createState() => _SearchDropdownButtonState();
}
class _SearchDropdownButtonState extends State<SearchDropdownButton> {
late OverlayEntry _categoryBottomBar;
bool isDropdownOpened = false;
@override
Widget build(BuildContext context) {
return Expanded(
child: ElevatedButton(
onPressed: () {
setState(() {
if (isDropdownOpened) {
_categoryBottomBar.remove();
} else {
Overlay.of(context)!.insert(_categoryBottomBar);
}
isDropdownOpened = !isDropdownOpened;
});
},

以及一行上的实例。

Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: const [
SizedBox(width: 20),
SearchDropdownButton(text: "Consume"),
SizedBox(width: 20),
SearchDropdownButton(text: "Gadget"),
SizedBox(width: 20),
SearchDropdownButton(text: "Fashion"),
SizedBox(width: 20),
],
),

完整代码:https://pastebin.com/QtfDfXzU

您的情况并非特定于颤振(React相同(。实现这一点的基本方法是将isDropdownOpened状态移动到父级有状态小部件。相应的react教程在这里。

如果您想以隐式方式实现这一点,那么是的,您应该使用状态管理库来实现组件间的状态共享。

最新更新