【发布时间】:2021-04-21 10:30:19
【问题描述】:
我创建了List<String> favId = []; 变量来使用 SharedPreferences 存储项目的 ID,因此我重新启动应用程序后收藏的项目 ID 并没有丢失。这是我的 SharedPreferences 方法和最喜欢的 IconButton in detailDoaPage.dart :
...
static List<String> favId = [];
getData() async {
SharedPreferences pref = await SharedPreferences.getInstance();
setState(() {
favId = pref.getStringList("id") ?? [];
});
}
void initState() {
super.initState();
getIds();
}
getIds() async {
favId = getData();
}
void saveData() async {
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setStringList("id", favId);
}
...
IconButton(
icon: Icon(
favId.contains(doa.id.toString())
? Icons.favorite
: Icons.favorite_border,
color: favId.contains(doa.id.toString())
? Colors.red
: Colors.grey,
),
onPressed: () => setState(() {
doa.fav = !doa.fav;
if (favId.contains(doa.id.toString())) {
favId.removeWhere(
(element) => element == doa.id.toString());
} else {
favId.add(doa.id.toString());
}
saveData();
favId.sort();
}),
)
除此之外,我还想在 favPage.dart(另一个页面)中使用 ListView.builder 显示收藏的项目。当然,我想从 detailDoaPage.dart 中获取 favId。如何在这 2 个页面上实现提供程序/riverpod?
这是我的应用程序的预览:
谢谢你:)
【问题讨论】:
-
我可以尝试为您指明正确的方向。您想要做的与riverpod 文档中的todos example 非常相似。您可以像对待
bool completed一样对待您的bool isFavoriteDoa。只需查看两个代码文件,然后尝试在您的应用中实现相同的解决方案。 -
@ambiguous58 哇,非常感谢您的建议。是的,我会为此学习:)
标签: flutter dart provider riverpod