当我保存一个共享的偏好设置bool然后创建一个新的bool时,新的bool也是true,为什么?我认为它给出了上次保存的bool,因为当我重新启动应用程序时,有时一切都是假的,然后当我将一个从假更改为真时,一切都是真的。我不明白为什么会发生这种情况。有什么想法吗?(额外信息:我正在使用的数据库名为Person,它有一个名为Joined的bool,这是我正在更改的bool,但这并不重要,因为共享首选项不知道任何关于数据库的信息)以下是代码:HomePage.dart:
Widget listItem({
required Map Person,
}) {
void savebool() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setBool("person_joined", Person['Joined']);
// print("${Person}_joined");
print("Person['Joined'] : ${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) {
// print("Before update: ${Person['Joined']}");
setState(() {
Person['Joined'] = true;
});
// print("After update: ${Person['Joined']}");
savebool();
}...}
Expanded(
child: FirebaseAnimatedList(
query: dbRef,
itemBuilder: (BuildContext context, DataSnapshot snapshot,
Animation<double> animation, int index) {
Map Person = snapshot.value as Map;
String? rideKey = snapshot.key;
Person['key'] = snapshot.key;
if (Person['Date'] ==
DateFormat("d-MM-yyyy").format(_selectedDate)) {
return listItem(Person: Person);
} else {
return Container();
}
},
),
)
Favourites.dart(如果你点击了Join
,我在这里添加Person
):
late bool joined;
//
@override
void initState() {
super.initState();
getBool();
}
void getBool() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
joined = prefs.getBool("person_joined") ?? false;
});
}
所以总结一下...一切都是假的(假设有3个person
被创建),然后我点击Join
上的一个,但然后所有三个都是真的,然后所有三个都在favourites page
中,尽管只有一个应该是真的。请帮助!
1条答案
按热度按时间tyg4sfes1#
共享首选项是整个应用程序的共享数据存储。如果您保存
person_joined = true
,则无论何时访问该值,它在整个应用程序中均相同。因此,如果创建了3个人,并且一个人_joined变为真,则无论您从何处访问它(即,人1、2或3),它都将为真。
要使此值
person
依赖,您应该将其与该人的唯一标识符一起保存。例如。<username>_joined = true
。这样,如果10个不同的人加入,则会有10个不同的标识符。