dart - Flutter:将 ListTile 标记为在抽屉中被选中

标签 dart flutter

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

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

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

最佳答案

像下面这样简单地创建枚举类。

enum DrawerSelection { home, favorites, settings}

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

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

然后在 ListTile 中使用 selected 属性并像下面的代码一样更改枚举 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");
              });
            },
          ),

关于dart - Flutter:将 ListTile 标记为在抽屉中被选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55669491/

相关文章:

regex - 内联打印列表的元素

Flutter 在后台通过 API 发送本地通知

flutter - BLoC 和多个流 - 有更好的解决方案吗?

flutter - 如何修复 "Failed assertion: line 227 pos 12: ' _allAds[id] !=null' : is not true. "?

dart - 启用或禁用按钮时动画颜色变化

flutter - 有没有办法在flutter中写入预先存在的文本文件?

java - Flutter/Dart 找不到 java 和 $JAVA_HOME

dart - 是什么导致 Polymer.dart 在 Safari 和 Chrome 中行为不当?

android - Flutter 中的 SharedPreferences 错误

android - 如何将 'Google Consent ' 添加到 flutter 应用程序