Dart 颤振单选按钮自定义以选择单个项目
代码段用于维护每个ListView项的状态。 这个代码是为复选框风格,我在寻找单一的选择时间。我只想选择一项。正在寻找解决方案 需要单选按钮的逻辑。例如,有一个圆形的水平列表,当用户单击单个圆形时,应该会得到一个边框。当用户单击“其他圆”时,所有其他圆边框都应删除边框Dart 颤振单选按钮自定义以选择单个项目,dart,flutter,Dart,Flutter,代码段用于维护每个ListView项的状态。 这个代码是为复选框风格,我在寻找单一的选择时间。我只想选择一项。正在寻找解决方案 需要单选按钮的逻辑。例如,有一个圆形的水平列表,当用户单击单个圆形时,应该会得到一个边框。当用户单击“其他圆”时,所有其他圆边框都应删除边框 void main() { runApp(new MaterialApp( home: new ListItemDemo(), )); } class ListItemDemo extends Stateless
void main() {
runApp(new MaterialApp(
home: new ListItemDemo(),
));
}
class ListItemDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("ListItem"),
),
body: new ListView.builder(
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return new MyListItem(
title: "Hello ${index + 1}",
);
}),
);
}
}
class MyListItem extends StatefulWidget {
final String title;
MyListItem({this.title});
@override
_MyListItemState createState() => new _MyListItemState();
}
class _MyListItemState extends State<MyListItem> {
bool isSelected;
@override
void initState() {
super.initState();
isSelected = false;
}
@override
Widget build(BuildContext context) {
return new Row(
children: <Widget>[
new Text("${widget.title} ${isSelected ? "true" : "false"}"),
new RaisedButton(
onPressed: () {
if (isSelected) {
setState(() {
isSelected = false;
});
} else {
setState(() {
isSelected = true;
});
}
},
child: new Text("Select"),
)
],
);
}
}
void main(){
runApp(新材料)PP(
主页:新建ListItemDemo(),
));
}
类ListItemDemo扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“列表项”),
),
正文:新建ListView.builder(
物品计数:10,
itemBuilder:(构建上下文,int索引){
返回新的MyListItem(
标题:“你好${index+1}”,
);
}),
);
}
}
类MyListItem扩展了StatefulWidget{
最后的字符串标题;
MyListItem({this.title});
@凌驾
_MyListItemState createState()=>new_MyListItemState();
}
类_MyListItemState扩展了状态{
布尔当选;
@凌驾
void initState(){
super.initState();
isSelected=false;
}
@凌驾
小部件构建(构建上下文){
返回新行(
儿童:[
新文本(${widget.title}${isSelected?“true”:“false”}),
新升起的按钮(
已按下:(){
如果(当选){
设置状态(){
isSelected=false;
});
}否则{
设置状态(){
isSelected=true;
});
}
},
子项:新文本(“选择”),
)
],
);
}
}
脏解决方案:只需维护一个布尔值数组,其中每个元素都引用列表中每个元素的状态(无论是否选中)。当然,每次选择时,数组中应该只有一个“true”值,因为您希望执行类似于无线电的逻辑
我编辑了你的代码。只需检查错误,因为我没有运行此:
void main() {
runApp(new MaterialApp(
home: new ListItemDemo(),
));
}
class ListItemDemo extends StatelessWidget {
var arrayState = [false,false,false,false,false,false,false,false,false,false];
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("ListItem"),
),
body: new ListView.builder(
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return new MyListItem(
title: "Hello ${index + 1}",
array: arrayState,
setter: changeArrayState,
ind: index,
);
}),
);
}
void changeArrayState(int index)
{
for(int i=0; i<arrayState.length; i++)
{
arrayState[i] = false;
}
arrayState[index] = true;
}
}
class MyListItem extends StatefulWidget {
final String title;
final List<bool> arrayState;
final void Function(int) changeState;
final int index;
MyListItem({this.title, this.arrayState, this.changeState, this.index});
@override
_MyListItemState createState() => new _MyListItemState();
}
class _MyListItemState extends State<MyListItem> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return new Row(
children: <Widget>[
new Text("${widget.title} ${widget.arrayState[widget.index] ? "true" : "false"}"),
new RaisedButton(
onPressed: () {
setState(() {
widget.changeArrayState(widget.index);
//change the border the way you like
});
},
child: new Text("Select"),
)
],
);
}
}
void main(){
runApp(新材料)PP(
主页:新建ListItemDemo(),
));
}
类ListItemDemo扩展了无状态小部件{
var arrayState=[假,假,假,假,假,假,假,假,假];
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“列表项”),
),
正文:新建ListView.builder(
物品计数:10,
itemBuilder:(构建上下文,int索引){
返回新的MyListItem(
标题:“你好${index+1}”,
数组:arrayState,
setter:changeArrayState,
索引:,
);
}),
);
}
void changeArrayState(整数索引)
{
对于(int i=0;i new_MyListItemState();
}
类_MyListItemState扩展了状态{
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回新行(
儿童:[
新文本(${widget.title}${widget.arrayState[widget.index]?“true”:“false”}),
新升起的按钮(
已按下:(){
设置状态(){
widget.changeArrayState(widget.index);
//按您喜欢的方式更改边界
});
},
子项:新文本(“选择”),
)
],
);
}
}
谢谢你的帮助,你能帮我写代码吗?我想不出来