appel de la méthode dans une dynamique widget à partir d'un autre stateful widget - Flutter
J'ai un flottement projet que je suis en train de travailler sur je ne peux pas mettre l'ensemble du code en cause ses plus de 500 lignes de code, donc je vais essayer de poser ma question aussi simplement que je l'acn à l'aide de l'imp. la section du code .
je vais avoir avec un état de widget et ayant certaines fonctions à l'intérieur de cette dynamique widget en vertu de la classe qui étend la classe s'étend State<MusicPlayer>
fichier lib\main.dart
il suffit de prendre une fonction simple comme
class MyAppState extends State<MyApp>{
...
void printSample (){
print("Sample text");
}
...
cette fonction est à l'intérieur de la dynamique widget à l'intérieur de la classe principale .
il y a un autre fichier lib\MyApplication.dart
ce fichier dispose également d'un stateful widget puis-je faire quelque chose pour que je puisse appeler la fonction printSample()
ici ..
class MyApplicationState extends State<MyApplication>{
...
@override
Widget build(BuildContext context) {
return new FlatButton(
child: new Text("Print Sample Text"),
onPressed :(){
//i want to cal the function here how is it possible to call the
//function
//printSample() from here??
}
);
}
...
}
- Double Possible de Déclencher une fonction à partir d'un widget à un État d'objet
- Si vous pouvez vous assurer un widget est un descendant de l'autre, vous pouvez utiliser InheritedWidget
- Utilisez simplement
context.ancestorStateOfType
dans cette situation - J'ai Juste besoin d'un peu plus d'aide ici, je suis en train d'envoyer des données à partir d'un enfant widget à un parent du widget et tous les exemples de flux et écoutable faire le contraire et c'est ce qu'exactement mon problème . Je veux appeler une fonction à partir de dire à un enfant widget à un parent du widget désolé de ne pas mentionner que ci-dessus ..
- Passer l'ensemble de la
StreamController
de votre enfant au lieu de simplementStream
si votre enfant doit présenter des événements trop.
Vous devez vous connecter pour publier un commentaire.
Pour appeler une fonction d'un parent, vous pouvez utiliser la fonction de rappel du motif. Dans cet exemple, une fonction (
onColorSelected
) est transmis à l'enfant. L'enfant appelle la fonction lorsqu'un bouton est pressé:Interne Flottement de widgets comme des boutons ou des champs de formulaire à utiliser exactement le même modèle. Si vous ne voulez appeler une fonction sans arguments, vous pouvez utiliser le
VoidCallback
type, au lieu de définir votre propre type de rappel.Si vous souhaitez informer un plus haut parent, vous pouvez simplement répéter ce motif sur chaque niveau de la hiérarchie:
L'appel d'une méthode d'enfant widget à partir d'un widget parent est déconseillé en Flottement. Au lieu de cela, Flutter vous encourage à passer à l'état d'un enfant que les paramètres du constructeur. Au lieu d'appeler une méthode de l'enfant, il vous suffit d'appeler
setState
dans le parent du widget pour mettre à jour ses enfants.Une approche alternative sont les
controller
classes dans Flutter (ScrollController
,AnimationController
, ...). Ce sont également transmise aux enfants que les paramètres du constructeur, et ils contiennent des méthodes de contrôle de l'état de l'enfant sans appelsetState
sur le parent. Exemple:Les enfants sont alors invités à écouter ces modifications pour mettre à jour leur état interne. Bien sûr, vous pouvez également mettre en place votre propre contrôleur de classe. Si vous avez besoin, je vous recommande de regarder le code source de Flottement de comprendre comment cela fonctionne.
Contrats à terme et les flux sont une autre alternative de passer de l'état, et pourrait également être utilisé pour appeler une fonction d'un enfant.
Mais je n'ai vraiment pas le recommander. Si vous avez besoin d'appeler une méthode d'un enfant widget, il est très semblable à celle de votre architecture de l'application est erronée. Essayez de déplacer l'état jusqu'à l'ancêtre commun!
si vous souhaitez appeler l'exemple d'() func, vous pouvez utiliser:
J'ai trouvé une autre solution, par essais et erreurs, mais cela a fonctionné.
Puis ajoutez cette ligne en vertu de la onPressed.
Vous pouvez donner à ceci un essai, il va appeler une méthode définie dans
Page2
(StatefulWidget
) à partir dePage1
(StatefulWidget
) widget.