Flutter 将单选按钮逻辑应用于选择芯片

Flutter apply radio button logic to choicechip

我试图制作单个 selection choicechip 但它不能正常工作。这是我的筹码:

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 HomeScreen extends StatefulWidget {
  const HomeScreen({Key key}) : super(key: key);

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

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

  @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,
                        listIndex: key,
                      )))
                  .values
                  .toList(),
            ),
          ),
        ),
      ),
    );
  }
}

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

我已经改变了方法,使用下面的代码来实现你正在寻找的东西

芯片小部件

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(),
          ),
        ),
      ),
    ),
   );
  }
 }