颤动:在抽屉中选择Mark ListTile

问题描述 投票:0回答:1

我想将当前页面的ListTile标记为已选中,但是2天前我正在寻找一种通用方法。

我看到像this这样的例子,你在那里硬编码瓷砖ID并使用一个案例来知道哪个是当前的Tile。我的问题是,如果我夸大了100张ListTiles怎么办?如何以编程方式将selected属性更改为选定的Tile?或者更真实的情况:我有一个Drawer在每个版本中改变形状,因此保留带有硬编码ID的代码是没有用的。我希望你理解这个想法。

我已经尝试了几天不同的解决方案,但对我来说似乎没有一般。

dart flutter
1个回答
0
投票

我认为只需简单就可以创建一个包含所选数据和bool的新类

    class Post {
      final bool selected;
      var data;

      Post({
        this.selected,
        this.data
      });
    }

现在当你在itemBuilder中使用LIstView.builder时,如果list [index] .selected为true,那么将颜色设置为蓝色,如果没有则将其设置为白色或任何在点击或压缩的任何内容,无论你使用什么,保存最后点击的索引一个全局变量(称为savedIndex) - 用(-1)初始化它 - 并在此列表索引中将selected更改为true,然后如果savedIndex不等于-1,则更改列表[savedIndex] .selected = false。


全局变量

int selectedIndex =-1;

和itemBuilder。

itemBuilder: (BuildContext _context, int i) {


        return GestureDetector(

                child:
                Container(
                  decoration: new BoxDecoration(
                    borderRadius: new BorderRadius.circular(16.0),
                    color:_list[index].selected? Colors.blue:colors.white,
                  ),
                  child: _buildRow(_list[index]),) ,
                onTap: () {
                   setState(){
                        if(savedIndex!=-1){
                         list[savedIndex].selected=false
                         }
                       _list[index].selected=true;
                       savedIndex=index;
                    }
                 }
              );

      }
© www.soinside.com 2019 - 2024. All rights reserved.