每次在 Flutter 中加载页面时显示新的共享首选项值?

Display new shared preferences value every time page is loaded in Flutter?

我有一款手机游戏,它会在游戏结束后保存最​​高分数,并在主页上显示最高分数。因为我在主页 initState() 函数中加载共享首选项数据,除非用户关闭并重新打开应用程序,否则主页上的最高分数不会改变。有什么解决办法吗?

这是 play_game.dart 文件,当用户完成游戏时,我将结果保存到共享首选项中:

  Future saveResults() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    int maxSoz = int.parse(preferences.getString('max_soz'));
    int maxPoint = int.parse(preferences.getString('max_xal'));
    if (speed > maxPoint && soz > maxSoz) {
      preferences.setString('max_xal', speed.toString());
      preferences.setString('max_soz', soz.toString());
    }
  }

这是我显示最高分数的 landing_page.dart。 我有加载共享首选项数据的功能:

  Future loadData() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      this.maxSoz = preferences.getString('max_soz') ?? '0';
      this.maxPoint = preferences.getString('max_xal') ?? '0';
    });
  }

为了加载数据,我在 initState() 中提到了该函数:

  @override
  void initState() {
    super.initState();
    loadData();
  }

initState() 在页面第一次初始化时加载数据(执行 loadData() 函数)。如果玩家在完成游戏后通过单击 "go back" 按钮从 play_game 页面返回到着陆页,则新的最高分数不会显示在着陆页上,因为您可能猜到了,函数 loadData() 仅在页面初始化时执行(由 initState())。

您可以在 Navigator 前面加上 await,例如:

...
...

final exit = await Navigator.of(context).pushNamed("/pages/play_game");
if (exit == true) {
    loadData();
} 

...
...

Notes: I am assuming that your play_game.dart will return something, for example bool