如何在flutter中刷新当前活动页面

Sha*_*ank 14 dart flutter

我有一个全局函数,我可以从应用程序的几乎所有屏幕调用它。我正在向它传递上下文。我只想知道是否有办法根据传递给函数的上下文刷新调用全局函数的页面?

appResumedPausedLogic(context,[bool isVisitPage]){
  SystemChannels.lifecycle.setMessageHandler((msg)async{
if(msg=='AppLifecycleState.resumed' )
{
  print("------------------------------------ App Resumed-----------------------------");

  var serverConnected= await checkConnectionToServer();
  if(globals.globalCameraOpenedStatus==false)
    if(serverConnected!=1){

      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => OfflineHomePage()));

    }
    else{
      Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));
    }



}
if(msg=='AppLifecycleState.paused' ){
  if(globals.globalCameraOpenedStatus==false)
  locationThreadUpdatedLocation=false;
}

  });
}
Run Code Online (Sandbox Code Playgroud)

当应用程序当前恢复时,我的全局功能根据互联网的可用性将用户重定向到离线主页/主页。我希望它刷新当前活动的屏幕。

提前致谢!

Vit*_*avi 35

只是简单的使用

setState(() {});
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答!将来,考虑添加一些额外的细节,例如应该在用户代码中的何处添加以及为什么它可以解决问题。 (32认同)
  • 这不会重新启动应用程序。这只会重建小部件树。它不会调用其他组件,例如有状态小部件的 initState (2认同)

Sah*_*evs 10

尝试 (context as Element).reassemble();

reassemble 是用于热重载的函数

此外,我认为最好说出您的目标并查看其他解决方案来解决您的问题,因为我认为这种方法不可靠。

编辑:评论中有一些有用的提示。

  • 你读过“Element.reassemble”官方javadocs吗?*“此函数只会在开发期间调用。在发布版本中,ext.flutter.reassemble 钩子不可用,因此此代码永远不会执行。”* (3认同)

小智 8

我曾经将此解决方法用于重新加载活动页面的浮动操作按钮;

Navigator.pushReplacement(
        context,
        MaterialPageRoute(
            builder: (BuildContext context) => super.widget));
Run Code Online (Sandbox Code Playgroud)

  • 他的意思是“this”而不是“super.widget” (6认同)

小智 5

同样的问题困扰了我很长时间,但最后我想出了一个非常简单的答案

              Navigator.pop(context);  // pop current page
              Navigator.pushNamed(context, "Setting"); // push it back in
Run Code Online (Sandbox Code Playgroud)