kamazoun

#3 in state_management.md

1 - [Gestion d'État](#gestion-d-etat) 1 - [Gestion d'État](#gestion-d-etat)
2 - [Gestionnaire d'état réactif](#gestionnaire-d-etat-reactif) 2 - [Gestionnaire d'état réactif](#gestionnaire-d-etat-reactif)
3 - - [Advantages](#advantages) 3 + - [Avantages](#avantages)
4 - [Maximum performance:](#maximum-performance) 4 - [Maximum performance:](#maximum-performance)
5 - [Declaring a reactive variable](#declaring-a-reactive-variable) 5 - [Declaring a reactive variable](#declaring-a-reactive-variable)
6 - - [Having a reactive state, is easy.](#having-a-reactive-state-is-easy) 6 + - [Having a reactive state, is easy.](#avoir-un-tat-ractif-cest-facile)
7 - [Using the values in the view](#using-the-values-in-the-view) 7 - [Using the values in the view](#using-the-values-in-the-view)
8 - [Conditions to rebuild](#conditions-to-rebuild) 8 - [Conditions to rebuild](#conditions-to-rebuild)
9 - [Where .obs can be used](#where-obs-can-be-used) 9 - [Where .obs can be used](#where-obs-can-be-used)
10 - [Note about Lists](#note-about-lists) 10 - [Note about Lists](#note-about-lists)
11 - - [Why i have to use .value](#why-i-have-to-use-value) 11 + - [Pourquoi je dois utiliser .value](#pourquoi-je-dois-utiliser-value)
12 - [Obx()](#obx) 12 - [Obx()](#obx)
13 - [Workers](#workers) 13 - [Workers](#workers)
14 - [Simple State Manager](#simple-state-manager) 14 - [Simple State Manager](#simple-state-manager)
@@ -32,7 +32,7 @@ GetX n'utilise pas Streams ou ChangeNotifier comme les autres gestionnaires d'é @@ -32,7 +32,7 @@ GetX n'utilise pas Streams ou ChangeNotifier comme les autres gestionnaires d'é
32 - _Cela ne dépend pas de 'context'_: Vous avez probablement déjà eu besoin d'envoyer le contexte de votre vue à un contrôleur, ce qui rend le couplage de la vue avec votre logique métier élevé. Vous avez probablement dû utiliser une dépendance dans un endroit qui n'a pas de contexte, et avez dû passer le contexte à travers différentes classes et fonctions. Cela n'existe tout simplement pas avec GetX. Vous avez accès à vos contrôleurs depuis vos contrôleurs sans aucun contexte. Vous n'avez pas besoin d'envoyer le contexte par paramètre pour rien. 32 - _Cela ne dépend pas de 'context'_: Vous avez probablement déjà eu besoin d'envoyer le contexte de votre vue à un contrôleur, ce qui rend le couplage de la vue avec votre logique métier élevé. Vous avez probablement dû utiliser une dépendance dans un endroit qui n'a pas de contexte, et avez dû passer le contexte à travers différentes classes et fonctions. Cela n'existe tout simplement pas avec GetX. Vous avez accès à vos contrôleurs depuis vos contrôleurs sans aucun contexte. Vous n'avez pas besoin d'envoyer le contexte par paramètre pour rien.
33 - _Contrôle granulaire_: la plupart des gestionnaires d'état sont basés sur ChangeNotifier. ChangeNotifier notifiera tous les widgets qui en dépendent lors de l'appel de notifyListeners. Si vous avez 40 widgets sur un écran, qui ont une variable de votre classe ChangeNotifier, lorsque vous en mettez un à jour, tous seront reconstruits. 33 - _Contrôle granulaire_: la plupart des gestionnaires d'état sont basés sur ChangeNotifier. ChangeNotifier notifiera tous les widgets qui en dépendent lors de l'appel de notifyListeners. Si vous avez 40 widgets sur un écran, qui ont une variable de votre classe ChangeNotifier, lorsque vous en mettez un à jour, tous seront reconstruits.
34 Avec GetX, même les widgets imbriqués sont respectés. Si Obx gère votre ListView et un autre gère une case à cocher dans ListView, lors de la modification de la valeur CheckBox, il ne sera mis à jour que, lors de la modification de la valeur List, seul le ListView sera mis à jour. 34 Avec GetX, même les widgets imbriqués sont respectés. Si Obx gère votre ListView et un autre gère une case à cocher dans ListView, lors de la modification de la valeur CheckBox, il ne sera mis à jour que, lors de la modification de la valeur List, seul le ListView sera mis à jour.
35 -- _Il ne reconstruit que si sa variable change VRAIMENT_: GetX a un contrôle de flux, cela signifie que si vous affichez un texte avec 'Paola', si vous changez à nouveau la variable observable en 'Paola', le widget ne sera pas reconstruit. C'est parce que GetX sait que «Paola» est déjà affiché dans Text et ne fera pas de reconstructions inutiles. 35 +- _Il ne reconstruit que si sa variable change VRAIMENT_: GetX a un contrôle de flux, cela signifie que si vous affichez un texte avec 'Paola', si vous changez à nouveau la variable observable en 'Paola', le widget ne sera pas reconstruit. C'est parce que GetX sait que `Paola` est déjà affiché dans Text et ne fera pas de reconstructions inutiles.
36 La plupart (sinon tous) les gestionnaires d'état actuels se reconstruiront à l'écran. 36 La plupart (sinon tous) les gestionnaires d'état actuels se reconstruiront à l'écran.
37 37
38 ## Gestionnaire d etat reactif 38 ## Gestionnaire d etat reactif
@@ -67,88 +67,89 @@ A partir de maintenant, nous pourrions désigner ces variables réactives - ". O @@ -67,88 +67,89 @@ A partir de maintenant, nous pourrions désigner ces variables réactives - ". O
67 67
68 Qu'est ce qui s'est passé derrière les rideaux? Nous avons créé un `Stream` de` String`s, assigné la valeur initiale `" Jonatas Borges "`, nous avons notifié tous les widgets qui utilisent `" Jonatas Borges "` qu'ils "appartiennent" maintenant à cette variable, et quand la valeur _Rx_ changements, ils devront également changer. 68 Qu'est ce qui s'est passé derrière les rideaux? Nous avons créé un `Stream` de` String`s, assigné la valeur initiale `" Jonatas Borges "`, nous avons notifié tous les widgets qui utilisent `" Jonatas Borges "` qu'ils "appartiennent" maintenant à cette variable, et quand la valeur _Rx_ changements, ils devront également changer.
69 69
70 -This is the **magic of GetX**, thanks to Dart's capabilities. 70 +C'est la **magie de GetX**, grâce aux performances de Dart.
71 71
72 -But, as we know, a `Widget` can only be changed if it is inside a function, because static classes do not have the power to "auto-change". 72 +Mais, comme nous le savons, un `Widget` ne peut être changé que s'il est à l'intérieur d'une fonction, car les classes statiques n'ont pas le pouvoir de" changer automatiquement ".
73 73
74 -You will need to create a `StreamBuilder`, subscribe to this variable to listen for changes, and create a "cascade" of nested `StreamBuilder` if you want to change several variables in the same scope, right? 74 +Vous devrez créer un `StreamBuilder`, vous abonner à cette variable pour écouter les changements et créer une" cascade "de` StreamBuilder` imbriqués si vous voulez changer plusieurs variables dans la même portée, non?
75 75
76 -No, you don't need a `StreamBuilder`, but you are right about static classes. 76 +Non, vous n'avez pas besoin d'un `StreamBuilder`, mais vous avez raison pour les classes statiques.
77 77
78 -Well, in the view, we usually have a lot of boilerplate when we want to change a specific Widget, that's the Flutter way.  
79 -With **GetX** you can also forget about this boilerplate code. 78 +Eh bien, dans la vue, nous avons généralement beaucoup de code standard lorsque nous voulons changer un widget spécifique, c'est la manière Flutter.
  79 +Avec **GetX**, vous pouvez également oublier ce code passe-partout.
80 80
81 -`StreamBuilder( … )`? `initialValue: …`? `builder: …`? Nope, you just need to place this variable inside an `Obx()` Widget. 81 +`StreamBuilder( … )`? `initialValue: …`? `builder: …`? Non, il vous suffit de placer cette variable dans un widget `Obx ()`.
82 82
83 ```dart 83 ```dart
84 Obx (() => Text (controller.name)); 84 Obx (() => Text (controller.name));
85 ``` 85 ```
86 86
87 -_What do you need to memorize?_ Only `Obx(() =>`. 87 +_Que devez-vous mémoriser?_ Seulement `Obx(() =>`.
88 88
89 -You are just passing that Widget through an arrow-function into an `Obx()` (the "Observer" of the _Rx_). 89 +Vous passez simplement ce Widget via une fonction dans un `Obx ()` (l' "Observateur" du _Rx_).
90 90
91 -`Obx` is pretty smart, and will only change if the value of `controller.name` changes. 91 +`Obx` est assez intelligent et ne changera que si la valeur de` controller.name` change.
92 92
93 -If `name` is `"John"`, and you change it to `"John"` (`name.value = "John"`), as it's the same `value` as before, nothing will change on the screen, and `Obx`, to save resources, will simply ignore the new value and not rebuild the Widget. **Isn't that amazing?** 93 +Si `name` est` "John" `, et que vous le changez en` "John" `(` name.value = "John" `), comme c'est la même` valeur` qu'avant, rien ne changera à l'écran, et `Obx`, pour économiser les ressources, ignorera simplement la nouvelle valeur et ne reconstruira pas le widget. **N'est-ce pas incroyable?**
94 94
95 -> So, what if I have 5 _Rx_ (observable) variables within an `Obx`? 95 +> Alors, que faire si j'ai 5 variables _Rx_ (observables) dans un `Obx`?
96 96
97 -It will just update when **any** of them changes. 97 +Il sera simplement mis à jour lorsque **l'un d'entre eux** change.
98 98
99 -> And if I have 30 variables in a class, when I update one, will it update **all** the variables that are in that class? 99 +> Et si j'ai 30 variables dans une classe, lorsque j'en mets une à jour, est-ce que cela va mettre à jour **toutes** les variables qui sont dans cette classe?
100 100
101 -Nope, just the **specific Widget** that uses that _Rx_ variable. 101 +Non, juste le **Widget spécifique** qui utilise cette variable _Rx_.
102 102
103 -So, **GetX** only updates the screen, when the _Rx_ variable changes it's value. 103 +Ainsi, **GetX** ne met à jour l'écran que lorsque la variable _Rx_ change sa valeur.
104 104
105 ``` 105 ```
106 final isOpen = false.obs; 106 final isOpen = false.obs;
107 107
108 -// NOTHING will happen... same value. 108 +// Rien de ne change... valeur identique.
109 void onButtonTap() => isOpen.value=false; 109 void onButtonTap() => isOpen.value=false;
110 ``` 110 ```
111 -### Advantages 111 +### Avantages
  112 +
  113 +**GetX ()** vous aide lorsque vous avez besoin d'un contrôle **granulaire** sur ce qui est mis à jour.
112 114
113 -**GetX()** helps you when you need **granular** control over what's being updated.  
114 115
115 -If you do not need `unique IDs`, because all your variables will be modified when you perform an action, then use `GetBuilder`,  
116 -because it's a Simple State Updater (in blocks, like `setState()`), made in just a few lines of code.  
117 -It was made simple, to have the least CPU impact, and just to fulfill a single purpose (a _State_ rebuild) and spend the minimum resources possible. 116 +Si vous n'avez pas besoin d'ID uniques, car toutes vos variables seront modifiées lorsque vous effectuez une action, utilisez `GetBuilder`,
  117 +parce que c'est un Simple State Updater (en blocs, comme `setState ()`), fait en seulement quelques lignes de code.
  118 +Il a été rendu simple, pour avoir le moins d'impact sur le processeur, et juste pour remplir un seul objectif (une reconstruction de _l'état_) et dépenser le minimum de ressources possible.
118 119
119 -If you need a **powerful** State Manager, you can't go wrong with **GetX**. 120 +Si vous avez besoin d'un State Manager **puissant** , vous ne pouvez pas vous tromper avec **GetX**.
120 121
121 -It doesn't work with variables, but __flows__, everything in it are `Streams` under the hood.  
122 -You can use _rxDart_ in conjunction with it, because everything are `Streams`,  
123 -you can listen the `event` of each "_Rx_ variable",  
124 -because everything in it are `Streams`. 122 +Cela ne fonctionne pas avec les variables, mais __flows__, tout ce qu'il contient sont des `Streams` en réalité.
  123 +Vous pouvez utiliser _rxDart_ en conjonction avec lui, car tout est `Streams`.
  124 +Vous pouvez écouter les changements de chaque "variable _Rx_",
  125 +parce que tout ce qui se trouve dedans est un `Streams`.
125 126
126 -It is literally a _BLoC_ approach, easier than _MobX_, and without code generators or decorations.  
127 -You can turn **anything** into an _"Observable"_ with just a `.obs`.  
128 127
129 -### Maximum performance: 128 +C'est littéralement une approche _BLoC_, plus facile que _MobX_, et sans générateurs de code ni décorations.
  129 +Vous pouvez transformer **n'importe quoi** en un _"Observable"_ avec juste un `.obs`.
130 130
131 -In addition to having a smart algorithm for minimal rebuilds, **GetX** uses comparators  
132 -to make sure the State has changed. 131 +### Performance maximale:
133 132
134 -If you experience any errors in your app, and send a duplicate change of State,  
135 -**GetX** will ensure it will not crash. 133 +En plus d'avoir un algorithme intelligent pour des reconstructions minimales, **GetX** utilise des comparateurs
  134 +pour s'assurer que l'État a changé.
136 135
137 -With **GetX** the State only changes if the `value` change.  
138 -That's the main difference between **GetX**, and using _`computed` from MobX_.  
139 -When joining two __observables__, and one changes; the listener of that _observable_ will change as well. 136 +Si vous rencontrez des erreurs dans votre application et envoyez un changement d'état en double,
  137 +**GetX** garantira qu'il ne plantera pas.
140 138
141 -With **GetX**, if you join two variables, `GetX()` (similar to `Observer()`) will only rebuild if it implies a real change of State. 139 +Avec **GetX**, l'état ne change que si la `valeur` change.
  140 +C'est la principale différence entre **GetX** et l'utilisation de _`computed` de MobX_.
  141 +Lors de la jonction de deux __observables__, si l'une change; le listener de cet _observable_ changera également.
142 142
143 -### Declaring a reactive variable 143 +Avec **GetX**, si vous joignez deux variables, `GetX ()` (similaire à `Observer ()`), ne se reconstruira que si cela implique un réel changement d'état.
144 144
145 -You have 3 ways to turn a variable into an "observable". 145 +### Déclaration d'une variable réactive
146 146
  147 +Vous avez 3 façons de transformer une variable en "observable".
147 148
148 -1 - The first is using **`Rx{Type}`**. 149 +1 - La première est d'utiliser **`Rx{Type}`**.
149 150
150 ```dart 151 ```dart
151 -// initial value is recommended, but not mandatory 152 +// la valeur initiale est recommandée, mais pas obligatoire
152 final name = RxString(''); 153 final name = RxString('');
153 final isLogged = RxBool(false); 154 final isLogged = RxBool(false);
154 final count = RxInt(0); 155 final count = RxInt(0);
@@ -157,22 +158,22 @@ final items = RxList<String>([]); @@ -157,22 +158,22 @@ final items = RxList<String>([]);
157 final myMap = RxMap<String, int>({}); 158 final myMap = RxMap<String, int>({});
158 ``` 159 ```
159 160
160 -2 - The second is to use **`Rx`** and use Darts Generics, `Rx<Type>` 161 +2 - La seconde consiste à utiliser **`Rx`** et à utiliser les types `Rx<Type>` Génériques Darts
161 162
162 ```dart 163 ```dart
163 final name = Rx<String>(''); 164 final name = Rx<String>('');
164 final isLogged = Rx<Bool>(false); 165 final isLogged = Rx<Bool>(false);
165 final count = Rx<Int>(0); 166 final count = Rx<Int>(0);
166 final balance = Rx<Double>(0.0); 167 final balance = Rx<Double>(0.0);
167 -final number = Rx<Num>(0) 168 +final number = Rx<Num>(0);
168 final items = Rx<List<String>>([]); 169 final items = Rx<List<String>>([]);
169 final myMap = Rx<Map<String, int>>({}); 170 final myMap = Rx<Map<String, int>>({});
170 171
171 -// Custom classes - it can be any class, literally 172 +// Classes personnalisées - il peut s'agir de n'importe quelle classe, littéralement
172 final user = Rx<User>(); 173 final user = Rx<User>();
173 ``` 174 ```
174 175
175 -3 - The third, more practical, easier and preferred approach, just add **`.obs`** as a property of your `value`: 176 +3 - TLa troisième approche, plus pratique, plus facile et préférée, ajoutez simplement **`.obs`** comme propriété de votre` valeur`:
176 177
177 ```dart 178 ```dart
178 final name = ''.obs; 179 final name = ''.obs;
@@ -183,74 +184,73 @@ final number = 0.obs; @@ -183,74 +184,73 @@ final number = 0.obs;
183 final items = <String>[].obs; 184 final items = <String>[].obs;
184 final myMap = <String, int>{}.obs; 185 final myMap = <String, int>{}.obs;
185 186
186 -// Custom classes - it can be any class, literally 187 +// Classes personnalisées - il peut s'agir de n'importe quelle classe, littéralement
187 final user = User().obs; 188 final user = User().obs;
188 ``` 189 ```
189 190
190 -##### Having a reactive state, is easy.  
191 -  
192 -As we know, _Dart_ is now heading towards _null safety_.  
193 -To be prepared, from now on, you should always start your _Rx_ variables with an **initial value**. 191 +##### Avoir un état réactif, c'est facile.
194 192
195 -> Transforming a variable into an _observable_ + _initial value_ with **GetX** is the simplest, and most practical approach. 193 +Comme nous le savons, _Dart_ se dirige maintenant vers _null safety_.
  194 +Pour être prêt, à partir de maintenant, vous devez toujours commencer vos variables _Rx_ avec une **valeur initiale**.
196 195
197 -You will literally add a "`.obs`" to the end of your variable, and **that’s it**, you’ve made it observable,  
198 -and its `.value`, well, will be the _initial value_). 196 +> Transformer une variable en _observable_ + _valeurInitiale_ avec **GetX** est l'approche la plus simple et la plus pratique.
199 197
  198 +Vous allez littéralement ajouter un "".obs"" à la fin de votre variable, et **c'est tout**, vous l'avez rendue observable,
  199 +et sa `.value`, eh bien, sera la _valeurInitiale_.
200 200
201 -### Using the values in the view 201 +### Utilisation des valeurs de la vue
202 202
203 ```dart 203 ```dart
204 -// controller file 204 +// dans le controlleur
205 final count1 = 0.obs; 205 final count1 = 0.obs;
206 final count2 = 0.obs; 206 final count2 = 0.obs;
207 int get sum => count1.value + count2.value; 207 int get sum => count1.value + count2.value;
208 ``` 208 ```
209 209
210 ```dart 210 ```dart
211 -// view file 211 +// dans la vue
212 GetX<Controller>( 212 GetX<Controller>(
213 builder: (controller) { 213 builder: (controller) {
214 - print("count 1 rebuild"); 214 + print("count 1 reconstruction");
215 return Text('${controller.count1.value}'); 215 return Text('${controller.count1.value}');
216 }, 216 },
217 ), 217 ),
218 GetX<Controller>( 218 GetX<Controller>(
219 builder: (controller) { 219 builder: (controller) {
220 - print("count 2 rebuild"); 220 + print("count 2 reconstruction");
221 return Text('${controller.count2.value}'); 221 return Text('${controller.count2.value}');
222 }, 222 },
223 ), 223 ),
224 GetX<Controller>( 224 GetX<Controller>(
225 builder: (controller) { 225 builder: (controller) {
226 - print("count 3 rebuild"); 226 + print("count 3 reconstruction");
227 return Text('${controller.sum}'); 227 return Text('${controller.sum}');
228 }, 228 },
229 ), 229 ),
230 ``` 230 ```
231 231
232 -If we increment `count1.value++`, it will print:  
233 -- `count 1 rebuild`  
234 -- `count 3 rebuild` 232 +Si nous incrémentons `count1.value++`, cela affichera:
  233 +- `count 1 reconstruction`
  234 +- `count 3 reconstruction`
235 235
236 -because `count1` has a value of `1`, and `1 + 0 = 1`, changing the `sum` getter value. 236 +parce que `count1` a une valeur de `1`, et `1 + 0 = 1`, changeant la valeur du getter `sum`.
237 237
238 -If we change `count2.value++`, it will print:  
239 -- `count 2 rebuild`  
240 -- `count 3 rebuild` 238 +Si nous incrémentons `count2.value++`, cela affichera:
  239 +- `count 2 reconstruction`
  240 +- `count 3 reconstruction`
241 241
242 -because `count2.value` changed, and the result of the `sum` is now `2`. 242 +parce que `count2.value` a changé et que le résultat de `sum` est maintenant `2`.
243 243
244 -- NOTE: By default, the very first event will rebuild the widget, even if it is the same `value`.  
245 - This behavior exists due to Boolean variables. 244 +- NOTE: Par défaut, le tout premier événement reconstruira le widget, même s'il s'agit de la même `valeur`.
  245 + Ce comportement existe en raison de variables booléennes.
246 246
247 -Imagine you did this: 247 +Imaginez que vous fassiez ceci:
248 248
249 ```dart 249 ```dart
250 var isLogged = false.obs; 250 var isLogged = false.obs;
251 ``` 251 ```
252 252
253 -And then, you checked if a user is "logged in" to trigger an event in `ever`. 253 +Et puis, vous vérifiez si un utilisateur est "connecté" pour déclencher un événement dans `ever`.
254 254
255 ```dart 255 ```dart
256 @override 256 @override
@@ -268,26 +268,26 @@ fireRoute(logged) { @@ -268,26 +268,26 @@ fireRoute(logged) {
268 } 268 }
269 ``` 269 ```
270 270
271 -if `hasToken` was `false`, there would be no change to `isLogged`, so `ever()` would never be called.  
272 -To avoid this type of behavior, the first change to an _observable_ will always trigger an event,  
273 -even if it contains the same `.value`. 271 +si `hasToken` était `false`, il n'y aurait pas de changement à `isLogged`, donc` ever () `ne serait jamais appelé.
  272 +Pour éviter ce type de comportement, la première modification d'un _observable_ déclenchera toujours un événement,
  273 +même s'il contient la même `.value`.
274 274
275 -You can remove this behavior if you want, using: 275 +Vous pouvez supprimer ce comportement si vous le souhaitez, en utilisant:
276 `isLogged.firstRebuild = false;` 276 `isLogged.firstRebuild = false;`
277 277
278 -### Conditions to rebuild 278 +### Conditions pour reconstruire
279 279
280 -In addition, Get provides refined state control. You can condition an event (such as adding an object to a list), on a certain condition. 280 +En outre, Get fournit un contrôle d'état raffiné. Vous pouvez conditionner un événement (comme l'ajout d'un objet à une liste), à ​​une certaine condition.
281 281
282 ```dart 282 ```dart
283 -// First parameter: condition, must return true or false.  
284 -// Second parameter: the new value to apply if the condition is true. 283 +// Premier paramètre: condition, doit retourner vrai ou faux.
  284 +// Deuxième paramètre: la nouvelle valeur à appliquer si la condition est vraie.
285 list.addIf(item < limit, item); 285 list.addIf(item < limit, item);
286 ``` 286 ```
287 287
288 -Without decorations, without a code generator, without complications :smile: 288 +Sans décorations, sans générateur de code, sans complications :smile:
289 289
290 -Do you know Flutter's counter app? Your Controller class might look like this: 290 +Connaissez-vous l'application de counter de Flutter? Votre classe Controller pourrait ressembler à ceci:
291 291
292 ```dart 292 ```dart
293 class CountController extends GetxController { 293 class CountController extends GetxController {
@@ -295,19 +295,19 @@ class CountController extends GetxController { @@ -295,19 +295,19 @@ class CountController extends GetxController {
295 } 295 }
296 ``` 296 ```
297 297
298 -With a simple: 298 +Avec un simple:
299 299
300 ```dart 300 ```dart
301 controller.count.value++ 301 controller.count.value++
302 ``` 302 ```
303 303
304 -You could update the counter variable in your UI, regardless of where it is stored. 304 +Vous pouvez mettre à jour la variable de compteur dans votre interface utilisateur, quel que soit l'endroit où elle est stockée.
305 305
306 -### Where .obs can be used 306 +### Quand utiliser .obs
307 307
308 -You can transform anything on obs. Here are two ways of doing it: 308 +Vous pouvez tout transformer sur obs. Voici deux façons de procéder:
309 309
310 -* You can convert your class values to obs 310 +* Vous pouvez convertir vos valeurs de classe en obs
311 ```dart 311 ```dart
312 class RxUser { 312 class RxUser {
313 final name = "Camila".obs; 313 final name = "Camila".obs;
@@ -315,7 +315,7 @@ class RxUser { @@ -315,7 +315,7 @@ class RxUser {
315 } 315 }
316 ``` 316 ```
317 317
318 -* or you can convert the entire class to be an observable 318 +* ou vous pouvez convertir la classe entière en un observable:
319 ```dart 319 ```dart
320 class User { 320 class User {
321 User({String name, int age}); 321 User({String name, int age});
@@ -323,34 +323,34 @@ class User { @@ -323,34 +323,34 @@ class User {
323 var age; 323 var age;
324 } 324 }
325 325
326 -// when instantianting: 326 +// en instanciant:
327 final user = User(name: "Camila", age: 18).obs; 327 final user = User(name: "Camila", age: 18).obs;
328 ``` 328 ```
329 329
330 -### Note about Lists 330 +### Remarque sur List
331 331
332 -Lists are completely observable as are the objects within it. That way, if you add a value to a list, it will automatically rebuild the widgets that use it. 332 +Les listes sont complètement observables, tout comme les objets qu'elles contiennent. De cette façon, si vous ajoutez une valeur à une liste, cela reconstruira automatiquement les widgets qui l'utilisent.
333 333
334 -You also don't need to use ".value" with lists, the amazing dart api allowed us to remove that.  
335 -Unfortunaly primitive types like String and int cannot be extended, making the use of .value mandatory, but that won't be a problem if you work with gets and setters for these. 334 +Vous n'avez pas non plus besoin d'utiliser ".value" avec des listes, l'incroyable api de Dart nous a permis de supprimer cela.
  335 +Malheureusement, les types primitifs comme String et int ne peuvent pas être étendus, ce qui rend l'utilisation de .value obligatoire, mais ce ne sera pas un problème si vous travaillez avec des getters et des setters pour ceux-ci.
336 336
337 ```dart 337 ```dart
338 -// On the controller  
339 -final String title = 'User Info:'.obs 338 +// Dans le controlleur
  339 +final String title = 'User Info:'.obs;
340 final list = List<User>().obs; 340 final list = List<User>().obs;
341 341
342 -// on the view  
343 -Text(controller.title.value), // String need to have .value in front of it 342 +// Dans la vue
  343 +Text(controller.title.value), // La String doit avoir .value devant elle
344 ListView.builder ( 344 ListView.builder (
345 - itemCount: controller.list.length // lists don't need it 345 + itemCount: controller.list.length // pas besoin pour List
346 ) 346 )
347 ``` 347 ```
348 348
349 -When you are making your own classes observable, there is a different way to update them: 349 +Lorsque vous rendez vos propres classes observables, il existe une manière différente de les mettre à jour:
350 350
351 ```dart 351 ```dart
352 -// on the model file  
353 -// we are going to make the entire class observable instead of each attribute 352 +// sur le fichier modèle
  353 +// nous allons rendre la classe entière observable au lieu de chaque attribut
354 class User() { 354 class User() {
355 User({this.name = '', this.age = 0}); 355 User({this.name = '', this.age = 0});
356 String name; 356 String name;
@@ -358,27 +358,27 @@ class User() { @@ -358,27 +358,27 @@ class User() {
358 } 358 }
359 359
360 360
361 -// on the controller file 361 +// Dans le controlleur
362 final user = User().obs; 362 final user = User().obs;
363 -// when you need to update the user variable:  
364 -user.update( (user) { // this parameter is the class itself that you want to update 363 +// lorsque vous devez mettre à jour la variable utilisateur:
  364 +user.update( (user) { // ce paramètre est la classe même que vous souhaitez mettre à jour
365 user.name = 'Jonny'; 365 user.name = 'Jonny';
366 user.age = 18; 366 user.age = 18;
367 }); 367 });
368 -// an alternative way of update the user variable: 368 +// une autre manière de mettre à jour la variable user:
369 user(User(name: 'João', age: 35)); 369 user(User(name: 'João', age: 35));
370 370
371 -// on view: 371 +// Dans la vue:
372 Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}")) 372 Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}"))
373 -// you can also access the model values without the .value:  
374 -user().name; // notice that is the user variable, not the class (variable has lowercase u) 373 +// vous pouvez également accéder aux valeurs du modèle sans le .value:
  374 +user().name; //notez que c'est la variable utilisateur, pas la classe (la variable a un u minuscule)
375 ``` 375 ```
376 376
377 -You don't have to work with sets if you don't want to. you can use the "assign 'and" assignAll "api.  
378 -The "assign" api will clear your list, and add a single object that you want to start there.  
379 -The "assignAll" api will clear the existing list and add any iterable objects that you inject into it. 377 +Vous n'êtes pas obligé de travailler avec des setters si vous ne le souhaitez pas. vous pouvez utiliser les API «assign» et «assignAll».
  378 +L'API «assign» effacera votre liste et ajoutera un seul objet que vous souhaitez y démarrer.
  379 +L'API "assignAll" effacera la liste existante et ajoutera tous les objets itérables que vous y injecterez.
380 380
381 -### Why i have to use .value 381 +### Pourquoi je dois utiliser .value
382 382
383 We could remove the obligation to use 'value' to `String` and `int` with a simple decoration and code generator, but the purpose of this library is precisely avoid external dependencies. We want to offer an environment ready for programming, involving the essentials (management of routes, dependencies and states), in a simple, lightweight and performant way, without a need of an external package. 383 We could remove the obligation to use 'value' to `String` and `int` with a simple decoration and code generator, but the purpose of this library is precisely avoid external dependencies. We want to offer an environment ready for programming, involving the essentials (management of routes, dependencies and states), in a simple, lightweight and performant way, without a need of an external package.
384 384