Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 每次页面加载到Flatter时显示新的共享首选项值?_Flutter_Dart_Sharedpreferences - Fatal编程技术网

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

Flutter 每次页面加载到Flatter时显示新的共享首选项值?,flutter,dart,sharedpreferences,Flutter,Dart,Sharedpreferences,我有一个手机游戏,它在游戏结束后保存最大分数值,并在主页上显示最大分数。因为我在主页initState()函数中加载共享首选项数据,除非用户关闭并重新打开应用程序,否则主页上的最大分数不会改变。有什么解决办法吗 这是play_game.dart文件,当用户完成游戏时,我在其中将结果保存到SharedReferences: Future saveResults() async { SharedPreferences preferences = await SharedPreferenc

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

这是play_game.dart文件,当用户完成游戏时,我在其中将结果保存到SharedReferences:

  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());
    }
  }
这是登录页,我在这里显示最大分数。 我有一个加载SharedReferences数据的函数:

  Future loadData() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      this.maxSoz = preferences.getString('max_soz') ?? '0';
      this.maxPoint = preferences.getString('max_xal') ?? '0';
    });
  }
为了加载数据,我在initState()中提到了该函数:


initState()
在第一次初始化页面时加载数据(执行
loadData()
函数)。如果玩家在完成游戏后,通过单击“返回”按钮从play_game page返回到登录页,则新的最大分数不会显示在登录页上,因为正如您所猜测的,函数
loadData()
仅在页面初始化时执行(通过
initState()
).

您可以在
导航器
前面添加
等待
,例如:

...
...

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

...
...
注意:我假设您的
玩游戏。dart
会返回一些东西,例如
bool


如果你写了一些代码,那么我们就很容易知道你面临的问题是什么。看看集团模式如何在UI和模型之间传播状态同意@sagar…发布你的代码。“集团可能在用蒸汽压路机碾碎花生,”伊姆霍试图澄清我的问题。希望你们能理解alluse FutureBuilder,这样的问题每秒钟都会被讨论上百万次。我发现使用FutureBuilder将是唯一的解决方案,但若游戏中并没有太多页面,你们的方法也很有用。谢谢你的时间!
...
...

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

...
...