flutter 如何在列表视图中进行分类选择时首先定位所选项目

xxe27gdn  于 2022-12-05  发布在  Flutter
关注(0)|答案(1)|浏览(256)

我正在创建一个演示,我已经使用列表视图构建器来显示所有可用的类别从一个列表,现在当我点击项目,它应该放在第一位...
我附上了一张图片,让它更清晰...
我尝试过滑动,但看起来不是一个适当的方式,因为它是影响原来的列表顺序;
这是我的编码

class _Stack17State extends State<Stack17> {
  @override
  List<String> names = ['Shoes','Trousers','Jeans','Jacket','Belt','Others'];
  int selectedindex = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Container(
            height: 50,
            color: Colors.white,
            child: ListView.builder(
                scrollDirection: Axis.horizontal,
                itemCount: names.length,
                itemBuilder: (context, index) {
                  return InkWell(
                    onTap: (){
                      setState(() {

// I applied this logic, but looks like not proper way as it is spoiling or original list's order;

                        selectedindex=index;
                        swap(selectedindex); 
                        selected index=0;




                      });
                    },
                    child: Padding(
                      padding: EdgeInsets.symmetric(horizontal: 4),
                      child: Container(
                        padding: EdgeInsets.symmetric(horizontal: 30,vertical: 10),
                        decoration: BoxDecoration(
                            color: selectedindex==index?Colors.blue:Colors.blue.shade100,
                            borderRadius: BorderRadius.circular(20)),
                        child: Center(child: Text(names[index])),
                      ),
                    ),
                  );
                }),
          ),
          SizedBox(height: 10,),
          Center(child: Text('Selected Category :  '+names[selectedindex]),)
        ],
      ),
    );
  }

void swapitems(int index)
  {
    String temp;
    temp=names[index];
    names[index]=names[0];
    names[0]=temp;
  }

}

f87krz0w

f87krz0w1#

试试这个:

onTap: () {
    var item = names[index];
    names.removeAt(index);
    names.insert(0, item);
    setState(() {});
},

names[0]=temp;只是用选定的项目替换第一个项目。您需要使用插入来移动列表并将选定的项目插入到第一个位置。

相关问题