Flutter:将 ListTile 标记为在抽屉中选择

2023-12-04

我想标记ListTile所选的当前页面的内容,但两天前我正在寻找一种通用的方法来做到这一点。

我看到这样的例子this一种对图块 ID 进行硬编码并使用大小写来了解哪个是当前的图块 ID 的方法Tile。我的问题是,如果夸张地说,我有 100 个呢?ListTile是?我该如何更改selected以编程方式归因于选定的Tile?或者一个更真实的案例:我有一个Drawer在每个版本中都会改变形状,因此使用硬编码 ID 保留代码是没有用的。我希望你能理解这个想法。

几天来我一直在尝试不同的解决方案,但对我来说,没有一个解决方案足够通用。


简单创建enum像下面这样的类。

enum DrawerSelection { home, favorites, settings}

创建枚举对象并根据需要传递预定义值,在我的例子中,我将 home 作为选定的 ListTile 项目传递。就像下面的代码一样。

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

然后在 ListTile 中使用选定的属性并更改枚举 onTap(),如下面的代码所示。

 ListTile(
              selected: _drawerSelection == DrawerSelection.home,
              title: Text('Home'),
              leading: Icon(Icons.home),
              onTap: () {
                Navigator.pop(context);
                setState(() {
                    _drawerSelection = DrawerSelection.home;
                    _currentWidget = MainWidget();                    
                    _appBarTitle = Text("Home");
                });
              },
            ),
 ListTile(
            selected: _drawerSelection == DrawerSelection.favorites,
            title: Text('Favorites'),
            leading: Icon(Icons.favorite),
            onTap: () {
              Navigator.pop(context);                 
              setState(() {
                  _drawerSelection = DrawerSelection.favorites;                 
                  _currentWidget = FavoritesWidget();                  
                  _appBarTitle = Text("Favorites");
              });
            },
          ),
ListTile(
            selected: _drawerSelection == DrawerSelection.settings,
            title: Text('Settings'),
            leading: Icon(Icons.settings),
            onTap: () {
              Navigator.pop(context);
              setState(() {
                  _drawerSelection = DrawerSelection.settings;                 
                  _currentWidget = SettingsWidget();
                  _appBarTitle = Text("Settings");
              });
            },
          ),
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:将 ListTile 标记为在抽屉中选择 的相关文章

随机推荐