Bonjour

Je suis entrain d'apprendre le dart pour utiliser flutter (car le Java ....)
bref, pour le moment, je suis mitigé, ya des trucs bien, et d'autre moins bien, mais le sujet n'est pas la.

J'aimerai avoir votre avis sur 2 questions que je me pose.

Je commence par une appli simple pour calculer des pourcentages avec un slider.

1° Question concernant les stateful et stateless
J'ai plusieurs block avec du texte (donc stateless) et un champ texte variable (donc stateful)
Est ce que c'est mieux de faire un block stateless puis un block stateful 3 fois pour mes 3 blocks, ou je la fais bourrain, un gros block stateful avec tout mon code ?

2° Question concernant le split de Widget
Je me perd vite dans le widget qui imbrique plusieurs blocks, j'aimerai appeler une méthode (par exemple blockPromotion) ou seul le block Padding correspondant a la promotion (en vert dans le code)
Seul probleme, je n'arrive pas a utiliser les variables controller, et _lowerValue dans la méthode, J'ai essayé de créer une classe dédié, mais c'était encore pire.
Auriez vous un exemple d'un appel de morceau de widget avec l'utilisation de variables du widget principal ?

Merci pour vos éclaircissement.

Voici un exemple de mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double _valeur = 50.0;
  TextEditingController controller = new TextEditingController();

  double _lowerValue = 0.0;
  double _upperValue = 100.0;

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
            child: Row(
//          crossAxisAlignment: CrossAxisAlignment.stretch,
//          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
//          mainAxisSize: MainAxisSize.max,
              children: <Widget>[
                Expanded(
                  flex: 85,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    mainAxisSize: MainAxisSize.max,
                    children: [
                      Padding(
                        padding: const EdgeInsets.all(10.0),
                        child: Card(
                          elevation: 8.0,
                          child: Container(
                            color: Colors.red[200],
                            padding: const EdgeInsets.only(
                                left: 10.0,
                                top: 15.0,
                                right: 2.0,
                                bottom: 15.0),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: [
                                Text(
                                  'Augmentation:',
                                  style: TextStyle(fontSize: 20.0,),
                                ),
                                Card(
                                    elevation: 5.0,
                                    child: Container(
                                      margin: const EdgeInsets.all(5.0),
                                      child: Text(
                                        controller.text != '' ? (double.parse(
                                            controller.text) +
                                            (double.parse(controller.text) *
                                                _lowerValue / 100))
                                            .toStringAsFixed(2) : '++',
                                        style: TextStyle(fontSize: 20.0,),
                                      ),
                                    )
                                )
                              ],
                            ),
                          ),
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(10.0),
                        child: Card(
                          elevation: 10.0,
                          child: Container(
                            margin: const EdgeInsets.all(15.0),
//        height: 100.0,
                            child: Row(
                              //        crossAxisAlignment: CrossAxisAlignment.center,
                              children: [
                                Flexible(
                                    child: new TextFormField(
                                      keyboardType: TextInputType.number,
                                      controller: controller,
                                      decoration: InputDecoration(
                                        border: OutlineInputBorder(),
                                        labelText: "Valeur",
                                      ),
                                      maxLines: 1,
                                    )
                                )
                              ],
                            ),
                          ),
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(10.0),
                        child: Card(
                          elevation: 8.0,
                          child: Container(
                            color: Colors.green[300],
                            padding: const EdgeInsets.only(
                                left: 10.0,
                                top: 15.0,
                                right: 2.0,
                                bottom: 15.0),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: [
                                Text(
                                  'Promotion: ',
                                  style: TextStyle(fontSize: 20.0,),
                                ),
                                Card(
                                    elevation: 5.0,
                                    child: Container(
                                      margin: const EdgeInsets.all(10.0),
                                      child: Text(
                                        controller.text != '' ? (double.parse(controller.text) -
                                            (double.parse(controller.text) * _lowerValue / 100))
                                            .toStringAsFixed(2) : '--',
                                        style: TextStyle(fontSize: 20.0,),
                                      ),
                                    )
                                )
                              ],
                            ),
                          ),
                        ),
                      )
                    ],
                  ),
                ),
                Expanded(
                  flex: 15,
                  child: Container(
                    padding: const EdgeInsets.only(
                      top: 30.0,
                      bottom: 30.0,),
                    child: FlutterSlider(
                      values: [_valeur],
                      max: 100.0,
                      min: 0.0,
                      rtl: true,
                      axis: Axis.vertical,
                      onDragging: (handlerIndex, lowerValue, upperValue) {
                        _lowerValue = lowerValue;
                        _upperValue = upperValue;
                        setState(() {});
                      },
                    ),
                  ),
                ),
              ],
            )
        )
    );
  }
}
Edit: a mon avis, je suis pas sur le bon forum.
Vous pouvez me déplacer sur l'adéquate ?
Désolé, merci :o