Flutter:在抽屉中选择标记ListTile

时间:2019-04-13 20:18:25

标签: dart flutter

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

我看到了类似this的示例,在其中您可以对图块ID进行硬编码,并使用一种情况来知道哪个是当前的Tile。我的问题是,如果要夸大100 ListTile,该怎么办?如何以编程方式将selected属性更改为所选的Tile?或更实际的情况是:我有一个Drawer,它在每个发行版中都会改变形状,因此保留带有硬编码ID的代码没有用。希望您能理解这个主意。

几天来,我一直在尝试不同的解决方案,但对我来说似乎还不够普遍。

由www.DeepL.com/Translator

翻译

2 个答案:

答案 0 :(得分:0)

我认为这很简单,您可以创建一个新类,并选择数据和布尔值

    class Post {
      final bool selected;
      var data;

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

现在,当list [index] .selected为true时,在itemBuilder中使用LIstView.builder时,将颜色设置为蓝色(如果未设置),然后将其设置为白色,或者在您点击或按下时使用的内容,保存最后一个单击全局变量(称为savedIndex)中的索引-使用(-1)初始化它-并在此列表索引处将其更改为true,然后如果saveIndex不等于-1则更改list [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;
                    }
                 }
              );

      }

答案 1 :(得分:0)

简单创建枚举类,如下所示。

enum DrawerSelection { home, favorites, settings}

创建枚举对象并根据需要传递预定义的值,在我的情况下,我将其作为选定的ListTile项传递回家。像下面的代码。

class _MyHomePage extends State<MyHomePage> {
DrawerSelection _drawerSelection = DrawerSelection.home;

然后在ListTile中使用选定的属性并像下面的代码一样更改enum onTap()。

 ListTile(
              selected: _drawerSelection == DrawerSelection.home,
              title: Text('Home'),
              leading: Icon(Icons.home),
              onTap: () {
                _drawerSelection = DrawerSelection.home;
                Navigator.pop(context);
                _currentWidget = MainWidget();
                setState(() {
                  _appBarTitle = Text("Home");
                });
              },
            ),
 ListTile(
            selected: _drawerSelection == DrawerSelection.favorites,
            title: Text('Favorites'),
            leading: Icon(Icons.favorite),
            onTap: () {
              _drawerSelection = DrawerSelection.favorites;
              Navigator.pop(context);
              _currentWidget = FavoritesWidget();
              setState(() {
                _appBarTitle = Text("Favorites");
              });
            },
          ),
ListTile(
            selected: _drawerSelection == DrawerSelection.settings,
            title: Text('Settings'),
            leading: Icon(Icons.settings),
            onTap: () {
              _drawerSelection = DrawerSelection.settings;
              Navigator.pop(context);
              _currentWidget = SettingsWidget();
              setState(() {
                _appBarTitle = Text("Settings");
              });
            },
          ),
相关问题