我想将当前页面的 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/