web-dev-qa-db-fra.com

Comment rafraîchir la page actuellement active en flutter

J'ai une fonction globale que j'appelle de presque tous les écrans de mon application. Je passe le contexte à cela. Je veux juste savoir s'il existe un moyen d'actualiser la page à partir de laquelle la fonction globale est appelée en fonction du contexte transmis à la fonction?

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;
}

  });
}

Ma fonction globale redirige les utilisateurs à la page d'accueil hors ligne en fonction de la disponibilité d'Internet lorsque l'application est reprise actuellement. Je veux que cela actualise l'écran actuellement actif.

Merci d'avance!

6
Shashank

Jetez un coup d'œil au fournisseur.

Vous vous informez essentiellement des changements d'état d'une partie de votre application à une autre puis demandez au widget cible redessinant.

En particulier, regardez ChangenotifierProvider

Le fournisseur est conçu pour le faire.

1
Brett Sutton

Une fois, j'ai utilisé cette solution de contournement pour un floatingactionbutton qui rechargée la page active;

Navigator.pushReplacement(
        context,
        MaterialPageRoute(
            builder: (BuildContext context) => super.widget));
0
Chris G.

Si vous utilisez une fonction d'appel pour initialiser cet écran, il vous suffit de vous rappeler. Cet exemple est vraiment utile pour les visiteurs à venir qui utilisent ce package: https://pub.dev/packages/stacked

Exemple:

Ceci est mon écran

class MyPropertyScreen extends StatefulWidget {
  @override
  _MyPropertyScreenState createState() => _MyPropertyScreenState();
}

class _MyPropertyScreenState extends State<MyPropertyScreen> {

  @override
  Widget build(BuildContext context) {
     return ViewModelBuilder<MyPropertyViewModel>.reactive(
          viewModelBuilder: () => MyPropertyViewModel(),
          onModelReady: (model) => model.initialized(), //Initalized Function
          builder: (context, model, child) =>
           Scaffold(
        body: ListUI(
    recallModel: model
        )
            ));
    }
}
    
    class ListUI extends StatelessWidget {
    MyPropertyViewModel recallModel;
    
    ListUI ({this.recallModel});
    
    
    pressReload(){
     recallModel.initialized(); //Recall the function again
    }
    }

Si vous utilisez InitState (), vous pouvez trouver votre solution à l'aide de cet exemple.

0
SilenceDev