我有一个名为Person
的数据库,在该数据库中,我有一个bool值,默认值为false。在我的应用程序中,我将此值更改为true,然后使用共享首选项在本地保存此更改。当bool为true时,它会将其添加到Favourites.dart
页面,如果它是Joined,则将颜色更改为绿色。非常简单,但getbool
始终返回true,即使我在数据库中创建新的Person
也是如此。因此,当我创建新的Person['Joined']
时,Person['Joined']
(人员(数据库)和联接(布尔值))为false,但getbool
为true主页:
Widget listItem({
required Map Person,
}) {
void savebool() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setBool("Person['Joined']", Person['Joined']);
print(Person['Joined']);
}
return Slidable(
startActionPane: ActionPane(
motion: const BehindMotion(),
extentRatio: 1 / 5,
children: [
SlidableAction(
backgroundColor: Colors.blue,
icon: Icons.add,
label: 'Join',
onPressed: (BuildContext context) {
setState(() {
Person['Joined'] = true;
});
savebool();
},
Favourites.dart(这是问题所在的页面):
late bool joined;
@override
void initState() {
super.initState();
getPrefs(); // call the function here
}
getPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
joined = prefs.getBool("Person['Joined']") ?? false;
print("getbool: $joined");
//PROBLEM IS HERE
//joined is always returning true even though Person['Joined'] is false
//Maybe it's the way im calling it?
});
}
joined
是共享首选项Person['Joined']
的值,但当我在将bool更改为true之前打印Person['Joined']时,它是false,但当我打印joined
时,它返回true,即使Person['Joined']
是false。
1条答案
按热度按时间5lwkijsr1#
问题可能出在用于存储和检索共享首选项中的布尔值的键上。在
listItem
小部件中,您使用以下键来保存布尔值:此键包含字符串
"Person['Joined']"
,它不是您要使用的键。您应该使用以下键:此键包含人员的ID,后跟
"_joined"
,这将是每个人员的唯一键。然后,您可以使用getPrefs
函数中的相同键来检索此布尔值:在保存和检索共享首选项中的布尔值时,请确保为每个人使用正确的密钥。