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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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