我想将当前页面的ListTile
标记为已选中,但是2天前我正在寻找一种通用的方法。
我看到了类似this的示例,在其中您可以对图块ID进行硬编码,并使用一种情况来知道哪个是当前的Tile
。我的问题是,如果要夸大100 ListTile
,该怎么办?如何以编程方式将selected
属性更改为所选的Tile
?或更实际的情况是:我有一个Drawer
,它在每个发行版中都会改变形状,因此保留带有硬编码ID的代码没有用。希望您能理解这个主意。
几天来,我一直在尝试不同的解决方案,但对我来说似乎还不够普遍。
由www.DeepL.com/Translator
翻译答案 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");
});
},
),