Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振单选按钮自定义以选择单个项目_Dart_Flutter - Fatal编程技术网

Dart 颤振单选按钮自定义以选择单个项目

Dart 颤振单选按钮自定义以选择单个项目,dart,flutter,Dart,Flutter,代码段用于维护每个ListView项的状态。 这个代码是为复选框风格,我在寻找单一的选择时间。我只想选择一项。正在寻找解决方案 需要单选按钮的逻辑。例如,有一个圆形的水平列表,当用户单击单个圆形时,应该会得到一个边框。当用户单击“其他圆”时,所有其他圆边框都应删除边框 void main() { runApp(new MaterialApp( home: new ListItemDemo(), )); } class ListItemDemo extends Stateless

代码段用于维护每个ListView项的状态。 这个代码是为复选框风格,我在寻找单一的选择时间。我只想选择一项。正在寻找解决方案

需要单选按钮的逻辑。例如,有一个圆形的水平列表,当用户单击单个圆形时,应该会得到一个边框。当用户单击“其他圆”时,所有其他圆边框都应删除边框

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);
//按您喜欢的方式更改边界
});
},
子项:新文本(“选择”),
)
],
);
}
}

谢谢你的帮助,你能帮我写代码吗?我想不出来