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!
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.
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));
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.