每次在 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
我有一款手机游戏,它会在游戏结束后保存最高分数,并在主页上显示最高分数。因为我在主页 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 examplebool