Comment Définir/mettre à Jour État de StatefulWidget d'autres StatefulWidget dans Flutter?
- Par Exemple, dans le code ci-dessous ainsi que le bouton de travaux et de pouvoir mettre à jour
le texte, mais le bouton moins de ne pas. - Mais si nous appuyer sur FloatingActionButton alors que l'État est actualisé .
- Le bouton moins est en train de changer la valeur de la variable mais pas
la mise à jour de l'état de parent widget .
voici le code .....
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
int number;
EdgeInsets globalMargin = const EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0);
TextStyle textStyle = const TextStyle(
fontSize: 100.0,
color: Colors.black,
);
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
number = number ?? 0;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Column(
children: <Widget>[
new Text(
number.toString(),
style: textStyle,
),
new GridView.count(
crossAxisCount: 2,
shrinkWrap: true,
scrollDirection: Axis.vertical,
children: <Widget>[
new InkResponse(
child: new Container(
margin: globalMargin,
color: Colors.green,
child: new Center(
child: new Text(
"+",
style: textStyle,
),
)),
onTap: () {
setState(() {
number = number + 1;
});
},
),
new Sub(),
],
),
],
),
floatingActionButton: new FloatingActionButton(
onPressed: () {
setState(() {});
},
child: new Icon(Icons.update),
),
);
}
}
class Sub extends StatefulWidget {
@override
_SubState createState() => new _SubState();
}
class _SubState extends State<Sub> {
@override
Widget build(BuildContext context) {
return new InkResponse(
child: new Container(
margin: globalMargin,
color: Colors.red,
child: new Center(
child: new Text(
"-",
style: textStyle,
),
)),
onTap: () {
setState(() {
number = number - 1;
});
},
);
}
}
- J'aime vraiment scoped_model pour l'application de contrôle des données à l'échelle.
- Merci je vais vérifier @Rene
- jetez un oeil à ce post stackoverflow.com/questions/49491860/...
Vous devez vous connecter pour publier un commentaire.
VIEUX: Créer une instance globale de _MyHomePageState. L'utilisation de cette instance dans _SubState comme _myHomePageState.setState
NOUVEAU: Pas besoin de créer d'instance globale. Au lieu de cela il suffit de passer l'instance parent à l'enfant widget
CODE MIS À JOUR QUE PAR LE FLOTTEMENT DE 0.8.2:
Laissez-moi savoir si cela fonctionne.
context.ancestorStateOfType
_state
classe de la société mère._
) et rendre la vie facile.1.Sur Enfant Widget : ajouter un paramètre de la Fonction paramètre
2.Sur Widget Parent : créer une Fonction pour l'enfant de rappel
3.Sur Widget Parent : passer fonctionparente à l'Enfant Widget
4.Sur Enfant Widget : appel de la Fonction Parent