切换按钮在颤动状态下不切换 [英] Toggle Button not toggling in Flutter

查看:5
本文介绍了切换按钮在颤动状态下不切换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个带有ToggleButton的GridList,但当我尝试在彼此之间切换按钮时,什么也没有发生。有什么主意吗?我有一个列表is Selected,我在setState中调用了它。布局很好,但我一使用GridView,它似乎就更改了setState。

class Backgrounds extends StatefulWidget {

  @override
  _BackgroundsState createState() => _BackgroundsState();
}

class _BackgroundsState extends State<Backgrounds> {

  List<bool> isSelected;

  void initState() {
    isSelected = [true, false, false, false, false, false, false, false, false];
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    var counter = 0;
    return GridView.count(
        padding: EdgeInsets.all(12),
        crossAxisCount: 3,
        mainAxisSpacing: 0,
        crossAxisSpacing: 0,
        children: [
          Image.asset('images/image1.png'),
          Image.asset('images/image2.png'),
          Image.asset('images/image3.png'),
          Image.asset('images/image4.png'),
          Image.asset('images/image5.png'),
          Image.asset('images/image5.png'),
          Image.asset('images/image6.png'),
          Image.asset('images/image7.png'),
          Image.asset('images/image8.png')
          ].asMap().entries.map((widget) {
          final index = ++counter - 1;
          return ToggleButtons(
    onPressed: (int index) {
      print('selected');
    setState(() {
      // isSelected[index] = !isSelected[index];
    for (int i = 1; i < isSelected.length; i++) {
    isSelected[i] = i == index;
    }
    });
    },
     isSelected: [isSelected[index]],
            // isSelected: (isSelected),
    selectedBorderColor: Color(0xff2244C7),
            borderColor: Colors.transparent,
    borderWidth: 3,
    borderRadius: BorderRadius.all(Radius.circular(8),
    ),
    children: [widget.value],
    );
    }).toList());
}
}

推荐答案

问题出在切换按钮的‘onPressed()’函数中。因为网格视图的列表是由映射生成的,所以每次切换按钮子列表大小为1时,‘OnPressed()’中的索引参数将始终给出值0。我建议在map中使用‘widget.key’,因为这会给出子窗口小部件的正确索引。因此,网格视图代码应为

return GridView.count(
    padding: EdgeInsets.all(12),
    crossAxisCount: 3,
    mainAxisSpacing: 0,
    crossAxisSpacing: 0,
    children: [
      Image.asset('images/image1.png'),
      Image.asset('images/image2.png'),
      Image.asset('images/image3.png'),
      Image.asset('images/image4.png'),
      Image.asset('images/image5.png'),
      Image.asset('images/image5.png'),
      Image.asset('images/image6.png'),
      Image.asset('images/image7.png'),
      Image.asset('images/image8.png')
      ].asMap().entries.map((widget) {
      final index = ++counter - 1;
      return ToggleButtons(
onPressed: (_) {
  print('selected');
setState(() {
for (int i = 0; i < isSelected.length; i++) {
// isSelected[index] = !isSelected[index];
isSelected[i] = i == widget.key;
}
});
},
 isSelected: [isSelected[widget.key]],
        // isSelected: (isSelected),
selectedBorderColor: Color(0xff2244C7),
        borderColor: Colors.transparent,
borderWidth: 3,
borderRadius: BorderRadius.all(Radius.circular(8),
),
children: [widget.value],
);
}).toList());

这篇关于切换按钮在颤动状态下不切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆