尝试创建一些应用程序时,我遇到了将项目从一张表添加到收藏夹列表的问题。我有一个函数可以生成一个列表,其中包含来自HoursData日期的项目:
class HoursData {
String name;
String catergory;
IconData iconData;
String rt;
HoursData({this.name, this.catergory, this.iconData, this.rt});
}
List<HoursData> data = [
HoursData(name: 'Programming', catergory: 'Technology', iconData: Icons.computer, rt: '/programming'),
HoursData(name: 'Run', catergory: 'Sport', iconData: Icons.directions_run, rt: '/run'),
HoursData(name: 'Bike', catergory: 'Sport', iconData: Icons.directions_bike, rt: '/bike'),
];
以及生成此表的函数:
List<Widget> _buildList(BuildContext context) {
return data.map((HoursData f) => ListTile(
title: Text(f.name),
subtitle: Text('Category: ${f.catergory}'),
leading: Icon(f.iconData),
trailing: GestureDetector(
onTap: () {
print('Tapped');
},
child: Container(
child: Icon(
Icons.favorite_border,
),
),
),
onTap: () => Navigator.of(context).pushNamed(f.rt),
))
.toList();
}
标签声明类:
class _HoursListState extends State<HoursList> {
int _selectedIndex = 0;
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('365 Hours'),
backgroundColor: Colors.white,
),
body: _selectedIndex == 0
? Container(child: ListView(children: _buildList(context)))
: (_selectedIndex == 1
? Container(child: ListView(children: _pushFavorites(context)))
: Text('Settings')),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(icon: Icon(Icons.list), title: Text('List')),
BottomNavigationBarItem(
icon: Icon(Icons.favorite), title: Text('Favorite')),
BottomNavigationBarItem(
icon: Icon(Icons.settings), title: Text('Settings')),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.black,
onTap: _onItemTapped,
backgroundColor: Colors.white,
),
);
}
如何做到这一点,当你点击图标trailing
- 图标的状态发生了变化(涂有颜色)
- 所需项目已添加到收藏夹列表中,其中包含除图标本身之外的所有参数
trailing,或者使用从收藏夹列表中删除按钮。对一代感兴趣。收藏夹由底部栏中的选项卡表示。
“收藏夹”选项卡中的列表生成
List<Widget> _pushFavorites(BuildContext context) {
return favoriteData
.map((HoursData f) => ListTile(
title: Text(f.name),
subtitle: Text('Category: ${f.catergory}'),
leading: Icon(f.iconData),
onTap: () => Navigator.of(context).pushNamed(f.rt),
))
.toList();
}
如果它很简单,那么: