kamazoun

#1 in dependency_management.md

@@ -837,7 +837,7 @@ name.value = 'Hey'; @@ -837,7 +837,7 @@ name.value = 'Hey';
837 // mais cette approche n'accepte pas `null`, l'interface utilisateur ne sera pas reconstruite. 837 // mais cette approche n'accepte pas `null`, l'interface utilisateur ne sera pas reconstruite.
838 name('Hello'); 838 name('Hello');
839 839
840 -// est comme un getter, affiche «Hello». 840 +// est comme un getter, affiche `Hello`.
841 name() ; 841 name() ;
842 842
843 /// nombres: 843 /// nombres:
@@ -967,7 +967,7 @@ En raison du _cache_, ne peut pas être un `const Stateless`. @@ -967,7 +967,7 @@ En raison du _cache_, ne peut pas être un `const Stateless`.
967 967
968 > Alors, quand avez-vous besoin de "mettre en cache" un contrôleur? 968 > Alors, quand avez-vous besoin de "mettre en cache" un contrôleur?
969 969
970 -Si vous utilisez, une autre fonctionnalité "pas si courante" de **GetX**: `Get.create ()`. 970 +Si vous utilisez, une autre fonctionnalité "pas si courante" de **GetX**: `Get.create()`.
971 971
972 `Get.create(()=>Controller())` générera un nouveau `Controller` chaque fois que vous appelez 972 `Get.create(()=>Controller())` générera un nouveau `Controller` chaque fois que vous appelez
973 `Get.find<Controller>()`. 973 `Get.find<Controller>()`.
@@ -1086,10 +1086,10 @@ GetMaterialApp( @@ -1086,10 +1086,10 @@ GetMaterialApp(
1086 1086
1087 2- Flutter est facile, Flutter est incroyable, mais Flutter a encore quelques règles standard qui peuvent être indésirables pour la plupart des développeurs, comme `Navigator.of (context) .push (context, builder [...]`. Get simplifie le développement. Au lieu de écrire 8 lignes de code pour simplement appeler une route, vous pouvez simplement le faire: `Get.to (Home ())` et vous avez terminé, vous passerez à la page suivante. Les URL Web dynamiques sont une chose vraiment pénible à voir avec Flutter actuellement, et cela avec GetX est stupidement simple. La gestion des états dans Flutter et la gestion des dépendances sont également quelque chose qui génère beaucoup de discussions, car il y a des centaines de modèles dans la pub. Mais rien n'est aussi simple que d'ajouter un ".obs" à la fin de votre variable, et placez votre widget dans un Obx, et c'est tout, toutes les mises à jour de cette variable seront automatiquement mises à jour à l'écran. 1087 2- Flutter est facile, Flutter est incroyable, mais Flutter a encore quelques règles standard qui peuvent être indésirables pour la plupart des développeurs, comme `Navigator.of (context) .push (context, builder [...]`. Get simplifie le développement. Au lieu de écrire 8 lignes de code pour simplement appeler une route, vous pouvez simplement le faire: `Get.to (Home ())` et vous avez terminé, vous passerez à la page suivante. Les URL Web dynamiques sont une chose vraiment pénible à voir avec Flutter actuellement, et cela avec GetX est stupidement simple. La gestion des états dans Flutter et la gestion des dépendances sont également quelque chose qui génère beaucoup de discussions, car il y a des centaines de modèles dans la pub. Mais rien n'est aussi simple que d'ajouter un ".obs" à la fin de votre variable, et placez votre widget dans un Obx, et c'est tout, toutes les mises à jour de cette variable seront automatiquement mises à jour à l'écran.
1088 1088
1089 -3- Facilité sans vous soucier des performances. Les performances de Flutter sont déjà étonnantes, mais imaginez que vous utilisez un gestionnaire d'état et un localisateur pour distribuer vos classes blocs / stores / contrôleurs / etc. Vous devrez appeler manuellement l'exclusion de cette dépendance lorsque vous n'en avez pas besoin. Mais avez-vous déjà pensé à simplement utiliser votre «contrôleur», et quand il n'était plus utilisé par personne, il serait simplement supprimé de la mémoire? C'est ce que fait GetX. Avec SmartManagement, tout ce qui n'est pas utilisé est supprimé de la mémoire et vous ne devriez pas avoir à vous soucier d'autre chose que de la programmation. Vous serez assuré de consommer le minimum de ressources nécessaires, sans même avoir créé de logique pour cela. 1089 +3- Facilité sans vous soucier des performances. Les performances de Flutter sont déjà étonnantes, mais imaginez que vous utilisez un gestionnaire d'état et un localisateur pour distribuer vos classes blocs / stores / contrôleurs / etc. Vous devrez appeler manuellement l'exclusion de cette dépendance lorsque vous n'en avez pas besoin. Mais avez-vous déjà pensé à simplement utiliser votre «contrôleur`, et quand il n'était plus utilisé par personne, il serait simplement supprimé de la mémoire? C'est ce que fait GetX. Avec SmartManagement, tout ce qui n'est pas utilisé est supprimé de la mémoire et vous ne devriez pas avoir à vous soucier d'autre chose que de la programmation. Vous serez assuré de consommer le minimum de ressources nécessaires, sans même avoir créé de logique pour cela.
1090 1090
1091 -4- Découplage réel. Vous avez peut-être entendu le concept "séparer la vue de la business logic". Ce n'est pas une particularité de BLoC, MVC, MVVM, et tout autre standard sur le marché a ce concept. Cependant, ce concept peut souvent être atténué dans Flutter en raison de l'utilisation de «context».  
1092 - Si vous avez besoin de contexte pour trouver un InheritedWidget, vous en avez besoin dans la vue, ou passez le «context» par paramètre. Je trouve particulièrement cette solution très moche, et pour travailler en équipe, nous serons toujours dépendants de la 'business logic' de View. Getx n'est pas orthodoxe avec l'approche standard, et même s'il n'interdit pas complètement l'utilisation de StatefulWidgets, InitState, etc., il a toujours une approche similaire qui peut être plus propre. Les contrôleurs ont des cycles de vie, et lorsque vous devez faire une requête APIREST par exemple, vous ne dépendez de rien de la vue. Vous pouvez utiliser onInit pour lancer l'appel http et lorsque les données arrivent, les variables sont remplies. Comme GetX est totalement réactif (vraiment, et fonctionne sous streams), une fois les éléments remplis, tous les widgets qui utilisent cette variable seront automatiquement mis à jour dans la vue. 1091 +4- Découplage réel. Vous avez peut-être entendu le concept "séparer la vue de la business logic". Ce n'est pas une particularité de BLoC, MVC, MVVM, et tout autre standard sur le marché a ce concept. Cependant, ce concept peut souvent être atténué dans Flutter en raison de l'utilisation de `context`.
  1092 + Si vous avez besoin de contexte pour trouver un InheritedWidget, vous en avez besoin dans la vue, ou passez le `context` par paramètre. Je trouve particulièrement cette solution très moche, et pour travailler en équipe, nous serons toujours dépendants de la 'business logic' de View. Getx n'est pas orthodoxe avec l'approche standard, et même s'il n'interdit pas complètement l'utilisation de StatefulWidgets, InitState, etc., il a toujours une approche similaire qui peut être plus propre. Les contrôleurs ont des cycles de vie, et lorsque vous devez faire une requête APIREST par exemple, vous ne dépendez de rien de la vue. Vous pouvez utiliser onInit pour lancer l'appel http et lorsque les données arrivent, les variables sont remplies. Comme GetX est totalement réactif (vraiment, et fonctionne sous streams), une fois les éléments remplis, tous les widgets qui utilisent cette variable seront automatiquement mis à jour dans la vue.
1093 Cela permet aux personnes ayant une expertise de l'interface utilisateur de travailler uniquement avec des widgets et de ne pas avoir à envoyer quoi que ce soit à la business logic autre que des événements utilisateur (comme cliquer sur un bouton), tandis que les personnes travaillant avec la business logic seront libres de créer et de tester la Business logic séparément. 1093 Cela permet aux personnes ayant une expertise de l'interface utilisateur de travailler uniquement avec des widgets et de ne pas avoir à envoyer quoi que ce soit à la business logic autre que des événements utilisateur (comme cliquer sur un bouton), tandis que les personnes travaillant avec la business logic seront libres de créer et de tester la Business logic séparément.
1094 1094
1095 1095
1 -# Dependency Management  
2 -- [Dependency Management](#dependency-management)  
3 - - [Instancing methods](#instancing-methods) 1 +# Gestion des dépendances
  2 +- [Dependency Management](#Gestion-des-dépendances)
  3 + - [Instancing methods](#Instanciation-des-methodes)
4 - [Get.put()](#getput) 4 - [Get.put()](#getput)
5 - [Get.lazyPut](#getlazyput) 5 - [Get.lazyPut](#getlazyput)
6 - [Get.putAsync](#getputasync) 6 - [Get.putAsync](#getputasync)
7 - [Get.create](#getcreate) 7 - [Get.create](#getcreate)
8 - - [Using instantiated methods/classes](#using-instantiated-methodsclasses) 8 + - [Using instantiated methods/classes](#Utilisation de méthodes / classes instanciées)
9 - [Differences between methods](#differences-between-methods) 9 - [Differences between methods](#differences-between-methods)
10 - [Bindings](#bindings) 10 - [Bindings](#bindings)
11 - - [How to use](#how-to-use) 11 + - [Classe Bindings](#classe-bindings)
12 - [BindingsBuilder](#bindingsbuilder) 12 - [BindingsBuilder](#bindingsbuilder)
13 - [SmartManagement](#smartmanagement) 13 - [SmartManagement](#smartmanagement)
14 - - [How to change](#How-to-change) 14 + - [Comment changer](#comment-changer)
15 - [SmartManagement.full](#smartmanagementfull) 15 - [SmartManagement.full](#smartmanagementfull)
16 - [SmartManagement.onlyBuilders](#smartmanagementonlybuilders) 16 - [SmartManagement.onlyBuilders](#smartmanagementonlybuilders)
17 - [SmartManagement.keepFactory](#smartmanagementkeepfactory) 17 - [SmartManagement.keepFactory](#smartmanagementkeepfactory)
18 - - [How bindings work under the hood](#how-bindings-work-under-the-hood) 18 + - [Comment Bindings fonctionne sous le capot](#comment-bindings-fonctionne-sous-le-capot)
19 - [Notes](#notes) 19 - [Notes](#notes)
20 20
21 -Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget: 21 +Get a un gestionnaire de dépendances simple et puissant qui vous permet de récupérer la même classe que votre Bloc ou Controller avec une seule ligne de code, pas de context Provider, pas d' inheritedWidget:
22 22
23 ```dart 23 ```dart
24 -Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); 24 +Controller controller = Get.put(Controller()); // Au lieu de Controller controller = Controller();
25 ``` 25 ```
26 26
27 -Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App.  
28 -So you can use your controller (or Bloc class) normally 27 +Au lieu d'instancier votre classe dans la classe que vous utilisez, vous l'instanciez dans l'instance Get, qui la rendra disponible dans toute votre application.
  28 +Vous pouvez donc utiliser votre contrôleur (ou classe Bloc) normalement
29 29
30 -- Note: If you are using Get's State Manager, pay more attention to the [Bindings](#bindings) api, which will make easier to connect your view to your controller.  
31 -- Note²: Get dependency management is decloupled from other parts of the package, so if for example your app is already using a state manager (any one, it doesn't matter), you don't need to change that, you can use this dependency injection manager with no problems at all 30 +- Note: Si vous utilisez le gestionnaire d'état de Get, faites plus attention à l'API [Bindings] (# bindings), qui facilitera la connexion de votre vue à votre contrôleur.
  31 +- Note²: La gestion des dépendances est découplée des autres parties du package, donc si, par exemple, votre application utilise déjà un gestionnaire d'état (n'importe lequel, peu importe), vous n'avez pas besoin de changer cela, vous pouvez utiliser ce manager d'injection de dépendance sans aucun problème.
32 32
33 -## Instancing methods  
34 -The methods and it's configurable parameters are: 33 +## Instanciation des methodes
  34 +Les méthodes et leurs paramètres configurables sont:
35 35
36 ### Get.put() 36 ### Get.put()
37 37
38 -The most common way of inserting a dependency. Good for the controllers of your views for example. 38 +La manière la plus courante d'insérer une dépendance. Bon pour les contrôleurs de vos vues par exemple.
39 39
40 ```dart 40 ```dart
41 Get.put<SomeClass>(SomeClass()); 41 Get.put<SomeClass>(SomeClass());
42 Get.put<LoginController>(LoginController(), permanent: true); 42 Get.put<LoginController>(LoginController(), permanent: true);
43 -Get.put<ListItemController>(ListItemController, tag: "some unique string"); 43 +Get.put<ListItemController>(ListItemController, tag: "un String unique");
44 ``` 44 ```
45 45
46 -This is all options you can set when using put: 46 +Ce sont toutes les options que vous pouvez définir lorsque vous utilisez put:
47 ```dart 47 ```dart
48 Get.put<S>( 48 Get.put<S>(
49 - // mandatory: the class that you want to get to save, like a controller or anything  
50 - // note: "S" means that it can be a class of any type 49 + // obligatoire: la classe que vous voulez que get enregistre, comme un 'controler' ou autre
  50 + // note: "S" signifie que ca peut etre une classe de n'importe quel type
51 S dependency 51 S dependency
52 52
53 - // optional: this is for when you want multiple classess that are of the same type  
54 - // since you normally get a class by using Get.find<Controller>(),  
55 - // you need to use tag to tell which instance you need  
56 - // must be unique string 53 + // optionnel: c'est pour quand vous voulez plusieurs classes qui sont du même type
  54 + // puisque vous obtenez normalement une classe en utilisant Get.find<Controller>(),
  55 + // vous devez utiliser ce tag pour indiquer de quelle instance vous avez besoin
  56 + // doit être un String unique
57 String tag, 57 String tag,
58 58
59 - // optional: by default, get will dispose instances after they are not used anymore (example,  
60 - // the controller of a view that is closed), but you might need that the instance  
61 - // to be kept there throughout the entire app, like an instance of sharedPreferences or something  
62 - // so you use this  
63 - // defaults to false 59 + // optionnel: par défaut, get supprimera les instances une fois qu'elles ne seront plus utilisées (exemple,
  60 + // le contrôleur d'une vue qui est fermée), mais vous pourriez avoir besoin que l'instance
  61 + // soit conservée dans toute l'application, comme une instance de sharedPreferences ou quelque chose du genre
  62 + // donc vous utilisez ceci
  63 + // équivaut à false par défaut
64 bool permanent = false, 64 bool permanent = false,
65 65
66 - // optional: allows you after using an abstract class in a test, replace it with another one and follow the test.  
67 - // defaults to false 66 + // facultatif: permet après avoir utilisé une classe abstraite dans un test, de la remplacer par une autre et de suivre le test.
  67 + // équivaut à false par défaut
68 bool overrideAbstract = false, 68 bool overrideAbstract = false,
69 69
70 - // optional: allows you to create the dependency using function instead of the dependency itself.  
71 - // this one is not commonly used 70 + // facultatif: vous permet de créer la dépendance en utilisant la fonction au lieu de la dépendance elle-même.
  71 + // ce n'est pas couramment utilisé
72 InstanceBuilderCallback<S> builder, 72 InstanceBuilderCallback<S> builder,
73 ) 73 )
74 ``` 74 ```
75 75
76 ### Get.lazyPut 76 ### Get.lazyPut
77 -It is possible to lazyLoad a dependency so that it will be instantiated only when is used. Very useful for computational expensive classes or if you want to instantiate several classes in just one place (like in a Bindings class) and you know you will not gonna use that class at that time. 77 +Il est possible de lazyLoad une dépendance afin qu'elle ne soit instanciée que lorsqu'elle est utilisée. Très utile pour les classes qui demandent beaucoup de ressources ou si vous souhaitez instancier plusieurs classes en un seul endroit (comme dans une classe Bindings) et que vous savez que vous n'utiliserez pas cette classe à ce moment-là.
78 78
79 ```dart 79 ```dart
80 -/// ApiMock will only be called when someone uses Get.find<ApiMock> for the first time 80 +/// ApiMock ne sera appelé que lorsque quelqu'un utilise Get.find <ApiMock> pour la première fois
81 Get.lazyPut<ApiMock>(() => ApiMock()); 81 Get.lazyPut<ApiMock>(() => ApiMock());
82 82
83 Get.lazyPut<FirebaseAuth>( 83 Get.lazyPut<FirebaseAuth>(
@@ -89,30 +89,30 @@ Get.lazyPut<FirebaseAuth>( @@ -89,30 +89,30 @@ Get.lazyPut<FirebaseAuth>(
89 fenix: true 89 fenix: true
90 ) 90 )
91 91
92 -Get.lazyPut<Controller>( () => Controller() ) 92 +Get.lazyPut<Controller>(() => Controller() )
93 ``` 93 ```
94 94
95 -This is all options you can set when using lazyPut: 95 +Ce sont toutes les options que vous pouvez définir lors de l'utilisation de lazyPut:
96 ```dart 96 ```dart
97 Get.lazyPut<S>( 97 Get.lazyPut<S>(
98 - // mandatory: a method that will be executed when your class is called for the first time 98 + // obligatoire: une méthode qui sera exécutée lorsque votre classe sera appelée pour la première fois
99 InstanceBuilderCallback builder, 99 InstanceBuilderCallback builder,
100 100
101 - // optional: same as Get.put(), it is used for when you want multiple different instance of a same class  
102 - // must be unique 101 + // facultatif: identique à Get.put(), il est utilisé lorsque vous voulez plusieurs instances différentes d'une même classe
  102 + // doit être unique
103 String tag, 103 String tag,
104 104
105 - // optional: It is similar to "permanent", the difference is that the instance is discarded when  
106 - // is not being used, but when it's use is needed again, Get will recreate the instance  
107 - // just the same as "SmartManagement.keepFactory" in the bindings api  
108 - // defaults to false 105 + // facultatif: cela est similaire à "permanent", la différence est que l'instance est supprimée lorsqu'elle
  106 + // n'est pas utilisée, mais lorsqu'elle est à nouveau nécessaire, Get recrée l'instance
  107 + // identique à "SmartManagement.keepFactory" dans l'API Bindings
  108 + // vaut false par défaut
109 bool fenix = false 109 bool fenix = false
110 110
111 ) 111 )
112 ``` 112 ```
113 113
114 ### Get.putAsync 114 ### Get.putAsync
115 -If you want to register an asynchronous instance, you can use `Get.putAsync`: 115 +Si vous souhaitez enregistrer une instance async, vous pouvez utiliser `Get.putAsync`:
116 116
117 ```dart 117 ```dart
118 Get.putAsync<SharedPreferences>(() async { 118 Get.putAsync<SharedPreferences>(() async {
@@ -121,127 +121,127 @@ Get.putAsync<SharedPreferences>(() async { @@ -121,127 +121,127 @@ Get.putAsync<SharedPreferences>(() async {
121 return prefs; 121 return prefs;
122 }); 122 });
123 123
124 -Get.putAsync<YourAsyncClass>( () async => await YourAsyncClass() ) 124 +Get.putAsync<YourAsyncClass>(() async => await YourAsyncClass())
125 ``` 125 ```
126 126
127 -This is all options you can set when using putAsync: 127 +Ce sont toutes les options que vous pouvez définir lors de l'utilisation de putAsync:
128 ```dart 128 ```dart
129 Get.putAsync<S>( 129 Get.putAsync<S>(
130 130
131 - // mandatory: an async method that will be executed to instantiate your class 131 + // obligatoire: une méthode async qui sera exécutée pour instancier votre classe
132 AsyncInstanceBuilderCallback<S> builder, 132 AsyncInstanceBuilderCallback<S> builder,
133 133
134 - // optional: same as Get.put(), it is used for when you want multiple different instance of a same class  
135 - // must be unique 134 + // facultatif: identique à Get.put(), il est utilisé lorsque vous voulez plusieurs instances différentes d'une même classe
  135 + // doit être unique
136 String tag, 136 String tag,
137 137
138 - // optional: same as in Get.put(), used when you need to maintain that instance alive in the entire app  
139 - // defaults to false 138 + // facultatif: identique à Get.put(), utilisé lorsque vous devez maintenir cette instance active dans l'ensemble de l'application
  139 + // vaut false par défaut
140 bool permanent = false 140 bool permanent = false
141 ) 141 )
142 ``` 142 ```
143 143
144 ### Get.create 144 ### Get.create
145 145
146 -This one is tricky. A detailed explanation of what this is and the differences between the other one can be found on [Differences between methods:](#differences-between-methods) section 146 +Celui-ci est délicat. Une explication détaillée de ce que c'est et des différences d'avec les autres peut être trouvée dans la section [Différences entre les méthodes:](#differences-entre-les-methodes).
147 147
148 ```dart 148 ```dart
149 Get.Create<SomeClass>(() => SomeClass()); 149 Get.Create<SomeClass>(() => SomeClass());
150 Get.Create<LoginController>(() => LoginController()); 150 Get.Create<LoginController>(() => LoginController());
151 ``` 151 ```
152 152
153 -This is all options you can set when using create: 153 +Ce sont toutes les options que vous pouvez définir lors de l'utilisation de create:
154 154
155 ```dart 155 ```dart
156 Get.create<S>( 156 Get.create<S>(
157 - // required: a function that returns a class that will be "fabricated" every  
158 - // time `Get.find()` is called  
159 - // Example: Get.create<YourClass>(() => YourClass()) 157 + // requis: une fonction qui renvoie une classe qui sera "fabriquée" chaque
  158 + // fois que `Get.find()` est appelé
  159 + // Exemple: Get.create<YourClass>(() => YourClass())
160 FcBuilderFunc<S> builder, 160 FcBuilderFunc<S> builder,
161 161
162 - // optional: just like Get.put(), but it is used when you need multiple instances  
163 - // of a of a same class  
164 - // Useful in case you have a list that each item need it's own controller  
165 - // needs to be a unique string. Just change from tag to name 162 + // facultatif: comme Get.put(), mais il est utilisé lorsque vous avez besoin de plusieurs instances
  163 + // d'une même classe
  164 + // Utile dans le cas où vous avez une liste oú chaque élément a besoin de son propre contrôleur
  165 + // doit être une String unique. Changez simplement de 'tag' en 'name'
166 String name, 166 String name,
167 167
168 - // optional: just like int`Get.put()`, it is for when you need to keep the  
169 - // instance alive thoughout the entire app. The difference is in Get.create  
170 - // permanent is true by default 168 + // optionnel: tout comme dans `Get.put()`, c'est pour quand vous devez garder l'
  169 + // instance vivante dans toute l'application. La différence est que dans Get.create,
  170 + // permanent est 'true' par défaut
171 bool permanent = true 171 bool permanent = true
172 ``` 172 ```
173 173
174 -## Using instantiated methods/classes 174 +## Utilisation de méthodes/classes instanciées
175 175
176 -Imagine that you have navigated through numerous routes, and you need a data that was left behind in your controller, you would need a state manager combined with the Provider or Get_it, correct? Not with Get. You just need to ask Get to "find" for your controller, you don't need any additional dependencies: 176 +Imaginez que vous ayez parcouru de nombreuses routes et que vous ayez besoin d'une donnée qui a été laissée dans votre contrôleur, vous auriez besoin d'un gestionnaire d'état combiné avec le 'Provider' ou Get_it, n'est-ce pas? Pas avec Get. Il vous suffit de demander à Get de "find" (trouver) votre contrôleur, vous n'avez pas besoin de dépendances supplémentaires:
177 177
178 ```dart 178 ```dart
179 final controller = Get.find<Controller>(); 179 final controller = Get.find<Controller>();
180 // OR 180 // OR
181 Controller controller = Get.find(); 181 Controller controller = Get.find();
182 182
183 -// Yes, it looks like Magic, Get will find your controller, and will deliver it to you.  
184 -// You can have 1 million controllers instantiated, Get will always give you the right controller. 183 +// Oui, cela ressemble à Magic, Get trouvera votre contrôleur et vous le livrera.
  184 +// Vous pouvez avoir 1 million de contrôleurs instanciés, Get vous trouvera toujours le bon contrôleur.
185 ``` 185 ```
186 186
187 -And then you will be able to recover your controller data that was obtained back there: 187 +Et puis vous pourrez récupérer les données de votre contrôleur qui ont été obtenues là-bas:
188 188
189 ```dart 189 ```dart
190 Text(controller.textFromApi); 190 Text(controller.textFromApi);
191 ``` 191 ```
192 192
193 -Since the returned value is a normal class, you can do anything you want: 193 +La valeur renvoyée étant une classe normale, vous pouvez faire tout ce que vous voulez:
194 ```dart 194 ```dart
195 int count = Get.find<SharedPreferences>().getInt('counter'); 195 int count = Get.find<SharedPreferences>().getInt('counter');
196 -print(count); // out: 12345 196 +print(count); // donne: 12345
197 ``` 197 ```
198 198
199 -To remove an instance of Get: 199 +Pour supprimer une instance de Get:
200 200
201 ```dart 201 ```dart
202 -Get.delete<Controller>(); //usually you don't need to do this because GetX already delete unused controllers 202 +Get.delete<Controller>(); //généralement, vous n'avez pas besoin de le faire car GetX supprime déjà les contrôleurs inutilisés-
203 ``` 203 ```
204 204
205 -## Differences between methods 205 +## Differences entre les methodes
206 206
207 -First, let's of the `fenix` of Get.lazyPut and the `permanent` of the other methods. 207 +Commençons par le `fenix` de Get.lazyPut et le `permanent` des autres méthodes.
208 208
209 -The fundamental difference between `permanent` and `fenix` is how you want to store your instances. 209 +La différence fondamentale entre `permanent` et `fenix` réside dans la manière dont vous souhaitez stocker vos instances.
210 210
211 -Reinforcing: by default, GetX deletes instances when they are not in use.  
212 -It means that: If screen 1 has controller 1 and screen 2 has controller 2 and you remove the first route from stack, (like if you use `Get.off()` or `Get.offNamed()`) the controller 1 lost its use so it will be erased. 211 +Renforcement: par défaut, GetX supprime les instances lorsqu'elles ne sont pas utilisées.
  212 +Cela signifie que: Si l'écran 1 a le contrôleur 1 et l'écran 2 a le contrôleur 2 et que vous supprimez la première route du Stack, (comme si vous utilisez `Get.off()` ou `Get.offNamed()`) le contrôleur 1 a perdu son utilisation, il sera donc effacé.
213 213
214 -But if you want to opt for using `permanent:true`, then the controller will not be lost in this transition - which is very useful for services that you want to keep alive throughout the entire application. 214 +Mais si vous optez pour l'utilisation de `permanent: true`, alors le contrôleur ne sera pas perdu dans cette transition - ce qui est très utile pour les services que vous souhaitez maintenir actif dans toute l'application.
215 215
216 -`fenix` in the other hand is for services that you don't worry in losing between screen changes, but when you need that service, you expect that it is alive. So basically, it will dispose the unused controller/service/class, but when you need it, it will "recreate from the ashes" a new instance. 216 +`fenix`, quant à lui, est destiné aux services que vous ne craignez pas de perdre entre les changements d'écran, mais lorsque vous avez besoin de ce service, vous vous attendez à ce qu'il soit vivant. Donc, fondamentalement, il supprimera le contrôleur / service / classe inutilisé, mais lorsque vous en aurez besoin, il "recréera à partir de ses cendres" une nouvelle instance.
217 217
218 -Proceeding with the differences between methods: 218 +Différences entre les méthodes:
219 219
220 -- Get.put and Get.putAsync follows the same creation order, with the difference that the second uses an asynchronous method: those two methods creates and initializes the instance. That one is inserted directly in the memory, using the internal method `insert` with the parameters `permanent: false` and `isSingleton: true` (this isSingleton parameter only purpose is to tell if it is to use the dependency on `dependency` or if it is to use the dependency on `FcBuilderFunc`). After that, `Get.find()` is called that immediately initialize the instances that are on memory. 220 +- Get.put et Get.putAsync suivent le même ordre de création, à la différence que la seconde utilise une méthode asynchrone: ces deux méthodes créent et initialisent l'instance. Celle-ci est insérée directement dans la mémoire, en utilisant la méthode interne `insert` avec les paramètres` permanent: false` et `isSingleton: true` (ce paramètre isSingleton a pour seul but de dire s'il faut utiliser la dépendance sur` dependency` ou s'il doit utiliser la dépendance sur `FcBuilderFunc`). Après cela, `Get.find()` est appelé pour initialiser immédiatement les instances qui sont en mémoire.
221 221
222 -- Get.create: As the name implies, it will "create" your dependency! Similar to `Get.put()`, it also calls the internal method `insert` to instancing. But `permanent` became true and `isSingleton` became false (since we are "creating" our dependency, there is no way for it to be a singleton instace, that's why is false). And because it has `permanent: true`, we have by default the benefit of not losing it between screens! Also, `Get.find()` is not called immediately, it wait to be used in the screen to be called. It is created this way to make use of the parameter `permanent`, since then, worth noticing, `Get.create()` was made with the goal of create not shared instances, but don't get disposed, like for example a button in a listView, that you want a unique instance for that list - because of that, Get.create must be used together with GetWidget. 222 +- Get.create: Comme son nom l'indique, il "créera" votre dépendance! Similaire à `Get.put()`, il appelle également la méthode interne `insert` pour l'instanciation. Mais `permanent` devient vrai et` isSingleton` devient faux (puisque nous "créons" notre dépendance, il n'y a aucun moyen pour que ce soit une instance singleton, c'est pourquoi il est faux). Et comme il a `permanent: true`, nous avons par défaut l'avantage de ne pas le perdre entre les écrans! De plus, `Get.find()` n'est pas appelé immédiatement, il attend d'être utilisé dans l'écran pour être appelé. Il est créé de cette façon pour utiliser le paramètre `permanent`, depuis lors, il convient de noter que` Get.create() `a été créé dans le but de créer des instances non partagées, mais qui ne sont pas supprimées, comme par exemple un bouton dans un listView, pour lequel vous voulez une instance unique pour cette liste - à cause de cela, Get.create doit être utilisé avec GetWidget.
223 223
224 -- Get.lazyPut: As the name implies, it is a lazy proccess. The instance is create, but it is not called to be used immediately, it remains waiting to be called. Contrary to the other methods, `insert` is not called here. Instead, the instance is inserted in another part of the memory, a part responsible to tell if the instance can be recreated or not, let's call it "factory". If we want to create something to be used later, it will not be mix with things been used right now. And here is where `fenix` magic enters: if you opt to leaving `fenix: false`, and your `smartManagement` are not `keepFactory`, then when using `Get.find` the instance will change the place in the memory from the "factory" to common instance memory area. Right after that, by default it is removed from the "factory". Now, if you opt for `fenix: true`, the instance continues to exist in this dedicated part, even going to the common area, to be called again in the future. 224 +- Get.lazyPut: Comme son nom l'indique, il s'agit d'un processus 'paresseux'. L'instance est créée, mais elle n'est pas appelée pour être utilisée immédiatement, elle reste en attente d'être appelée. Contrairement aux autres méthodes, `insert` n'est pas appelé ici. Au lieu de cela, l'instance est insérée dans une autre partie de la mémoire, une partie chargée de dire si l'instance peut être recréée ou non, appelons-la "factory". Si nous voulons créer quelque chose pour être utilisé plus tard, il ne sera pas mélangé avec les choses actuellement utilisées. Et voici où la magie de `fenix` apparaît: si vous choisissez de laisser` fenix: false`, et que votre `smartManagement` n'est pas` keepFactory`, alors lors de l'utilisation de `Get.find`, l'instance changera la place dans la mémoire de la "factory" à la zone de mémoire d'instance commune. Juste après cela, par défaut, il est retiré de `la factory`. Maintenant, si vous optez pour `fenix: true`, l'instance continue d'exister dans cette partie dédiée, allant même vers la zone commune, pour être appelée à nouveau dans le futur.
225 225
226 ## Bindings 226 ## Bindings
227 227
228 -One of the great differentials of this package, perhaps, is the possibility of full integration of the routes, state manager and dependency manager.  
229 -When a route is removed from the Stack, all controllers, variables, and instances of objects related to it are removed from memory. If you are using streams or timers, they will be closed automatically, and you don't have to worry about any of that.  
230 -In version 2.10 Get completely implemented the Bindings API.  
231 -Now you no longer need to use the init method. You don't even have to type your controllers if you don't want to. You can start your controllers and services in the appropriate place for that.  
232 -The Binding class is a class that will decouple dependency injection, while "binding" routes to the state manager and dependency manager.  
233 -This allows Get to know which screen is being displayed when a particular controller is used and to know where and how to dispose of it.  
234 -In addition, the Binding class will allow you to have SmartManager configuration control. You can configure the dependencies to be arranged when removing a route from the stack, or when the widget that used it is laid out, or neither. You will have intelligent dependency management working for you, but even so, you can configure it as you wish. 228 +L'une des grandes différences de ce package, peut-être, est la possibilité d'une intégration complète des routes, du gestionnaire d'état et du gestionnaire de dépendances.
  229 +Lorsqu'une route est supprimée de la pile, tous les contrôleurs, variables et instances d'objets qui lui sont associés sont supprimés de la mémoire. Si vous utilisez des streams ou timers, ils seront fermés automatiquement et vous n'aurez à vous soucier de rien de tout cela.
  230 +Dans la version 2.10, Get a complètement implémenté l'API Bindings.
  231 +Vous n'avez plus besoin d'utiliser la méthode init. Vous n'avez même pas besoin de `typer`(declaration de type) vos contrôleurs si vous ne le souhaitez pas. Vous pouvez démarrer vos contrôleurs et services à l'endroit approprié pour cela.
  232 +La classe Binding est une classe qui découplera l'injection de dépendances, en faisant du "binding" des routes entre le gestionnaire d'état et le gestionnaire de dépendances.
  233 +Cela permet à Get de savoir quel écran est affiché lorsqu'un contrôleur particulier est utilisé et de savoir où et comment s'en débarrasser.
  234 +De plus, la classe Binding vous permettra d'avoir le contrôle de la configuration de SmartManager. Vous pouvez configurer les dépendances à organiser lors de la suppression d'une route du Stack, ou lorsque le widget qui l'utilisait est disposé, ou ni l'un ni l'autre. Vous disposerez d'une gestion intelligente des dépendances qui fonctionnera pour vous, mais vous pourrez malgré tout la configurer comme vous le souhaitez.
235 235
236 -### Bindings class 236 +### Classe Bindings
237 237
238 -- Create a class and implements Binding 238 +- Créer une classe et implémenter Bindings
239 239
240 ```dart 240 ```dart
241 class HomeBinding implements Bindings {} 241 class HomeBinding implements Bindings {}
242 ``` 242 ```
243 243
244 -Your IDE will automatically ask you to override the "dependencies" method, and you just need to click on the lamp, override the method, and insert all the classes you are going to use on that route: 244 +Votre IDE vous demandera automatiquement de remplacer la méthode "dependencies", et il vous suffit de cliquer sur la lampe, de remplacer la méthode et d'insérer toutes les classes que vous allez utiliser sur cette route:
245 245
246 ```dart 246 ```dart
247 class HomeBinding implements Bindings { 247 class HomeBinding implements Bindings {
@@ -260,9 +260,9 @@ class DetailsBinding implements Bindings { @@ -260,9 +260,9 @@ class DetailsBinding implements Bindings {
260 } 260 }
261 ``` 261 ```
262 262
263 -Now you just need to inform your route, that you will use that binding to make the connection between route manager, dependencies and states. 263 +Il vous suffit maintenant d'informer votre route, que vous utiliserez ce Binding pour établir la connexion entre le gestionnaire de routes, les dépendances et les états.
264 264
265 -- Using named routes: 265 +- En utilisant les routes nommées:
266 266
267 ```dart 267 ```dart
268 getPages: [ 268 getPages: [
@@ -279,16 +279,16 @@ getPages: [ @@ -279,16 +279,16 @@ getPages: [
279 ]; 279 ];
280 ``` 280 ```
281 281
282 -- Using normal routes: 282 +- En utilisant les routes normales:
283 283
284 ```dart 284 ```dart
285 Get.to(Home(), binding: HomeBinding()); 285 Get.to(Home(), binding: HomeBinding());
286 Get.to(DetailsView(), binding: DetailsBinding()) 286 Get.to(DetailsView(), binding: DetailsBinding())
287 ``` 287 ```
288 288
289 -There, you don't have to worry about memory management of your application anymore, Get will do it for you. 289 +Là, vous n'avez plus à vous soucier de la gestion de la mémoire de votre application, Get le fera pour vous.
290 290
291 -The Binding class is called when a route is called, you can create an "initialBinding in your GetMaterialApp to insert all the dependencies that will be created. 291 +La classe Binding est appelée lorsqu'une route est appelée, vous pouvez créer un "initialBinding dans votre GetMaterialApp pour insérer toutes les dépendances qui seront créées.
292 292
293 ```dart 293 ```dart
294 GetMaterialApp( 294 GetMaterialApp(
@@ -299,10 +299,11 @@ GetMaterialApp( @@ -299,10 +299,11 @@ GetMaterialApp(
299 299
300 ### BindingsBuilder 300 ### BindingsBuilder
301 301
302 -The default way of creating a binding is by creating a class that implements Bindings.  
303 -But alternatively, you can use `BindingsBuilder` callback so that you can simply use a function to instantiate whatever you desire. 302 +La manière par défaut de créer un binding est de créer une classe qui implémente Bindings.
304 303
305 -Example: 304 +Mais alternativement, vous pouvez utiliser le callback `BindingsBuilder` afin de pouvoir simplement utiliser une fonction pour instancier ce que vous désirez.
  305 +
  306 +Exemple:
306 307
307 ```dart 308 ```dart
308 getPages: [ 309 getPages: [
@@ -324,25 +325,25 @@ getPages: [ @@ -324,25 +325,25 @@ getPages: [
324 ]; 325 ];
325 ``` 326 ```
326 327
327 -That way you can avoid to create one Binding class for each route making this even simpler. 328 +De cette façon, vous pouvez éviter de créer une classe Binding pour chaque route, ce qui est encore plus simple.
328 329
329 -Both ways of doing work perfectly fine and we want you to use what most suit your tastes. 330 +Les deux méthodes fonctionnent parfaitement bien et nous voulons que vous utilisiez ce qui correspond le mieux à vos goûts.
330 331
331 ### SmartManagement 332 ### SmartManagement
332 333
333 -GetX by default disposes unused controllers from memory, even if a failure occurs and a widget that uses it is not properly disposed.  
334 -This is what is called the `full` mode of dependency management.  
335 -But if you want to change the way GetX controls the disposal of classes, you have `SmartManagement` class that you can set different behaviors. 334 +GetX par défaut supprime les contrôleurs inutilisés de la mémoire, même si un échec se produit et qu'un widget qui l'utilise n'est pas correctement supprimé.
  335 +C'est ce qu'on appelle le mode `full` de gestion des dépendances.
  336 +Mais si vous voulez changer la façon dont GetX contrôle la suppression des classes, vous avez la classe `SmartManagement` pour définir différents comportements.
336 337
337 -#### How to change 338 +#### Comment changer
338 339
339 -If you want to change this config (which you usually don't need) this is the way: 340 +Si vous souhaitez modifier cette configuration (dont vous n'avez généralement pas besoin), procédez comme suit:
340 341
341 ```dart 342 ```dart
342 void main () { 343 void main () {
343 runApp( 344 runApp(
344 GetMaterialApp( 345 GetMaterialApp(
345 - smartManagement: SmartManagement.onlyBuilders //here 346 + smartManagement: SmartManagement.onlyBuilders //Ici
346 home: Home(), 347 home: Home(),
347 ) 348 )
348 ) 349 )
@@ -351,30 +352,32 @@ void main () { @@ -351,30 +352,32 @@ void main () {
351 352
352 #### SmartManagement.full 353 #### SmartManagement.full
353 354
354 -It is the default one. Dispose classes that are not being used and were not set to be permanent. In the majority of the cases you will want to keep this config untouched. If you new to GetX then don't change this. 355 +C'est celui par défaut. Supprime les classes qui ne sont pas utilisées et qui n'ont pas été définies pour être permanentes. Dans la majorité des cas, vous voudrez garder cette configuration intacte. Si vous débutez avec GetX, ne changez pas cela.
355 356
356 #### SmartManagement.onlyBuilders 357 #### SmartManagement.onlyBuilders
357 -With this option, only controllers started in `init:` or loaded into a Binding with `Get.lazyPut()` will be disposed.  
358 358
359 -If you use `Get.put()` or `Get.putAsync()` or any other approach, SmartManagement will not have permissions to exclude this dependency. 359 +Avec cette option, seuls les contrôleurs démarrés dans `init:` ou chargés dans un Binding avec `Get.lazyPut()` seront supprimés.
  360 +
  361 +Si vous utilisez `Get.put()` ou `Get.putAsync()` ou toute autre approche, SmartManagement n'aura pas les autorisations pour exclure cette dépendance.
360 362
361 -With the default behavior, even widgets instantiated with "Get.put" will be removed, unlike SmartManagement.onlyBuilders. 363 +Avec le comportement par défaut, même les widgets instanciés avec "Get.put" seront supprimés, contrairement à SmartManagement.onlyBuilders.
362 364
363 #### SmartManagement.keepFactory 365 #### SmartManagement.keepFactory
364 366
365 -Just like SmartManagement.full, it will remove it's dependencies when it's not being used anymore. However, it will keep their factory, which means it will recreate the dependency if you need that instance again. 367 +Tout comme SmartManagement.full, il supprimera ses dépendances lorsqu'elles ne seront plus utilisées. Cependant, il conservera leur factory, ce qui signifie qu'il recréera la dépendance si vous avez à nouveau besoin de cette instance.
  368 +
  369 +### Comment Bindings fonctionne sous le capot
366 370
367 -### How bindings work under the hood  
368 -Bindings creates transitory factories, which are created the moment you click to go to another screen, and will be destroyed as soon as the screen-changing animation happens.  
369 -This happens so fast that the analyzer will not even be able to register it.  
370 -When you navigate to this screen again, a new temporary factory will be called, so this is preferable to using SmartManagement.keepFactory, but if you don't want to create Bindings, or want to keep all your dependencies on the same Binding, it will certainly help you.  
371 -Factories take up little memory, they don't hold instances, but a function with the "shape" of that class you want.  
372 -This has a very low cost in memory, but since the purpose of this lib is to get the maximum performance possible using the minimum resources, Get removes even the factories by default.  
373 -Use whichever is most convenient for you. 371 +Bindings crée des `'factories' transitoires`, qui sont créées au moment où vous cliquez pour aller à un autre écran, et seront détruites dès que l'animation de changement d'écran se produit.
  372 +Cela arrive si vite que l'analyseur ne pourra même pas l'enregistrer.
  373 +Lorsque vous accédez à nouveau à cet écran, une nouvelle fabrique temporaire sera appelée, c'est donc préférable à l'utilisation de SmartManagement.keepFactory, mais si vous ne voulez pas créer de Bindings, ou si vous voulez garder toutes vos dépendances sur le même Binding , cela vous aidera certainement.
  374 +Les factories prennent peu de mémoire, elles ne contiennent pas d'instances, mais une fonction avec la "forme" de cette classe que vous voulez.
  375 +Cela a un très faible coût en mémoire, mais comme le but de cette bibliothèque est d'obtenir le maximum de performances possible en utilisant le minimum de ressources, Get supprime même les factories par défaut.
  376 +Utilisez celui qui vous convient le mieux.
374 377
375 ## Notes 378 ## Notes
376 379
377 -- DO NOT USE SmartManagement.keepFactory if you are using multiple Bindings. It was designed to be used without Bindings, or with a single Binding linked in the GetMaterialApp's initialBinding. 380 +- N'UTILISEZ PAS SmartManagement.keepFactory si vous utilisez plusieurs Bindings. Il a été conçu pour être utilisé sans Bindings ou avec une seule Binding liée dans le fichier initialBinding de GetMaterialApp.
378 381
379 -- Using Bindings is completely optional, if you want you can use `Get.put()` and `Get.find()` on classes that use a given controller without any problem.  
380 -However, if you work with Services or any other abstraction, I recommend using Bindings for a better organization. 382 +- L'utilisation de Bindings est complètement facultative, si vous le souhaitez, vous pouvez utiliser `Get.put()` et `Get.find()` sur les classes qui utilisent un contrôleur donné sans aucun problème.
  383 + Cependant, si vous travaillez avec des services ou toute autre abstraction, je vous recommande d'utiliser Bindings pour une meilleure organisation.
@@ -374,9 +374,9 @@ Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}")) @@ -374,9 +374,9 @@ Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}"))
374 user().name; //notez que c'est la variable utilisateur, pas la classe (la variable a un u minuscule) 374 user().name; //notez que c'est la variable utilisateur, pas la classe (la variable a un u minuscule)
375 ``` 375 ```
376 376
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.  
379 -L'API "assignAll" effacera la liste existante et ajoutera tous les objets itérables que vous y injecterez. 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.
  379 +L'API `assignAll` effacera la liste existante et ajoutera tous les objets itérables que vous y injecterez.
380 380
381 ### Pourquoi je dois utiliser .value 381 ### Pourquoi je dois utiliser .value
382 382
@@ -402,7 +402,7 @@ Les types dans Get à l'aide de Bindings ne sont pas nécessaires. Vous pouvez u @@ -402,7 +402,7 @@ Les types dans Get à l'aide de Bindings ne sont pas nécessaires. Vous pouvez u
402 Les 'workers' vous assisteront, déclenchant des callbacks spécifiques lorsqu'un événement se produit. 402 Les 'workers' vous assisteront, déclenchant des callbacks spécifiques lorsqu'un événement se produit.
403 403
404 ```dart 404 ```dart
405 -/// Appelée à chaque fois que «count1» change. 405 +/// Appelée à chaque fois que `count1` change.
406 ever(count1, (_) => print("$_ a été modifié")); 406 ever(count1, (_) => print("$_ a été modifié"));
407 407
408 /// Appelée uniquement la première fois que la variable est modifiée 408 /// Appelée uniquement la première fois que la variable est modifiée
@@ -432,7 +432,7 @@ Tous les workers renvoyent un objet `Worker`, qui peut être utilisé pour annul @@ -432,7 +432,7 @@ Tous les workers renvoyent un objet `Worker`, qui peut être utilisé pour annul
432 'debounce' est très utile dans les fonctions de recherche, où vous souhaitez que l'API ne soit appelée que lorsque l'utilisateur a fini de taper. Si l'utilisateur tape "Jonny", vous aurez 5 recherches dans les API, par la lettre J, o, n, n et y. Avec Get, cela ne se produit pas, car vous aurez un Worker "anti-rebond" qui ne sera déclenché qu'à la fin de la saisie. 432 'debounce' est très utile dans les fonctions de recherche, où vous souhaitez que l'API ne soit appelée que lorsque l'utilisateur a fini de taper. Si l'utilisateur tape "Jonny", vous aurez 5 recherches dans les API, par la lettre J, o, n, n et y. Avec Get, cela ne se produit pas, car vous aurez un Worker "anti-rebond" qui ne sera déclenché qu'à la fin de la saisie.
433 433
434 - **`interval`** 434 - **`interval`**
435 -'interval' est différent de 'debounce'. Avec «debounce» si l'utilisateur fait 1000 changements à une variable en 1 seconde, il n'enverra que le dernier après le temporisateur stipulé (la valeur par défaut est 800 millisecondes). 'Interval' ignorera à la place toutes les actions de l'utilisateur pour la période stipulée. Si vous envoyez des événements pendant 1 minute, 1000 par seconde, debounce ne vous enverra que le dernier, lorsque l'utilisateur arrête de mitrailler les événements. interval délivrera des événements toutes les secondes, et s'il est réglé sur 3 secondes, il fournira 20 événements cette minute. Ceci est recommandé pour éviter les abus, dans des fonctions où l'utilisateur peut rapidement cliquer sur quelque chose et obtenir un avantage (imaginez que l'utilisateur puisse gagner des pièces en cliquant sur quelque chose, s'il cliquait 300 fois dans la même minute, il aurait 300 pièces, en utilisant l'intervalle, vous pouvez définir une période de 3 secondes, et même en cliquant 300 ou mille fois, le maximum qu'il obtiendrait en 1 minute serait de 20 pièces, en cliquant 300 ou 1 million de fois). Le 'debounce' convient aux anti-DDos, pour des fonctions comme la recherche où chaque changement de onChange entraînerait une requête à votre api. Debounce attendra que l'utilisateur arrête de taper le nom, pour faire la demande. S'il était utilisé dans le scénario de pièces mentionné ci-dessus, l'utilisateur ne gagnerait qu'une pièce, car il n'est exécuté que lorsque l'utilisateur "fait une pause" pendant le temps établi. 435 +'interval' est différent de 'debounce'. Avec `debounce` si l'utilisateur fait 1000 changements à une variable en 1 seconde, il n'enverra que le dernier après le temporisateur stipulé (la valeur par défaut est 800 millisecondes). 'Interval' ignorera à la place toutes les actions de l'utilisateur pour la période stipulée. Si vous envoyez des événements pendant 1 minute, 1000 par seconde, debounce ne vous enverra que le dernier, lorsque l'utilisateur arrête de mitrailler les événements. interval délivrera des événements toutes les secondes, et s'il est réglé sur 3 secondes, il fournira 20 événements cette minute. Ceci est recommandé pour éviter les abus, dans des fonctions où l'utilisateur peut rapidement cliquer sur quelque chose et obtenir un avantage (imaginez que l'utilisateur puisse gagner des pièces en cliquant sur quelque chose, s'il cliquait 300 fois dans la même minute, il aurait 300 pièces, en utilisant l'intervalle, vous pouvez définir une période de 3 secondes, et même en cliquant 300 ou mille fois, le maximum qu'il obtiendrait en 1 minute serait de 20 pièces, en cliquant 300 ou 1 million de fois). Le 'debounce' convient aux anti-DDos, pour des fonctions comme la recherche où chaque changement de onChange entraînerait une requête à votre api. Debounce attendra que l'utilisateur arrête de taper le nom, pour faire la demande. S'il était utilisé dans le scénario de pièces mentionné ci-dessus, l'utilisateur ne gagnerait qu'une pièce, car il n'est exécuté que lorsque l'utilisateur "fait une pause" pendant le temps établi.
436 436
437 - NOTE: Les 'workers' doivent toujours être utilisés lors du démarrage d'un contrôleur ou d'une classe, il doit donc toujours être dans onInit (recommandé), le constructeur de classe ou l'initState d'un StatefulWidget (cette pratique n'est pas recommandée dans la plupart des cas, mais cela ne devrait poser aucun problème). 437 - NOTE: Les 'workers' doivent toujours être utilisés lors du démarrage d'un contrôleur ou d'une classe, il doit donc toujours être dans onInit (recommandé), le constructeur de classe ou l'initState d'un StatefulWidget (cette pratique n'est pas recommandée dans la plupart des cas, mais cela ne devrait poser aucun problème).
438 438
@@ -450,7 +450,7 @@ De cette façon, si vous voulez un contrôleur individuel, vous pouvez lui attri @@ -450,7 +450,7 @@ De cette façon, si vous voulez un contrôleur individuel, vous pouvez lui attri
450 450
451 2. N'utilise pas changeNotifier, c'est le gestionnaire d'état qui utilise le moins de mémoire (proche de 0 Mo). 451 2. N'utilise pas changeNotifier, c'est le gestionnaire d'état qui utilise le moins de mémoire (proche de 0 Mo).
452 452
453 -3. Oubliez StatefulWidget! Avec Get, vous n'en aurez jamais besoin. Avec les autres gestionnaires d'états, vous devrez probablement utiliser un StatefulWidget pour obtenir l'instance de votre fournisseur, BLoC, MobX Controller, etc. Mais vous êtes-vous déjà arrêté pour penser que votre appBar, votre 'scaffold', et la plupart des les widgets de votre classe sont sans état (stateless)? Alors pourquoi sauvegarder l'état d'une classe entière, si vous pouvez sauvegarder l'état du widget qui est «avec état» (statefull)? Get résout cela aussi. Créez une classe sans état, rendez tout «sans état». Si vous devez mettre à jour un seul composant, enveloppez-le avec GetBuilder et son état sera conservé. 453 +3. Oubliez StatefulWidget! Avec Get, vous n'en aurez jamais besoin. Avec les autres gestionnaires d'états, vous devrez probablement utiliser un StatefulWidget pour obtenir l'instance de votre fournisseur, BLoC, MobX Controller, etc. Mais vous êtes-vous déjà arrêté pour penser que votre appBar, votre 'scaffold', et la plupart des les widgets de votre classe sont sans état (stateless)? Alors pourquoi sauvegarder l'état d'une classe entière, si vous pouvez sauvegarder l'état du widget qui est `avec état` (statefull)? Get résout cela aussi. Créez une classe sans état, rendez tout `sans état`. Si vous devez mettre à jour un seul composant, enveloppez-le avec GetBuilder et son état sera conservé.
454 454
455 4. Organisez votre projet pour de vrai! Les contrôleurs ne doivent pas être dans votre interface utilisateur, placer votre TextEditController ou tout contrôleur que vous utilisez dans votre classe Controller. 455 4. Organisez votre projet pour de vrai! Les contrôleurs ne doivent pas être dans votre interface utilisateur, placer votre TextEditController ou tout contrôleur que vous utilisez dans votre classe Controller.
456 456
@@ -482,7 +482,7 @@ GetBuilder<Controller>( @@ -482,7 +482,7 @@ GetBuilder<Controller>(
482 '${_.counter}', 482 '${_.counter}',
483 ), 483 ),
484 ) 484 )
485 -//Initialisez votre contrôleur uniquement la première fois. La deuxième fois que vous utilisez ReBuilder pour le même contrôleur, ne recommencez pas. Votre contrôleur sera automatiquement supprimé de la mémoire dès que le widget qui l'a marqué comme «init» sera déployé. Vous n'avez pas à vous en soucier, Get le fera automatiquement, assurez-vous simplement de ne pas démarrer deux fois le même contrôleur. 485 +//Initialisez votre contrôleur uniquement la première fois. La deuxième fois que vous utilisez ReBuilder pour le même contrôleur, ne recommencez pas. Votre contrôleur sera automatiquement supprimé de la mémoire dès que le widget qui l'a marqué comme `init` sera déployé. Vous n'avez pas à vous en soucier, Get le fera automatiquement, assurez-vous simplement de ne pas démarrer deux fois le même contrôleur.
486 ``` 486 ```
487 487
488 **Fait!** 488 **Fait!**
@@ -538,7 +538,7 @@ FloatingActionButton( @@ -538,7 +538,7 @@ FloatingActionButton(
538 ), 538 ),
539 ``` 539 ```
540 540
541 -Lorsque vous appuyez sur FloatingActionButton, tous les widgets qui écoutent la variable «counter» seront mis à jour automatiquement. 541 +Lorsque vous appuyez sur FloatingActionButton, tous les widgets qui écoutent la variable `counter` seront mis à jour automatiquement.
542 542
543 ### Comment il gère les contrôleurs 543 ### Comment il gère les contrôleurs
544 544
@@ -579,13 +579,13 @@ void onInit() { @@ -579,13 +579,13 @@ void onInit() {
579 579
580 ### Pourquoi ca existe 580 ### Pourquoi ca existe
581 581
582 -Le but de ce package est précisément de vous donner une solution complète pour la navigation des routes, la gestion des dépendances et des états, en utilisant le moins de dépendances possible, avec un haut degré de découplage. Get engage toutes les API Flutter de haut et bas niveau en lui-même, pour vous assurer de travailler avec le moins de couplage possible. Nous centralisons tout dans un seul package, pour vous assurer que vous n'avez aucun type de couplage dans votre projet. De cette façon, vous pouvez mettre uniquement des widgets dans votre vue et laisser la partie de votre équipe qui travaille avec la «business logique» libre, pour travailler avec la business logique sans dépendre d'aucun élément de la vue. Cela fournit un environnement de travail beaucoup plus propre, de sorte qu'une partie de votre équipe ne travaille qu'avec des widgets, sans se soucier d'envoyer des données à votre contrôleur, et une partie de votre équipe ne travaille qu'avec la business logique dans toute son ampleur, sans dépendre d'aucun élément de la Vue. 582 +Le but de ce package est précisément de vous donner une solution complète pour la navigation des routes, la gestion des dépendances et des états, en utilisant le moins de dépendances possible, avec un haut degré de découplage. Get engage toutes les API Flutter de haut et bas niveau en lui-même, pour vous assurer de travailler avec le moins de couplage possible. Nous centralisons tout dans un seul package, pour vous assurer que vous n'avez aucun type de couplage dans votre projet. De cette façon, vous pouvez mettre uniquement des widgets dans votre vue et laisser la partie de votre équipe qui travaille avec la `business logique` libre, pour travailler avec la business logique sans dépendre d'aucun élément de la vue. Cela fournit un environnement de travail beaucoup plus propre, de sorte qu'une partie de votre équipe ne travaille qu'avec des widgets, sans se soucier d'envoyer des données à votre contrôleur, et une partie de votre équipe ne travaille qu'avec la business logique dans toute son ampleur, sans dépendre d'aucun élément de la Vue.
583 583
584 Donc, pour simplifier cela: 584 Donc, pour simplifier cela:
585 Vous n'avez pas besoin d'appeler des méthodes dans initState et de les envoyer par paramètre à votre contrôleur, ni d'utiliser votre constructeur de contrôleur pour cela, vous avez la méthode onInit() qui est appelée au bon moment pour démarrer vos services. 585 Vous n'avez pas besoin d'appeler des méthodes dans initState et de les envoyer par paramètre à votre contrôleur, ni d'utiliser votre constructeur de contrôleur pour cela, vous avez la méthode onInit() qui est appelée au bon moment pour démarrer vos services.
586 Vous n'avez pas besoin d'appeler l'appareil, vous avez la méthode onClose() qui sera appelée au moment exact où votre contrôleur n'est plus nécessaire et sera supprimé de la mémoire. De cette façon, ne laissez les vues que pour les widgets, abstenez-vous d'y mettre tout type de business logique. 586 Vous n'avez pas besoin d'appeler l'appareil, vous avez la méthode onClose() qui sera appelée au moment exact où votre contrôleur n'est plus nécessaire et sera supprimé de la mémoire. De cette façon, ne laissez les vues que pour les widgets, abstenez-vous d'y mettre tout type de business logique.
587 587
588 -N'appelez pas une méthode dispose() dans GetxController, cela ne fera rien, rappelez-vous que le contrôleur n'est pas un Widget, vous ne devez pas le «supprimer», et il sera automatiquement et intelligemment supprimé de la mémoire par Get. Si vous avez utilisé un Stream et que vous souhaitez le fermer, insérez-le simplement dans la méthode close(). Exemple: 588 +N'appelez pas une méthode dispose() dans GetxController, cela ne fera rien, rappelez-vous que le contrôleur n'est pas un Widget, vous ne devez pas le `supprimer`, et il sera automatiquement et intelligemment supprimé de la mémoire par Get. Si vous avez utilisé un Stream et que vous souhaitez le fermer, insérez-le simplement dans la méthode close(). Exemple:
589 589
590 ```dart 590 ```dart
591 class Controller extends GetxController { 591 class Controller extends GetxController {
@@ -653,7 +653,7 @@ GetBuilder<Controller>( @@ -653,7 +653,7 @@ GetBuilder<Controller>(
653 ), 653 ),
654 ``` 654 ```
655 655
656 -- Vous pouvez utiliser des approches «non canoniques» pour ce faire. Si vous utilisez un autre gestionnaire de dépendances, comme get_it, modular, etc., et que vous souhaitez simplement fournir l'instance de contrôleur, vous pouvez le faire: 656 +- Vous pouvez utiliser des approches `non canoniques` pour ce faire. Si vous utilisez un autre gestionnaire de dépendances, comme get_it, modular, etc., et que vous souhaitez simplement fournir l'instance de contrôleur, vous pouvez le faire:
657 657
658 ```dart 658 ```dart
659 Controller controller = Controller(); 659 Controller controller = Controller();
@@ -699,7 +699,7 @@ GetX le fait automatiquement et ne reconstruit que le widget qui utilise la vari @@ -699,7 +699,7 @@ GetX le fait automatiquement et ne reconstruit que le widget qui utilise la vari
699 699
700 Certaines personnes ont ouvert une demande de fonctionnalité, car elles ne voulaient utiliser qu'un seul type de variable réactive, et les autres mécanismes, et devaient insérer un Obx dans un GetBuilder pour cela. En y réfléchissant, MixinBuilder a été créé. Il permet à la fois des changements réactifs en changeant les variables ".obs" et des mises à jour mécaniques via update(). Cependant, des 4 widgets c'est celui qui consomme le plus de ressources, car en plus d'avoir un Abonnement pour recevoir les événements de changement de ses enfants, il souscrit à la méthode de mise à jour de son contrôleur. 700 Certaines personnes ont ouvert une demande de fonctionnalité, car elles ne voulaient utiliser qu'un seul type de variable réactive, et les autres mécanismes, et devaient insérer un Obx dans un GetBuilder pour cela. En y réfléchissant, MixinBuilder a été créé. Il permet à la fois des changements réactifs en changeant les variables ".obs" et des mises à jour mécaniques via update(). Cependant, des 4 widgets c'est celui qui consomme le plus de ressources, car en plus d'avoir un Abonnement pour recevoir les événements de changement de ses enfants, il souscrit à la méthode de mise à jour de son contrôleur.
701 701
702 -L'extension de GetxController est importante, car ils ont des cycles de vie et peuvent «démarrer» et «terminer» des événements dans leurs méthodes onInit() et onClose(). Vous pouvez utiliser n'importe quelle classe pour cela, mais je vous recommande fortement d'utiliser la classe GetxController pour placer vos variables, qu'elles soient observables ou non. 702 +L'extension de GetxController est importante, car ils ont des cycles de vie et peuvent `démarrer` et `terminer` des événements dans leurs méthodes onInit() et onClose(). Vous pouvez utiliser n'importe quelle classe pour cela, mais je vous recommande fortement d'utiliser la classe GetxController pour placer vos variables, qu'elles soient observables ou non.
703 703
704 ## GetBuilder vs GetX vs Obx vs MixinBuilder 704 ## GetBuilder vs GetX vs Obx vs MixinBuilder
705 705