Gizem Malçok

State Management follow link titles edited.

@@ -3,23 +3,23 @@ @@ -3,23 +3,23 @@
3 - [Advantages(Avantajlar)](#advantages(avantajlar)) 3 - [Advantages(Avantajlar)](#advantages(avantajlar))
4 - [Maksimum Performans:](#maksimum-performans) 4 - [Maksimum Performans:](#maksimum-performans)
5 - [Reaktif bir değişken bildirmek](#reaktif-bir-değişken-bildirmek) 5 - [Reaktif bir değişken bildirmek](#reaktif-bir-değişken-bildirmek)
6 - - [Reaktif bir state'e(duruma) sahip olmak kolaydır.](#reaktif-bir-state'e-(duruma)-sahip-olmak-kolaydır)  
7 - - [Görünümdeki değerleri kullanmak](#using-the-values-in-the-view)  
8 - - [Yeniden oluşturulacak koşullar](#conditions-to-rebuild)  
9 - - [Nerede .obs kullanılabilir](#where-obs-can-be-used)  
10 - - [Listeler hakkında not](#note-about-lists)  
11 - - [Neden .value kullanmak zorundayım?](#why-i-have-to-use-value) 6 + - [Reaktif bir state'e(duruma) sahip olmak kolaydır.](#reaktif-bir-state'e(duruma)-sahip-olmak-kolaydır)
  7 + - [Görünümdeki değerleri kullanmak](#görünümdeki-değerleri-kullanmak)
  8 + - [Yeniden oluşturulacak koşullar](#yeniden-oluşturulacak-koşullar)
  9 + - [Nerede .obs kullanılabilir](#nerede-.obs-kullanılabilir)
  10 + - [Listeler hakkında not](#listeler-hakkında-not)
  11 + - [Neden .value kullanmak zorundayım?](#neden-.value-kullanmak-zorundayım?)
12 - [Obx()](#obx) 12 - [Obx()](#obx)
13 - [Çalışanlar](#Çalışanlar) 13 - [Çalışanlar](#Çalışanlar)
14 - + [Simple State Manager (Basit Durum Yöneticisi)](#simple-state-manager)  
15 - - [Avantajlar](#advantages-1)  
16 - - [Kullanımı](#usage)  
17 - - [Controller'lar nasıl çalışır](#how-it-handles-controllers)  
18 - - [Artık StatefulWidget'lara ihtiyacınız olmayacak](#you-wont-need-statefulwidgets-anymore)  
19 - - [Neden var](#why-it-exists)  
20 - - [Kullanmanın diğer yolları](#other-ways-of-using-it)  
21 - - [Unique IDs (Benzersiz Kimlikler)](#unique-ids)  
22 - + [İki state managers ile Mixing](#mixing-the-two-state-managers) 14 + + [Simple State Manager(Basit Durum Yöneticisi)](#simple-state-manager(basit-durum-yöneticisi))
  15 + - [Avantajlar](#avantajlar)
  16 + - [Kullanımı](#kullanımı)
  17 + - [Controller'lar nasıl çalışır](#controller'lar-nasıl-çalışır)
  18 + - [Artık StatefulWidget'lara ihtiyacınız olmayacak](#artık-statefulwidget'lara-ihtiyacınız-olmayacak)
  19 + - [Neden var](#neden-vart)
  20 + - [Kullanmanın diğer yolları](#kullanmanın-diğer-yolları)
  21 + - [Unique IDs(Benzersiz Kimlikler)](#unique-ids(benzersiz-kimlikler))
  22 + + [İki state managers ile Mixing](#İki-state-managers-ile-mixing)
23 + [GetBuilder vs GetX vs Obx vs MixinBuilder](#getbuilder-vs-getx-vs-obx-vs-mixinbuilder) 23 + [GetBuilder vs GetX vs Obx vs MixinBuilder](#getbuilder-vs-getx-vs-obx-vs-mixinbuilder)
24 24
25 # State Management (Durum Yönetimi) 25 # State Management (Durum Yönetimi)
@@ -69,7 +69,7 @@ Hepsi bu. *Bu kadar basit* bir şey. @@ -69,7 +69,7 @@ Hepsi bu. *Bu kadar basit* bir şey.
69 69
70 Şu andan itibaren, bu reaktif-".obs"(ervables) değişkenlerine _Rx_ adını verebiliriz. 70 Şu andan itibaren, bu reaktif-".obs"(ervables) değişkenlerine _Rx_ adını verebiliriz.
71 71
72 -Başlık altında ne yaptık? `String` lerin bir `Stream` oluşturduk, `"Jonatas Borges"` initial value'sunu(başlangıç değerini) atadık, `"Jonatas Borges"` kullanan tüm widget'lara artık bu değişkene "ait olduklarını" bildirdik ve _Rx_ değeri değiştiğinde de değişmeleri gerekecek. 72 +Başlık altında ne yaptık? `String` lerin bir `Stream` oluşturduk, `"Jonatas Borges"` initial value'sunu(başlangıç değerini) atadık, `"Jonatas Borges"` kullanan tüm widget'lara artık bu değişkene "ait olduklarını" bildirdik ve _Rx_ değeri değiştiğinde de değişmeleri gerekecek.
73 73
74 Bu, Dart'ın yetenekleri sayesinde **GetX'in büyüsüdür**. 74 Bu, Dart'ın yetenekleri sayesinde **GetX'in büyüsüdür**.
75 75
@@ -88,9 +88,9 @@ Pekala, görünüşe göre, belirli bir Widget'ı değiştirmek istediğimizde g @@ -88,9 +88,9 @@ Pekala, görünüşe göre, belirli bir Widget'ı değiştirmek istediğimizde g
88 Obx (() => Text (controller.name)); 88 Obx (() => Text (controller.name));
89 ``` 89 ```
90 90
91 -_Ezberlemek için neye ihtiyacın var?_Sadece `Obx(() =>` .  
92 - 91 +_Ezberlemek için neye ihtiyacın var?_Sadece `Obx(() =>` .
93 92
  93 +You are just passing that Widget through an arrow-function into an `Obx()` (the "Observer" of the _Rx_).
94 Bu Widget'ı bir ok işlevinden bir 'Obx()' (_Rx_'in "Observable") içine geçiriyorsunuz. 94 Bu Widget'ı bir ok işlevinden bir 'Obx()' (_Rx_'in "Observable") içine geçiriyorsunuz.
95 95
96 `Obx` oldukça akıllıdır ve yalnızca `controller.name`nin değeri değiştiğinde değişecektir. 96 `Obx` oldukça akıllıdır ve yalnızca `controller.name`nin değeri değiştiğinde değişecektir.
@@ -107,18 +107,18 @@ Hayır, sadece bu _Rx_ değişkenini kullanan **belirli Widget**. @@ -107,18 +107,18 @@ Hayır, sadece bu _Rx_ değişkenini kullanan **belirli Widget**.
107 107
108 Bu nedenle, **GetX** yalnızca _Rx_ değişkeni değerini değiştirdiğinde ekranı günceller. 108 Bu nedenle, **GetX** yalnızca _Rx_ değişkeni değerini değiştirdiğinde ekranı günceller.
109 109
110 -``` 110 +```
111 111
112 final isOpen = false.obs; 112 final isOpen = false.obs;
113 113
114 -// Hiçbir şey olmadı. Işte aynı değer. 114 +// NOTHING will happen... same value.
115 void onButtonTap() => isOpen.value=false; 115 void onButtonTap() => isOpen.value=false;
116 ``` 116 ```
117 117
118 ### Advantages(Avantajlar) 118 ### Advantages(Avantajlar)
119 119
120 **GetX()**, güncellenen değişkenler üzerinde **ayrıntılı** kontrole ihtiyacınız olduğunda size yardımcı olur. 120 **GetX()**, güncellenen değişkenler üzerinde **ayrıntılı** kontrole ihtiyacınız olduğunda size yardımcı olur.
121 - 121 +
122 Bir eylem gerçekleştirdiğinizde tüm değişkenleriniz değiştirileceğinden `unique IDs(benzersiz kimliklere)` ihtiyacınız yoksa, `GetBuilder`ı kullanın, 122 Bir eylem gerçekleştirdiğinizde tüm değişkenleriniz değiştirileceğinden `unique IDs(benzersiz kimliklere)` ihtiyacınız yoksa, `GetBuilder`ı kullanın,
123 çünkü Simple State Updater(Basit Durum Güncelleyicisi)'dir (`setState ()` gibi bloklar halinde), sadece birkaç kod satırında yapılır. 123 çünkü Simple State Updater(Basit Durum Güncelleyicisi)'dir (`setState ()` gibi bloklar halinde), sadece birkaç kod satırında yapılır.
124 En az CPU etkisine sahip olmak ve sadece tek bir amacı (_State_ rebuild) yerine getirmek ve mümkün olan en az kaynağı harcamak için basitleştirildi. 124 En az CPU etkisine sahip olmak ve sadece tek bir amacı (_State_ rebuild) yerine getirmek ve mümkün olan en az kaynağı harcamak için basitleştirildi.
@@ -196,15 +196,15 @@ final myMap = <String, int>{}.obs; @@ -196,15 +196,15 @@ final myMap = <String, int>{}.obs;
196 final user = User().obs; 196 final user = User().obs;
197 ``` 197 ```
198 198
199 -##### Reaktif bir duruma sahip olmak kolaydır. 199 +##### Reaktif bir state'e(duruma) sahip olmak kolaydır.
200 200
201 Bildiğimiz gibi, _Dart_ şimdi _null safety_ doğru gidiyor. 201 Bildiğimiz gibi, _Dart_ şimdi _null safety_ doğru gidiyor.
202 Şu andan itibaren hazırlıklı olmak için, _Rx_ değişkenlerinizi her zaman bir **initial value** ile başlatmalısınız. 202 Şu andan itibaren hazırlıklı olmak için, _Rx_ değişkenlerinizi her zaman bir **initial value** ile başlatmalısınız.
203 203
204 > Bir değişkeni **GetX** ile _observable_ + _initial value_ değerine dönüştürmek en basit ve pratik yaklaşımdır. 204 > Bir değişkeni **GetX** ile _observable_ + _initial value_ değerine dönüştürmek en basit ve pratik yaklaşımdır.
205 205
206 -Kelimenin tam anlamıyla bir değişkeninizin sonuna bir " `.obs` " ekleyeceksiniz, ve **bu kadar**, şimdi onu gözlemlenebilir hale getirdiniz,  
207 -ve onun `.value(değer)`'i, _initial value_ olacaktır). 206 +Kelimenin tam anlamıyla bir değişkeninizin sonuna bir " `.obs` " ekleyeceksiniz, ve **bu kadar**. Şimdi onu gözlemlenebilir hale getirdiniz,
  207 +ve onun `.value(değer)`'i, _initial value_ olacaktır.
208 208
209 ### Görünümdeki değerleri kullanmak 209 ### Görünümdeki değerleri kullanmak
210 210
@@ -339,7 +339,7 @@ class User { @@ -339,7 +339,7 @@ class User {
339 var age; 339 var age;
340 } 340 }
341 341
342 -// örnek verirken: 342 +// örnek:
343 final user = User(name: "Camila", age: 18).obs; 343 final user = User(name: "Camila", age: 18).obs;
344 ``` 344 ```
345 345
@@ -348,14 +348,14 @@ final user = User(name: "Camila", age: 18).obs; @@ -348,14 +348,14 @@ final user = User(name: "Camila", age: 18).obs;
348 Listeler, içindeki nesneler gibi tamamen gözlemlenebilir. Bu şekilde, bir listeye bir değer eklerseniz, onu kullanan widget'ları otomatik olarak yeniden oluşturur. 348 Listeler, içindeki nesneler gibi tamamen gözlemlenebilir. Bu şekilde, bir listeye bir değer eklerseniz, onu kullanan widget'ları otomatik olarak yeniden oluşturur.
349 349
350 Ayrıca listelerde ".value" kullanmanıza gerek yok, harika dart api'ları bunu kaldırmamıza izin verdi. 350 Ayrıca listelerde ".value" kullanmanıza gerek yok, harika dart api'ları bunu kaldırmamıza izin verdi.
351 -Ne yazık ki, String ve int gibi ilkel türler genişletilemez, bu da kullanımını sağlar.Değer zorunludur, ancak bunlar için get ve setter'larla çalışıyorsanız bu bir sorun olmayacaktır. 351 +Ne yazık ki, String ve int gibi ilkel türler genişletilemez, bu da kullanımını sağlar. Değer zorunludur, ancak bunlar için get ve setter'larla çalışıyorsanız bu bir sorun olmayacaktır.
352 352
353 ``` dart 353 ``` dart
354 -// controller içinde 354 +// On the controller
355 final String title = 'User Info:'.obs 355 final String title = 'User Info:'.obs
356 final list = List<User>().obs; 356 final list = List<User>().obs;
357 357
358 -// view içinde 358 +// on the view
359 Text(controller.title.value), // .value olması gerekir 359 Text(controller.title.value), // .value olması gerekir
360 ListView.builder ( 360 ListView.builder (
361 itemCount: controller.list.length // listelerin buna ihtiyacı yok 361 itemCount: controller.list.length // listelerin buna ihtiyacı yok
@@ -383,10 +383,10 @@ user.age = 18; @@ -383,10 +383,10 @@ user.age = 18;
383 // user değişkenini güncellemenin alternatif bir yolu: 383 // user değişkenini güncellemenin alternatif bir yolu:
384 user(User(name: 'João', age: 35)); 384 user(User(name: 'João', age: 35));
385 385
386 -// view içinde: 386 +// on view:
387 Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}")) 387 Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}"))
388 // model değerlerine .value olmadan da erişebilirsiniz: 388 // model değerlerine .value olmadan da erişebilirsiniz:
389 -user().name; 389 +user().name;
390 ``` 390 ```
391 391
392 İstemiyorsanız setlerle çalışmak zorunda değilsiniz. "assign" ve "assignAll" api'sini kullanabilirsiniz. 392 İstemiyorsanız setlerle çalışmak zorunda değilsiniz. "assign" ve "assignAll" api'sini kullanabilirsiniz.
@@ -404,6 +404,8 @@ Bu kitaplığın toplam ağırlığı, eksiksiz bir çözüm olmasına rağmen t @@ -404,6 +404,8 @@ Bu kitaplığın toplam ağırlığı, eksiksiz bir çözüm olmasına rağmen t
404 404
405 Eğer `.value` dan rahatsızsanız MobX harika bir alternatiftir ve Get ile birlikte kullanabilirsiniz. 405 Eğer `.value` dan rahatsızsanız MobX harika bir alternatiftir ve Get ile birlikte kullanabilirsiniz.
406 406
  407 +If you have no problem with the MobX code generator, or have no problem with the BLoC boilerplate, you can simply use Get for routes, and forget that it has state manager. Get SEM and RSM were born out of necessity, my company had a project with more than 90 controllers, and the code generator simply took more than 30 minutes to complete its tasks after a Flutter Clean on a reasonably good machine, if your project it has 5, 10, 15 controllers, any state manager will supply you well. If you have an absurdly large project, and code generator is a problem for you, you have been awarded this solution.
  408 +
407 MobX code generator ile bir sorununuz yoksa veya BLoC ilgili bir sorununuz yoksa Get ile route'u kullanabilirsiniz. Get SEM ve RSM ile doğdu, şirketimin 90'dan fazla controller'a sahip bir projesi var.Büyük bir projeniz varsa, oldukça iyi bir makinede bir Flutter Clean'den sonra görevlerini tamamlaması 30 dakikadan fazla sürdü. 5, 10, 15 controller, herhangi bir state manager size yardımcı olacaktır. Büyük bir projeniz varsa ve code generator sizin için bir sorunsa, bu çözüm size verildi. 409 MobX code generator ile bir sorununuz yoksa veya BLoC ilgili bir sorununuz yoksa Get ile route'u kullanabilirsiniz. Get SEM ve RSM ile doğdu, şirketimin 90'dan fazla controller'a sahip bir projesi var.Büyük bir projeniz varsa, oldukça iyi bir makinede bir Flutter Clean'den sonra görevlerini tamamlaması 30 dakikadan fazla sürdü. 5, 10, 15 controller, herhangi bir state manager size yardımcı olacaktır. Büyük bir projeniz varsa ve code generator sizin için bir sorunsa, bu çözüm size verildi.
408 410
409 Açıkçası, birisi projeye katkıda bulunmak ve bir code generator veya benzeri bir şey oluşturmak istiyorsa, bunu readme'de alternatif olarak bağlantı ekleyeceğim, şimdilik diyorum ki, bunu zaten yapan iyi çözümler var, MobX gibi. 411 Açıkçası, birisi projeye katkıda bulunmak ve bir code generator veya benzeri bir şey oluşturmak istiyorsa, bunu readme'de alternatif olarak bağlantı ekleyeceğim, şimdilik diyorum ki, bunu zaten yapan iyi çözümler var, MobX gibi.
@@ -435,7 +437,7 @@ Tüm çalışanlar (`debounce` dışında), "bool" veya "bool" döndüren bir ca @@ -435,7 +437,7 @@ Tüm çalışanlar (`debounce` dışında), "bool" veya "bool" döndüren bir ca
435 Bu "koşul", "callback" işlevinin ne zaman yürütüleceğini tanımlar. 437 Bu "koşul", "callback" işlevinin ne zaman yürütüleceğini tanımlar.
436 438
437 Tüm çalışanlar, çalışanı iptal etmek için ( `dispose()` aracılığıyla) kullanabileceğiniz bir 'Worker' örneği döndürür. 439 Tüm çalışanlar, çalışanı iptal etmek için ( `dispose()` aracılığıyla) kullanabileceğiniz bir 'Worker' örneği döndürür.
438 - 440 +
439 441
440 * **`ever`** 442 * **`ever`**
441 443
@@ -459,7 +461,7 @@ _Rx_ değişkeni her yeni bir değer yaydığında çağrılır. @@ -459,7 +461,7 @@ _Rx_ değişkeni her yeni bir değer yaydığında çağrılır.
459 461
460 * NOT: Çalışanlar her zaman bir Controller veya Class başlatırken kullanılmalıdır, bu nedenle her zaman onInit (önerilen), Class oluşturucu veya statefulwidget'in initState üzerinde olmalıdır (bu uygulama çoğu durumda önerilmez, ancak herhangi bir yan etkisi olmamalıdır). 462 * NOT: Çalışanlar her zaman bir Controller veya Class başlatırken kullanılmalıdır, bu nedenle her zaman onInit (önerilen), Class oluşturucu veya statefulwidget'in initState üzerinde olmalıdır (bu uygulama çoğu durumda önerilmez, ancak herhangi bir yan etkisi olmamalıdır).
461 463
462 -## Simple State Manager (Basit Durum Yöneticisi) 464 +## Simple State Manager(Basit Durum Yöneticisi)
463 465
464 Get'in son derece hafif ve kolay, ChangeNotifier kullanmayan, özellikle Flutter'a yeni başlayanların ihtiyacını karşılayacak ve büyük uygulamalar için sorun yaratmayacak bir state manager'i var. 466 Get'in son derece hafif ve kolay, ChangeNotifier kullanmayan, özellikle Flutter'a yeni başlayanların ihtiyacını karşılayacak ve büyük uygulamalar için sorun yaratmayacak bir state manager'i var.
465 467
@@ -500,12 +502,12 @@ class Controller extends GetxController { @@ -500,12 +502,12 @@ class Controller extends GetxController {
500 } 502 }
501 // Stateless/Stateful sınıfınızda, artış çağrıldığında Metni güncellemek için Get Builder'ı kullanın 503 // Stateless/Stateful sınıfınızda, artış çağrıldığında Metni güncellemek için Get Builder'ı kullanın
502 GetBuilder<Controller>( 504 GetBuilder<Controller>(
503 - init: Controller(), // SADECE ILK SEFERINDE "INIT" YAPIN 505 + init: Controller(), // INIT IT ONLY THE FIRST TIME
504 builder: (_) => Text( 506 builder: (_) => Text(
505 '${_.counter}', 507 '${_.counter}',
506 ), 508 ),
507 ) 509 )
508 -//Controller'ı sadece ilk seferinde "initialize" edin. Aynı controller için ikinci defa ReBuilder kullandıysanız, bunu bir daha yapmayın. Controller, widget içinde "init" işlemi gerçekleştikten sonra otomatik olarak hafızadan kaldırılacaktır. Bunun için endişelenmenize gerek yoktur, Get bunu otomatik olarak yapacaktır. Sadece aynı controller'ı birden fazla kez başlatmadığınıza emin olun yeter. 510 +//Initialize your controller only the first time. The second time you are using ReBuilder for the same controller, do not use it again. Your controller will be automatically removed from memory as soon as the widget that marked it as 'init' is deployed. You don't have to worry about that, Get will do it automatically, just make sure you don't start the same controller twice.
509 ``` 511 ```
510 512
511 **Tamamlandı!** 513 **Tamamlandı!**
@@ -652,7 +654,7 @@ class Controller extends GetxController { @@ -652,7 +654,7 @@ class Controller extends GetxController {
652 [...] 654 [...]
653 } 655 }
654 // görünümde: 656 // görünümde:
655 -GetBuilder<Controller>( 657 +GetBuilder<Controller>(
656 init: Controller(), // Her controller'ı bir kez kullanın 658 init: Controller(), // Her controller'ı bir kez kullanın
657 builder: (_) => Text( 659 builder: (_) => Text(
658 '${Controller.to.counter}', //burada 660 '${Controller.to.counter}', //burada
@@ -667,8 +669,8 @@ class Controller extends GetxController { @@ -667,8 +669,8 @@ class Controller extends GetxController {
667 // static Controller get to => Get.find(); // static olmadan 669 // static Controller get to => Get.find(); // static olmadan
668 [...] 670 [...]
669 } 671 }
670 -// stateful/stateless class içinde  
671 -GetBuilder<Controller>( 672 +// on stateful/stateless class
  673 +GetBuilder<Controller>(
672 init: Controller(), // Her controller'ı bir kez kullanın 674 init: Controller(), // Her controller'ı bir kez kullanın
673 builder: (_) => Text( 675 builder: (_) => Text(
674 '${Get.find<Controller>().counter}', //burada 676 '${Get.find<Controller>().counter}', //burada
@@ -690,7 +692,7 @@ GetBuilder<Controller>( @@ -690,7 +692,7 @@ GetBuilder<Controller>(
690 692
691 ``` 693 ```
692 694
693 -### Unique IDs (Benzersiz Kimlikler) 695 +### Unique IDs(Benzersiz Kimlikler)
694 696
695 Bir widget'ın controller'ını güncellemek istiyorsanız GetBuilder onlara benzersiz kimlikler atayabilirsiniz: 697 Bir widget'ın controller'ını güncellemek istiyorsanız GetBuilder onlara benzersiz kimlikler atayabilirsiniz:
696 698
@@ -734,6 +736,7 @@ bir controller'a T modelinizi ekleyin. @@ -734,6 +736,7 @@ bir controller'a T modelinizi ekleyin.
734 class Controller extends GetController with StateMixin<User>{} 736 class Controller extends GetController with StateMixin<User>{}
735 ``` 737 ```
736 738
  739 +
737 `change()` yöntemi istediğimiz zaman State'i değiştirir. 740 `change()` yöntemi istediğimiz zaman State'i değiştirir.
738 Sadece verileri ve state'i bu şekilde iletin: 741 Sadece verileri ve state'i bu şekilde iletin:
739 742