dart 共享首选项始终返回真- Flutter

kd3sttzy  于 2023-03-21  发布在  Flutter
关注(0)|答案(1)|浏览(155)

我有一个名为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。

5lwkijsr

5lwkijsr1#

问题可能出在用于存储和检索共享首选项中的布尔值的键上。在listItem小部件中,您使用以下键来保存布尔值:

await prefs.setBool("Person['Joined']", Person['Joined']);

此键包含字符串"Person['Joined']",它不是您要使用的键。您应该使用以下键:

await prefs.setBool("${Person['id']}_joined", Person['Joined']);

此键包含人员的ID,后跟"_joined",这将是每个人员的唯一键。然后,您可以使用getPrefs函数中的相同键来检索此布尔值:

joined = prefs.getBool("${Person['id']}_joined") ?? false;

在保存和检索共享首选项中的布尔值时,请确保为每个人使用正确的密钥。

相关问题