Je développe une application sur flutter, sur l'écran principal j'ai un bouton qui ouvre un autre écran qui est à l'intérieur d'une méthode. Sur cet écran, je veux faire des calculs comme prendre l'entrée de l'utilisateur et mettre à jour le champ de texte, en cliquant sur le bouton la méthode calculateAmount est appelée qui met à jour la variable total qui se reflète sur le champ de texte mais le champ de texte ne se met pas à jour, il se met à jour seulement en appuyant sur la touche de fin sur le clavier... comment puis-je accomplir cette tâche. Voici mon code :
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
debugShowCheckedModeBanner: false,
home: new homePage()
));
}
class homePage extends StatefulWidget {
@override
homePageState createState() => new homePageState();
}
class homePageState extends State {
double metal = 0.0;
double total = 0.0;
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Titre de l'application",), backgroundColor: Colors.orange),
body: new Container(
child: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Expanded(child: new RaisedButton.icon(
color: Colors.orange,
icon: const Icon(
Icons.info, size: 25.0, color: Colors.white,),
label: new Text('Calculer', style: new TextStyle(
color: Colors.white
)),
onPressed: () {
calculateWindow();
),),
],
)
],
)
),
),
);
}
void calculateWindow(){
Navigator.of(context).push(
new MaterialPageRoute(
builder: (context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Calculateur'),
backgroundColor: Colors.orange,
),
body: new ListView(
children: [
new Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
new Container(
height: 50.0,
width: 360.0,
decoration: new BoxDecoration(
color: Colors.orange,
shape: BoxShape.rectangle,
),
child: new Center(
child: new Row(
children: [
new Expanded(
child: new Container(
child: new Text("Or & Argent en Lingots & Bijoux",
style: textStyle,
textAlign: textAlign
),
),
),
new Container(
height: 40.0,
width: 80.0,
decoration: new BoxDecoration(
color: Colors.white),
child: new TextField(
keyboardType: TextInputType.number,
onSubmitted : (String value) {
try {
metal = double.parse(value.toString());
print(total);
} catch (exception) {
metal = 0.0;
}
}
),
),
],
),
),
),
],
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Expanded(
child: new Container(
width: 50.0,
child: new RaisedButton.icon(
color: Colors.grey,
icon: const Icon(
Icons.check, size: 25.0, color: Colors.white,),
label: new Text('Calculer', style: new TextStyle(
color: Colors.white,
)),
onPressed: calculateAmount,
),
),
),
],
),
new Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
new Container(
height: 50.0,
width: 350.0,
decoration: new BoxDecoration(
color: Colors.blueGrey,
shape: BoxShape.rectangle,
),
child: new Center(
child: new Row(
children: [
new Expanded(
child: new Container(
child: new Text("Montant Total:",
style: new TextStyle(
color: Colors.white,),
textAlign: TextAlign.left,),
),
),
new Container(
child: new Text(
'$total',
textAlign: TextAlign.left,
overflow: TextOverflow.ellipsis,
style: textStyle,
textDirection: TextDirection.ltr,
)
),
],
),
),
),
],
),
],
),
);
},
),
);
}
void calculateAmount(){
setState((){
total = metal + 0.025;
});
}
}