{"id":735,"date":"2021-04-21T14:04:22","date_gmt":"2021-04-21T14:04:22","guid":{"rendered":"https:\/\/wp.mobilist.com.tr\/?p=735"},"modified":"2024-03-22T09:52:44","modified_gmt":"2024-03-22T09:52:44","slug":"flutterda-state-yonetimi-yaklasimlari","status":"publish","type":"post","link":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/","title":{"rendered":"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131"},"content":{"rendered":"\n<p><em>26\/05\/2021 9:53<\/em><\/p>\n\n\n\n<p>Bartu Kaan Pideci, Mobilist<\/p>\n\n\n\n<p><strong>Flutter<\/strong>&nbsp;ile uygulama geli\u015ftirirken \u015f\u00fcphesiz ki en \u00f6nemli konulardan biri&nbsp;<strong>state y\u00f6netimi<\/strong>dir. Flutter\u2019\u0131n resmi \u0130nternet sayfas\u0131nda \u00f6nerdi\u011fi bir\u00e7ok state management yakla\u015f\u0131m\u0131 vard\u0131r.<\/p>\n\n\n\n<p>Bunlardan baz\u0131lar\u0131&nbsp;<strong>setState<\/strong>,&nbsp;<strong>Provider<\/strong>,&nbsp;<strong>Bloc<\/strong>,&nbsp;<strong>Mobx<\/strong>,&nbsp;<strong>Getx<\/strong>,&nbsp;<strong>GetIt&nbsp;<\/strong>gibi yakla\u015f\u0131mlard\u0131r. Bu seride sizlerle beraber farkl\u0131 kullan\u0131m \u015fekilleri olan bu yakla\u015f\u0131mlara bir g\u00f6z ataca\u011f\u0131z.<\/p>\n\n\n\n<p>Flutter\u2019\u0131n \u015fu me\u015fhur\u00a0<strong>counter\u00a0<\/strong>(saya\u00e7) uygulamas\u0131n\u0131 herkes bilir. K\u0131saca hat\u0131rlatmak gerekirse, bir flutter projesi olu\u015fturup derledi\u011fimiz anda ilk olarak kar\u015f\u0131m\u0131za \u00e7\u0131kan Flutter\u2019\u0131n\u00a0<strong>low-level<\/strong>\u00a0bir yakla\u015f\u0131m olarak g\u00f6rd\u00fc\u011f\u00fc\u00a0<strong>setState\u00a0<\/strong>yakla\u015f\u0131m\u0131 ile geli\u015ftirilmi\u015f \u00f6rnek bir saya\u00e7 uygulamas\u0131d\u0131r.<\/p>\n\n\n\n\n\n<p>Bu saya\u00e7 uygulamas\u0131n\u0131&nbsp;<strong>farkl\u0131 state management yakla\u015f\u0131mlar\u0131<\/strong>&nbsp;ile geli\u015ftirip aralar\u0131ndaki farklar\u0131 inceleyece\u011fiz ve bu yakla\u015f\u0131mlar\u0131n bize sa\u011flayaca\u011f\u0131 yararlardan bahsetmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>\u0130lk olarak,&nbsp;<strong>setState&nbsp;<\/strong>yakla\u015f\u0131m\u0131n\u0131&nbsp;<strong>en pop\u00fcler state management<\/strong>&nbsp;yakla\u015f\u0131mlar\u0131ndan olan&nbsp;<strong>Provider&nbsp;<\/strong>paketi ile kar\u015f\u0131la\u015ft\u0131raca\u011f\u0131z.<\/p>\n\n\n\n<p><strong>setState vs&nbsp;Provider<\/strong><\/p>\n\n\n\n<p>\u00d6ncelikle&nbsp;<strong>setState&nbsp;<\/strong>yakla\u015f\u0131m\u0131n\u0131 bir inceleyelim.<br><strong>setState&nbsp;<\/strong>metodu yaln\u0131zca<strong>&nbsp;Stateful Widget<\/strong>\u2019lar i\u00e7erisinde kullan\u0131lan bir kavramd\u0131r.class MyHomePage extends StatefulWidget {<br>@override<br>_MyHomePageState createState() =&gt; _MyHomePageState();<br>}<\/p>\n\n\n\n<p>class _MyHomePageState extends State&lt;MyHomePage&gt; {<br>int _counter = 0;<\/p>\n\n\n\n<p>void _incrementCounter() {<br>setState(() {<br>_counter++;<br>});<br>}@override<br>Widget build(BuildContext context) {<br><strong>return <\/strong>Scaffold(<br>appBar: AppBar(<br>title: Text(widget.title),<br>),<br>body: Center(<br>child: Column(<br>mainAxisAlignment: MainAxisAlignment.center,<br>children: &lt;Widget&gt;[<br>Text(<br>&#8216;You have pushed the button this many times:&#8217;,<br>),<br>Text(<br>&#8216;$_counter&#8217;,<br>style: Theme.<em>of<\/em>(context).textTheme.headline4,<br>),<br>],<br>),<br>),<br>floatingActionButton: FloatingActionButton(<br>onPressed: _incrementCounter,<br>tooltip: &#8216;Increment&#8217;,<br>child: Icon(Icons.<em>add<\/em>),<br>),<br>);<br>}<br>}<\/p>\n\n\n\n<p>\u00d6rnekte g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi _<strong>counter&nbsp;<\/strong>de\u011fi\u015fkeninin de\u011feri _<strong>incrementCounter()<\/strong>&nbsp;methodu i\u00e7erisinde art\u0131yor ve&nbsp;<strong>setSate&nbsp;<\/strong>methodu sayesinde de\u011fi\u015fikli\u011fi&nbsp;<strong>Widget Tree<\/strong>\u2019mize bildiriyoruz.void _incrementCounter() {<br>setState(() {<br>_counter++;<br>});<br>}<\/p>\n\n\n\n<p><strong>Floating Action Button<\/strong>\u2019\u0131n&nbsp;<strong>onPressed&nbsp;<\/strong>property\u2019sinde&nbsp;<strong>_incrementCounter&nbsp;<\/strong>methodu \u00e7a\u011f\u0131r\u0131l\u0131yor. Yani butona<strong>&nbsp;her t\u0131klad\u0131\u011f\u0131m\u0131zda<\/strong>&nbsp;<strong>setState&nbsp;<\/strong>methodu \u00e7a\u011fr\u0131l\u0131yor.&nbsp;<strong>setState&nbsp;<\/strong>methodunun \u00e7a\u011f\u0131r\u0131lmas\u0131 bulundu\u011fu class\u2019\u0131n&nbsp;<strong>build methodunu<\/strong>&nbsp;tetikler ve i\u00e7erisinde bulunan widget a\u011fac\u0131m\u0131z\u0131n uygulama ekran\u0131na&nbsp;<strong>yeniden olu\u015fturulmas\u0131 (rebuild)&nbsp;<\/strong>anlam\u0131na gelir&nbsp;<em>ve bu durum i\u015flem g\u00fcc\u00fc a\u00e7\u0131s\u0131ndan maliyetli olabilece\u011fi gibi state y\u00f6netimi a\u00e7\u0131s\u0131ndan da pek istedi\u011fimiz bir yakla\u015f\u0131m \u015fekli de\u011fildir.<\/em>floatingActionButton: FloatingActionButton(<br>onPressed: _incrementCounter,<br>tooltip: &#8216;Increment&#8217;,<br>child: Icon(Icons.<em>add<\/em>),<br>),<br>);<\/p>\n\n\n\n<p>T\u00fcm widget a\u011fac\u0131n\u0131n yeniden \u00e7izilmesi yerine sadece&nbsp;<strong>_counter<\/strong>&nbsp;de\u011fi\u015fkenini tutan&nbsp;<strong>Text Widget<\/strong>\u2019\u0131n\u0131 bu de\u011fi\u015fiklikten haberdar edip&nbsp;<strong>yaln\u0131zca&nbsp;<\/strong>bu widget\u2019\u0131n yeniden \u00e7izilmesini sa\u011flamak \u00e7ok daha uygun ve do\u011fru bir yakla\u015f\u0131m olacakt\u0131r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Peki nas\u0131l?<\/strong><\/h3>\n\n\n\n<p>Provider paketi bize bu nokta da yard\u0131mc\u0131 olabilecek g\u00fczel bir yakla\u015f\u0131md\u0131r.<\/p>\n\n\n\n<p>\u00d6ncelikle Provider paketini&nbsp;<strong>pubspec.yaml&nbsp;<\/strong>dosyam\u0131zdaki&nbsp;<strong>dependencies&nbsp;<\/strong>alan\u0131na ekliyoruz.dependencies:<br>flutter:<br>sdk: flutter<br>provider: ^4.3.3<\/p>\n\n\n\n<p><strong>ChangeNotifier<\/strong><br><strong>ChangeNotifier&nbsp;<\/strong>Flutter SDK\u2019da bulunan ve dinleyicilerine (<strong>listeners<\/strong>) de\u011fi\u015fiklik bildirimi (<strong>change notification<\/strong>) sa\u011flayan basit bir s\u0131n\u0131ft\u0131r. Ba\u015fka bir deyi\u015fle, e\u011fer bir \u015fey bir&nbsp;<strong>ChangeNotifier&nbsp;<\/strong>ise, onun de\u011fi\u015fikliklerine abone (<strong>subscribe<\/strong>) olabilirsiniz. Provider da&nbsp;<strong>ChangeNotifier&nbsp;<\/strong>uygulama&nbsp;<strong>state\u2019ini<\/strong>&nbsp;<strong>kaps\u00fcllemenin&nbsp;<\/strong>bir yoludur.<br>Counter uygulamas\u0131 \u00f6rne\u011fimizde, bir&nbsp;<strong>ChangeNotifier<\/strong>\u2019daki&nbsp;<strong>counter&nbsp;<\/strong>de\u011fi\u015fkeninin&nbsp;<strong>state\u2019ini y\u00f6netmek<\/strong>&nbsp;istiyoruz. Bu \u015fekilde onu&nbsp;<strong>extend&nbsp;<\/strong>eden yeni bir s\u0131n\u0131f olu\u015fturuyoruz:class Counter extends ChangeNotifier{<br>int counter = 0;<\/p>\n\n\n\n<p>void increment(){<br>counter ++;<br>notifyListeners();<br>}<br>}<\/p>\n\n\n\n<p>Evet&nbsp;<strong>Counter&nbsp;<\/strong>s\u0131n\u0131f\u0131m\u0131z haz\u0131r \u015fimdi bu s\u0131n\u0131f\u0131m\u0131z\u0131 widget a\u011fac\u0131m\u0131za&nbsp;<strong>ChangeNotifierProvider<\/strong>&nbsp;ile&nbsp;<strong>enjekte&nbsp;<\/strong>edelim.<\/p>\n\n\n\n<p><strong>Change Notifier Provider<br>ChangeNotifierProvider<\/strong>, soyundan gelenlere bir&nbsp;<strong>ChangeNotifier&nbsp;<\/strong>instance (\u00f6rne\u011fi) sa\u011flayan widget\u2019t\u0131r.&nbsp;<strong>Change Notifier Provider<\/strong>\u2019\u0131 ona eri\u015fmesi gereken widget\u2019lar\u0131n \u00fczerine koyuyoruz.class MyApp extends StatelessWidget {<br>@override<br>Widget build(BuildContext context) {<br>return MaterialApp(<br>title: &#8216;Counter Provider&#8217;,<br>theme: ThemeData(<br>primarySwatch: Colors.<em>blue<\/em>,<br>),<br>home: ChangeNotifierProvider&lt;Counter&gt;(<br>create: (_) =&gt; Counter(), child: MyHomePage()),<br>);<br>}<br>}<\/p>\n\n\n\n<p>\u00d6rnekte de g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi&nbsp;<strong>MyHomePage()<\/strong>&nbsp;widget\u0131n\u0131&nbsp;<strong>ChangeNotifierProvider<\/strong>&nbsp;s\u0131n\u0131f\u0131 ile sarmalayarak&nbsp;<strong>Counter&nbsp;<\/strong>s\u0131n\u0131f\u0131n\u0131 a\u011fac\u0131m\u0131za&nbsp;<strong>enjekte&nbsp;<\/strong>etmi\u015f&nbsp;olduk.<\/p>\n\n\n\n<p>Art\u0131k,&nbsp;<strong>MyHomePage&nbsp;<\/strong>i\u00e7erisinde&nbsp;<strong>Counter&nbsp;<\/strong>s\u0131n\u0131f\u0131n&nbsp;<strong>de\u011fi\u015fkenlerine&nbsp;<\/strong>ve&nbsp;<strong>metotlar\u0131na&nbsp;<\/strong>eri\u015fme imk\u00e2n\u0131m\u0131z var.class MyHomePage extends StatelessWidget {<br>@override<br>Widget build(BuildContext context) {<br>return Scaffold(<br>appBar: AppBar(<br>title: Text(&#8216;Counter App with Provider&#8217;),<br>),<br>body: Center(<br>child: Consumer&lt;Counter&gt;(<br>builder: (context, counter, child) {<br>return Text(counter.counter.toString(),<br>style: Theme.<em>of<\/em>(context).textTheme.headline4);<br>},<br>),<br>),<br>floatingActionButton: FloatingActionButton(<br>onPressed: () {<br>var counter = context.read&lt;Counter&gt;();<br>counter.increment();<br>},<br>tooltip: &#8216;Increment&#8217;,<br>child: Icon(Icons.<em>add<\/em>),<br>),<br>);<br>}<br>}<\/p>\n\n\n\n<p>Burada&nbsp;<strong>Consumer&nbsp;<\/strong>ile sarmalad\u0131\u011f\u0131m\u0131z&nbsp;<strong>counter&nbsp;<\/strong>de\u011fi\u015fkenini tutan&nbsp;<strong>Text Widget\u2019<\/strong>\u0131m\u0131z\u0131 g\u00f6r\u00fcyoruz.&nbsp;<strong>Consumer&nbsp;<\/strong>kullan\u0131rken eri\u015fmek istedi\u011fimiz&nbsp;<strong>modelin t\u00fcr\u00fcn\u00fc<\/strong>&nbsp;belirtmeliyiz.<\/p>\n\n\n\n<p>Bu durumda&nbsp;<strong>Counter&nbsp;<\/strong>istiyoruz; bu y\u00fczden&nbsp;<strong>Consumer &lt;Counter&gt;<\/strong>&nbsp;yaz\u0131yoruz. E\u011fer&nbsp;<strong>Counter<\/strong>\u2019\u0131 belirtmezsek,&nbsp;<strong>Provider&nbsp;<\/strong>paketi bize yard\u0131mc\u0131 olamaz. Provider,&nbsp;<strong>t\u00fcrlere ba\u011fl\u0131d\u0131r&nbsp;<\/strong>ve t\u00fcr olmadan ne istedi\u011fimizi bilemez.<\/p>\n\n\n\n<p><strong>Consumer Widget\u2019\u0131&nbsp;<\/strong>m\u00fcmk\u00fcn oldu\u011funca widget a\u011fac\u0131m\u0131z\u0131n derinliklerini yerle\u015ftirmek&nbsp;<strong>en iyi y\u00f6ntemdir<\/strong>&nbsp;(best practice).&nbsp;<em>Kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn b\u00fcy\u00fck bir b\u00f6l\u00fcm\u00fcn\u00fc yeniden olu\u015fturmak yerine&nbsp;<\/em><strong><em>sadece ilgili widget\u2019\u0131n de\u011fi\u015ftirilmesini&nbsp;<\/em><\/strong><em>sa\u011flar.<\/em><\/p>\n\n\n\n<p><strong>setState&nbsp;<\/strong>ile geli\u015ftirilmi\u015f \u00f6rnek counter uygulamas\u0131ndan&nbsp;<strong>farkl\u0131&nbsp;<\/strong>olarak<strong>&nbsp;Stateless Widget&nbsp;<\/strong>kulland\u0131k ve&nbsp;<strong>Counter&nbsp;<\/strong>de\u011fi\u015fkenini i\u00e7eren&nbsp;<strong>Text Widget<\/strong>\u2019\u0131n\u0131&nbsp;<strong>Consumer&lt;Counter&gt;&nbsp;<\/strong>ile&nbsp;<strong>sarmalad\u0131k&nbsp;<\/strong>ve de\u011fi\u015fiklikte yani butona her t\u0131klad\u0131\u011f\u0131nda t\u00fcm widget a\u011fac\u0131m\u0131z\u0131n yeniden \u00e7izilmesi yerine ilgili&nbsp;<strong>Text Widget\u2019\u0131n\u0131n<\/strong>&nbsp;yeniden olu\u015fturulmas\u0131n\u0131 sa\u011flad\u0131k.var providerCounter = context.read&lt;Counter&gt;();<br>providerCounter.increment();<\/p>\n\n\n\n<p>Bu sefer&nbsp;<strong>onPressed property\u2019<\/strong>si i\u00e7erinde bir&nbsp;<strong>providerCounter&nbsp;<\/strong>de\u011fi\u015fkeni tan\u0131mlad\u0131k ve yukar\u0131da olu\u015fturdu\u011fumuz&nbsp;<strong>Counter&nbsp;<\/strong>s\u0131n\u0131f\u0131n\u0131&nbsp;<strong>read&nbsp;<\/strong>ederek i\u00e7erisinde bulunan&nbsp;<strong>incerement()<\/strong>&nbsp;metodumuza eri\u015fmi\u015f&nbsp;olduk.<\/p>\n\n\n\n<p>E\u011fer amac\u0131n\u0131z sadece&nbsp;<strong>basit bir counter<\/strong>&nbsp;<strong>uygulamas\u0131<\/strong>&nbsp;yapmak ise, Flutter\u2019\u0131n demo \u00f6rne\u011finde oldu\u011fu gibi bir kullan\u0131m&nbsp;<strong>ihtiyac\u0131n\u0131z\u0131 kar\u015f\u0131lamas\u0131<\/strong>&nbsp;a\u00e7\u0131s\u0131ndan uygun olabilir.<\/p>\n\n\n\n<p>Ancak, i\u015f daha&nbsp;<strong>karma\u015f\u0131k<\/strong>&nbsp;ve&nbsp;<strong>b\u00fcy\u00fck projelere<\/strong>&nbsp;geldi\u011finde, bu tarz bir yakla\u015f\u0131m&nbsp;<strong>performans<\/strong>&nbsp;kay\u0131plar\u0131na neden olaca\u011f\u0131 gibi, \u00e7e\u015fitli problemleri de beraberinde getirir.<\/p>\n\n\n\n<p>Ve son olarak belirtmeliyiz ki,&nbsp;<strong>en iyi state management y\u00f6ntemi<\/strong>&nbsp;diye bir \u015fey&nbsp;yoktur.<\/p>\n\n\n\n<p>Proje ihtiya\u00e7lar\u0131na, projede \u00e7al\u0131\u015facak ki\u015filerin yetkinliklerine g\u00f6re se\u00e7ilebilecek&nbsp;<strong>optimum&nbsp;<\/strong>\u00e7\u00f6z\u00fcm vard\u0131r. Hi\u00e7biri di\u011ferinden daha iyidir diyemeyiz. Her biri projemizdeki ihtiya\u00e7lar\u0131m\u0131z\u0131 kar\u015f\u0131lama noktas\u0131nda \u00f6nem kazan\u0131r. K\u0131saca en do\u011fru y\u00f6ntem,&nbsp;<strong>ekibe ve projeye en uygun olan y\u00f6ntemdir.<\/strong><\/p>\n\n\n\n<p>Size bu yaz\u0131mda \u00e7e\u015fitli kullan\u0131m \u015fekilleri olan&nbsp;<strong>Provider paketinden ve setState<\/strong>&nbsp;y\u00f6ntemi ile aras\u0131ndaki farklardan<strong>&nbsp;<\/strong>k\u0131saca bahsetmeye \u00e7al\u0131\u015ft\u0131m.<\/p>\n\n\n\n<p>Bu serinin devam\u0131nda yukar\u0131da bahsetti\u011fim di\u011fer&nbsp;<strong>state management y\u00f6ntemlerini<\/strong>&nbsp;de anlatmaya \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek&nbsp;\u00fczere\u2026<\/p>\n","protected":false},"excerpt":{"rendered":"26\/05\/2021 9:53 Bartu Kaan Pideci, Mobilist Flutter&nbsp;ile uygulama geli\u015ftirirken \u015f\u00fcphesiz ki en \u00f6nemli konulardan biri&nbsp;state y\u00f6netimidir. Flutter\u2019\u0131n resmi \u0130nternet sayfas\u0131nda \u00f6nerdi\u011fi bir\u00e7ok state management yakla\u015f\u0131m\u0131 vard\u0131r. Bunlardan baz\u0131lar\u0131&nbsp;setState,&nbsp;Provider,&nbsp;Bloc,&nbsp;Mobx,&nbsp;Getx,&nbsp;GetIt&nbsp;gibi yakla\u015f\u0131mlard\u0131r. Bu seride sizlerle beraber farkl\u0131 kullan\u0131m \u015fekilleri olan bu yakla\u015f\u0131mlara bir g\u00f6z ataca\u011f\u0131z. Flutter\u2019\u0131n \u015fu me\u015fhur\u00a0counter\u00a0(saya\u00e7) uygulamas\u0131n\u0131 herkes bilir. K\u0131saca hat\u0131rlatmak gerekirse, bir flutter projesi olu\u015fturup [&hellip;]","protected":false},"author":4,"featured_media":736,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"footnotes":""},"categories":[53,54,55,56],"tags":[61,58,62,60,59],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.8 (Yoast SEO v22.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131 - Mobilist<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131\" \/>\n<meta property=\"og:description\" content=\"26\/05\/2021 9:53 Bartu Kaan Pideci, Mobilist Flutter&nbsp;ile uygulama geli\u015ftirirken \u015f\u00fcphesiz ki en \u00f6nemli konulardan biri&nbsp;state y\u00f6netimidir. Flutter\u2019\u0131n resmi \u0130nternet sayfas\u0131nda \u00f6nerdi\u011fi bir\u00e7ok state management yakla\u015f\u0131m\u0131 vard\u0131r. Bunlardan baz\u0131lar\u0131&nbsp;setState,&nbsp;Provider,&nbsp;Bloc,&nbsp;Mobx,&nbsp;Getx,&nbsp;GetIt&nbsp;gibi yakla\u015f\u0131mlard\u0131r. Bu seride sizlerle beraber farkl\u0131 kullan\u0131m \u015fekilleri olan bu yakla\u015f\u0131mlara bir g\u00f6z ataca\u011f\u0131z. Flutter\u2019\u0131n \u015fu me\u015fhur\u00a0counter\u00a0(saya\u00e7) uygulamas\u0131n\u0131 herkes bilir. K\u0131saca hat\u0131rlatmak gerekirse, bir flutter projesi olu\u015fturup [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\" \/>\n<meta property=\"og:site_name\" content=\"Mobilist\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/mobilistlabs\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-21T14:04:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-22T09:52:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"574\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mobilist\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mobilist_labs\" \/>\n<meta name=\"twitter:site\" content=\"@mobilist_labs\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mobilist\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\"},\"author\":{\"name\":\"Mobilist\",\"@id\":\"https:\/\/mobilist.com.tr\/en\/#\/schema\/person\/cb960c343376e89fed720ff2fddbde20\"},\"headline\":\"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131\",\"datePublished\":\"2021-04-21T14:04:22+00:00\",\"dateModified\":\"2024-03-22T09:52:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\"},\"wordCount\":1332,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/mobilist.com.tr\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg\",\"keywords\":[\"Bloc Pattern\",\"Flutter\",\"Flutter Hooks\",\"Riverpod\",\"State Management\"],\"articleSection\":[\"Flutter Development\",\"Mobile App Development\",\"Programming Best Practices\",\"Software Architecture\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\",\"url\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\",\"name\":\"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131 - Mobilist\",\"isPartOf\":{\"@id\":\"https:\/\/mobilist.com.tr\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg\",\"datePublished\":\"2021-04-21T14:04:22+00:00\",\"dateModified\":\"2024-03-22T09:52:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage\",\"url\":\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg\",\"contentUrl\":\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg\",\"width\":1024,\"height\":574},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/mobilist.com.tr\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/mobilist.com.tr\/en\/#website\",\"url\":\"https:\/\/mobilist.com.tr\/en\/\",\"name\":\"Mobilist\",\"description\":\"Dijitalin Kusursuz Hali\",\"publisher\":{\"@id\":\"https:\/\/mobilist.com.tr\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/mobilist.com.tr\/en\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/mobilist.com.tr\/en\/#organization\",\"name\":\"Mobilist\",\"url\":\"https:\/\/mobilist.com.tr\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/mobilist.com.tr\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/web-logo-text-only-2.png\",\"contentUrl\":\"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/web-logo-text-only-2.png\",\"width\":400,\"height\":78,\"caption\":\"Mobilist\"},\"image\":{\"@id\":\"https:\/\/mobilist.com.tr\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/mobilistlabs\",\"https:\/\/x.com\/mobilist_labs\",\"https:\/\/www.instagram.com\/mobilist\/\",\"https:\/\/www.linkedin.com\/company\/2498352\/admin\/feed\/posts\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/mobilist.com.tr\/en\/#\/schema\/person\/cb960c343376e89fed720ff2fddbde20\",\"name\":\"Mobilist\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/mobilist.com.tr\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/777415801de8f6bf7dcda3dca7fb6e37?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/777415801de8f6bf7dcda3dca7fb6e37?s=96&d=mm&r=g\",\"caption\":\"Mobilist\"},\"url\":\"https:\/\/www.mobilist.com.tr\/tr\/author\/didemelerman\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131 - Mobilist","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/","og_locale":"tr_TR","og_type":"article","og_title":"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131","og_description":"26\/05\/2021 9:53 Bartu Kaan Pideci, Mobilist Flutter&nbsp;ile uygulama geli\u015ftirirken \u015f\u00fcphesiz ki en \u00f6nemli konulardan biri&nbsp;state y\u00f6netimidir. Flutter\u2019\u0131n resmi \u0130nternet sayfas\u0131nda \u00f6nerdi\u011fi bir\u00e7ok state management yakla\u015f\u0131m\u0131 vard\u0131r. Bunlardan baz\u0131lar\u0131&nbsp;setState,&nbsp;Provider,&nbsp;Bloc,&nbsp;Mobx,&nbsp;Getx,&nbsp;GetIt&nbsp;gibi yakla\u015f\u0131mlard\u0131r. Bu seride sizlerle beraber farkl\u0131 kullan\u0131m \u015fekilleri olan bu yakla\u015f\u0131mlara bir g\u00f6z ataca\u011f\u0131z. Flutter\u2019\u0131n \u015fu me\u015fhur\u00a0counter\u00a0(saya\u00e7) uygulamas\u0131n\u0131 herkes bilir. K\u0131saca hat\u0131rlatmak gerekirse, bir flutter projesi olu\u015fturup [&hellip;]","og_url":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/","og_site_name":"Mobilist","article_publisher":"https:\/\/www.facebook.com\/mobilistlabs","article_published_time":"2021-04-21T14:04:22+00:00","article_modified_time":"2024-03-22T09:52:44+00:00","og_image":[{"width":1024,"height":574,"url":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg","type":"image\/jpeg"}],"author":"Mobilist","twitter_card":"summary_large_image","twitter_creator":"@mobilist_labs","twitter_site":"@mobilist_labs","twitter_misc":{"Yazan:":"Mobilist","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#article","isPartOf":{"@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/"},"author":{"name":"Mobilist","@id":"https:\/\/mobilist.com.tr\/en\/#\/schema\/person\/cb960c343376e89fed720ff2fddbde20"},"headline":"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131","datePublished":"2021-04-21T14:04:22+00:00","dateModified":"2024-03-22T09:52:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/"},"wordCount":1332,"commentCount":0,"publisher":{"@id":"https:\/\/mobilist.com.tr\/en\/#organization"},"image":{"@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg","keywords":["Bloc Pattern","Flutter","Flutter Hooks","Riverpod","State Management"],"articleSection":["Flutter Development","Mobile App Development","Programming Best Practices","Software Architecture"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/","url":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/","name":"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131 - Mobilist","isPartOf":{"@id":"https:\/\/mobilist.com.tr\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage"},"image":{"@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg","datePublished":"2021-04-21T14:04:22+00:00","dateModified":"2024-03-22T09:52:44+00:00","breadcrumb":{"@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#primaryimage","url":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg","contentUrl":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg","width":1024,"height":574},{"@type":"BreadcrumbList","@id":"https:\/\/www.mobilist.com.tr\/tr\/2021\/04\/21\/flutterda-state-yonetimi-yaklasimlari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mobilist.com.tr\/en\/"},{"@type":"ListItem","position":2,"name":"Flutter\u2019da State Y\u00f6netimi Yakla\u015f\u0131mlar\u0131"}]},{"@type":"WebSite","@id":"https:\/\/mobilist.com.tr\/en\/#website","url":"https:\/\/mobilist.com.tr\/en\/","name":"Mobilist","description":"Dijitalin Kusursuz Hali","publisher":{"@id":"https:\/\/mobilist.com.tr\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mobilist.com.tr\/en\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":"Organization","@id":"https:\/\/mobilist.com.tr\/en\/#organization","name":"Mobilist","url":"https:\/\/mobilist.com.tr\/en\/","logo":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/mobilist.com.tr\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/web-logo-text-only-2.png","contentUrl":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/web-logo-text-only-2.png","width":400,"height":78,"caption":"Mobilist"},"image":{"@id":"https:\/\/mobilist.com.tr\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/mobilistlabs","https:\/\/x.com\/mobilist_labs","https:\/\/www.instagram.com\/mobilist\/","https:\/\/www.linkedin.com\/company\/2498352\/admin\/feed\/posts\/"]},{"@type":"Person","@id":"https:\/\/mobilist.com.tr\/en\/#\/schema\/person\/cb960c343376e89fed720ff2fddbde20","name":"Mobilist","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/mobilist.com.tr\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/777415801de8f6bf7dcda3dca7fb6e37?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/777415801de8f6bf7dcda3dca7fb6e37?s=96&d=mm&r=g","caption":"Mobilist"},"url":"https:\/\/www.mobilist.com.tr\/tr\/author\/didemelerman\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mobilist.com.tr\/wp-content\/uploads\/2024\/03\/1b-4.jpeg","_links":{"self":[{"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/posts\/735"}],"collection":[{"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/comments?post=735"}],"version-history":[{"count":1,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/posts\/735\/revisions"}],"predecessor-version":[{"id":738,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/posts\/735\/revisions\/738"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/media\/736"}],"wp:attachment":[{"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/media?parent=735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/categories?post=735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mobilist.com.tr\/tr\/wp-json\/wp\/v2\/tags?post=735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}