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(),
),
),
),
),
);
}
}
我试图制作单个 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(),
),
),
),
),
);
}
}