微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter 将单选按钮逻辑应用到choicechip

如何解决Flutter 将单选按钮逻辑应用到choicechip

我试图制作单选choicechip,但它不能正常工作。这是我的芯片:

<a class="searchEngineLink"  gloss="What a great guy" href="http://www.bob.com">Bob</a>

<a class="searchEngineLink"  gloss="What a smart guy" href="http://www.bob.com">Bob2</a>

<br>

<a class="searchEngineLink"  gloss="What a handsome guy" href="http://www.bob.com">Bob3</a>

我是从,

class Chipwidget extends StatefulWidget {
  const Chipwidget({Key key,this.label,this.listIndex}) : super(key: key);

  final String label;
  final int listIndex;

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

class _ChipwidgetState extends State<Chipwidget> {
  int selectedindex = 0;

  @override
  Widget build(BuildContext context) {
    return ChoiceChip(
      label: Text(widget.label),selected: selectedindex == widget.listIndex,selectedColor: Colors.red,onSelected: (value) {
        setState(() {
          selectedindex = value ? widget.listIndex : null;
        });
        print("Selected: " + selectedindex.toString());
      },);
  }
}

当我点击一个筹码时,它被选中。但是当我选择一个新的时,旧的仍然被选中。我不想多选。我一次只想要一个。我需要在我的代码中更改什么?谢谢。

解决方法

我已经改变了方法,使用下面的代码来实现你想要的

芯片小部件

class ChipWidget extends StatelessWidget {
  const ChipWidget({this.label,this.isSelected = false,this.onSelected});

  final String label;
  final bool isSelected;
  final Function onSelected;

    @override
    Widget build(BuildContext context) {
      return ChoiceChip(
       label: Text(label),selected: isSelected,selectedColor: Colors.red,onSelected: onSelected,);
 }
}

主屏幕

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key key}) : super(key: key);

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

class _HomeScreenState extends State<HomeScreen> {
 List<String> _chipItems;
 int selectedPos;

  @override
  void initState() {
  super.initState();
  _chipItems = ["Terleme","Aşırı Düşünme","Baş Ağrısı","Mide Bulantısı"];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
       body: Container(
       height: MediaQuery.of(context).size.height,child: Padding(
        padding: const EdgeInsets.all(8.0),child: Center(
           child: Wrap(
           children: _chipItems
              .asMap()
              .map((key,value) => MapEntry(
                  key,ChipWidget(
                    label: value,isSelected: key == selectedPos,onSelected: (isSelected) {
                      setState(() {
                        selectedPos = key;
                      });

                      print('Selected: $selectedPos');
                    },)))
              .values
              .toList(),),);
  }
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。