State Management: Provider Paketi

แชร์
ฝัง
  • เผยแพร่เมื่อ 27 พ.ย. 2024

ความคิดเห็น • 60

  • @ilkeretlik2400
    @ilkeretlik2400 3 ปีที่แล้ว +2

    Ağzınıza sağlık sizin sayenizde flutter çalışma mantığını öğrendim..udemy kursunuzun konularını biraz daha geniş tutar iseniz kursunuzu alacağım.ileri seviye konular...teşekkür ederim...

  • @khanbozkurt
    @khanbozkurt 2 ปีที่แล้ว +3

    Bu kadar anlaşılır bir anlatım görmedim. Gerçekten bilmek ayrı bir konu, bildiğini aktarmak apayrı bir konu. Siz ikisini de mükemmel derecede iyi yapıyorsunuz. Emeğinize sağlık.

  • @hamzakircicek3331
    @hamzakircicek3331 3 ปีที่แล้ว +6

    Ya gerçekten öğretmek çok başka birşey. Harika anlatıyorsunuz hocam.

  • @gokhanaydin7815
    @gokhanaydin7815 3 หลายเดือนก่อน

    Gayet güzel anlatım olmuş ağzınıza sağlık, 04.08.2024

  • @toggyk
    @toggyk 2 ปีที่แล้ว

    Hocam süpersin sen ya.. mükemmelsin. yorum yapmam normalde ama hayran oldum buraya.. süpersin

  • @fratkara4660
    @fratkara4660 3 ปีที่แล้ว

    Başlangıcını atmak için yeterli bir video. Güzel sade anlatım

  • @duzadam9980
    @duzadam9980 3 ปีที่แล้ว

    provider mantığını sayenizde öğrendim harikasınız.

  • @erhanaslan3572
    @erhanaslan3572 2 ปีที่แล้ว

    bu konuyu en iyi anlatan video elinize sağlık

  • @yasinmaslak1179
    @yasinmaslak1179 2 ปีที่แล้ว

    Hocam çok teknik,çok profesyonel, çok yalın:)

  • @Secret-Er
    @Secret-Er ปีที่แล้ว

    hocam senden allah razı olsun. çok teşekkürler.

  • @mehmetozbudak7657
    @mehmetozbudak7657 2 ปีที่แล้ว

    Hocam ağzına yüreğine sağlık anlatım harıka olmuş

  • @CodingWithOmer
    @CodingWithOmer 3 ปีที่แล้ว

    Gayet güzel anlatım olmuş ağzınıza sağlık

  • @musagokgoz8870
    @musagokgoz8870 4 ปีที่แล้ว

    Cok iyi basit sade anlaşılır anlatıyorsunuz lütfen firebase ile bu sekidle anlatımlar gelsin

    • @kodplanet
      @kodplanet  4 ปีที่แล้ว +1

      Teşekkürler Musa

    • @musagokgoz8870
      @musagokgoz8870 3 ปีที่แล้ว

      @@kodplanet hocam çalışırken denk geldi provider paylaştığım veri boş başta sonradan düzenlerken dolduracak kullanıcı bir türlü text icine yazmadım provider boş string taşımıyor mu?

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว

      String text= ' ' ; Şeklinde boş tanımlayabilirsin.

    • @musagokgoz8870
      @musagokgoz8870 3 ปีที่แล้ว

      @@kodplanet hocam peki futurebuilder ile dinleyip değişiklik olduğunda set etmesi mi yoksa tek tek kullanıcı adı foto hakkımda kisimlarini provider ile taşıyıp göstermek mi iyi performans açısından

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว

      @@musagokgoz8870 Senin state bilgin tek bir şey mi? bir String mesela, yoksa bir kullanıcı hakkındaki bilgiler ad,soyad,yaş gibi birden fazla veri mi? bu veriyi saklayacak ve değiştirme ekleme silme metotları olabilecek bir class oluştur, bir model oluştur yani. (Udemy kursundaki son modülde yaptığımız gibi) Bu modelden değişik kullanıcıları temsil, represent edecek objelerin olabilir böylece. Kullanıcı verisine göre hareket edecek widget'a provider ile yayınlayabilirsin. FutureBuilder işini görme, o tek seferlik işler için örneğin networkten bekliyorsun, geldi şunu göster, gelmedi bunu göster. StateManagement için StreamBuilder var, ama kullanımı biraz kafa karıştırıcı olabilir, stream yaratmak dinlemek vs.. ChangeNotifierProvider ve Consumer/Provider.of bence işini görecektir.

  • @faridahmadov5991
    @faridahmadov5991 2 ปีที่แล้ว

    Tesekkur ederim Abi

  • @Gentleman217
    @Gentleman217 2 ปีที่แล้ว

  • @ebuzersariyerlioglu3520
    @ebuzersariyerlioglu3520 ปีที่แล้ว

    Şöyle bir problemim var. ChangeNotifier ile widget ağacımın altındaki bir sayı değiştiğinde aynı sayı anasayfamda da değişsin istiyorum. Fakat anasayfam kendisini rebuild etmiyor. Hot reload'a bastığım zaman kendisini rebuild ediyor. Bu problemi nasıl çözebilirim?

  • @justforfunvideos34
    @justforfunvideos34 2 ปีที่แล้ว

    notifylisteners() haber veriyor ama rebuild özelliği var mı yoksa haber verdikleri mi rebuild yapar??

  • @ebuzersariyerlioglu3520
    @ebuzersariyerlioglu3520 ปีที่แล้ว

    Hocam consumer'ı anlattığınız videoyu bulamadım. Sanırım doğrudan shared preference a geçtiniz.

    • @kodplanet
      @kodplanet  ปีที่แล้ว

      Bu dersin detayı Udemy de aslında da o yüzden :)

  • @whodoom
    @whodoom ปีที่แล้ว +1

    1- BuildContext : A ) widget'in Widget Tree'de nerede olduğunu anlamasını sağlayan ve
    B) parent-child arası data geçişine yarayan yapI

    • @whodoom
      @whodoom ปีที่แล้ว

      2- Manipülasyon: Kendi yararı için kullanmak, kontrol etmek veya başka bir şekilde etkilemek için tasarlanmış davranış

    • @whodoom
      @whodoom ปีที่แล้ว +1

      3- Notifier ve Consumer yapılarını da Provider ile birlikte öğrenmemiz gerekiyor.
      1. Pizzanızın hazır olduğunu söyleyen zil (Notifier: Bir şeylerin değiştiğini haber verir.)
      2. Pizzanızı size getiren garson (Provider: Değişen dataya erişiminizi sağlar.)
      3. Pizzayı yiyen siz (Consumer: Datayı isteyen ve kullanan widget)
      Yani aslında Notifier, sizin state'inizin tutulduğu yer. Datanızı ve datanızı manipüle eden class'ları burada tutuyorsunuz. Provider ile yukarıdaki Cart örneğindeki gibi bu state'i widget tree'deki istediğiniz yere bağlayıp child'ların erişimine açıyorsunuz. En sonunda bu state'i kullanan ve gereken metotları çağıran widget'ler Consumer'ler oluyor.

    • @whodoom
      @whodoom ปีที่แล้ว

      4- Gereksiz rebuilt nedir peki? Diyelim ki ekranınızda rehber listeniz var ve kişilerin yanındaki favorilere ekle tuşuna bastığınızda kişinin yanındaki kalp pembe oluyor, tekrar basınca beyaz oluyor. Normal şartlarda UI kısmında değişen tek şey kalp ikonunuz, beyaz ve pembe arasında gidip gelecek. Eğer siz bir şeyleri yanlış yapar ve 500 - 1000 kişilik rehberin her pikselini tekrar tekrar güncellerseniz gereksiz rebuilt yapmış olursunuz. Küçük çaplı uygulamalarda sorun olamasa da iyi bir mühendislik pratiği açısından kötü olur ve büyük uygulamalarda yaşanacak ciddi performans sorunu sizi bekler.

    • @whodoom
      @whodoom ปีที่แล้ว

      5- import 'package:flutter/material.dart';
      import 'package:provider/provider.dart';
      import 'state_data.dart';
      void main() => runApp(
      Provider(
      create: (BuildContext context) {
      return StateDate();
      },
      child: MyApp(),
      ),
      );
      class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
      );
      }
      }
      class MyHomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return Scaffold(
      appBar: AppBar(
      title: Text('callback kullanımı'),
      ),
      body: Center(
      child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
      Expanded(child: SolWidgetA()),
      Expanded(child: SagWidgetA()),
      ],
      ),
      ),
      );
      }
      }
      class SolWidgetA extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      String sehir = Provider.of(context).sehir;
      return Container(
      color: Colors.yellow,
      child: Column(
      children: [
      Text(
      'Sol Widget',
      style: TextStyle(fontSize: 20),
      ),
      Text(
      'Sehir:$sehir ',
      style: TextStyle(fontSize: 20),
      )
      ],
      ));
      }
      }
      class SagWidgetA extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return Container(
      color: Colors.green,
      child: Column(children: [
      Text(
      'SagWidget A',
      style: TextStyle(fontSize: 20),
      ),
      SagWidgetB()
      ]),
      );
      }
      }
      class SagWidgetB extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return Container(
      height: 300,
      width: 180,
      color: Colors.purple,
      child: Column(children: [
      Text(
      'SagWidget B',
      style: TextStyle(fontSize: 20),
      ),
      SagWidgetC()
      ]),
      );
      }
      }
      class SagWidgetC extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
      return Container(
      color: Colors.white,
      height: 150,
      width: 160,
      child: Column(children: [
      Text(
      'SagWidget C',
      style: TextStyle(fontSize: 20),
      ),
      Text(
      '${Provider.of(context).sehir}',
      style: TextStyle(fontSize: 20),
      ),
      TextField(onChanged: null)
      ]),
      );
      }
      }

    • @whodoom
      @whodoom ปีที่แล้ว +1

      Provider.of(context, listen: false)
      .newCityFnk(inputSehir) //listen: false' koymasaydık bu widget sürekli sürekli rebuild edilip duracak, sistem döngüye girecek . çakılacak.

  • @oguzrakc8370
    @oguzrakc8370 4 ปีที่แล้ว +1

    Hocam udemy kursunuz hayırlı olsun. Uzun zamandır beklediğimiz bir kurstu. Kursunuzda Firebase eğitimi olacak mı? Naçizane tavsiyem ve isteğim şudur ki kapsamlı bir Firebase eğitimi eklemeniz. Zira içeriği geniş bir Firebase eğitimi bulunmamakta. Sizin güzel anlatımınızla da bizler çok şeyler öğreneceğiz. Tekrar kursunuz hayırlı olsun ve başarılarınızın devamını dilerim..

    • @kodplanet
      @kodplanet  4 ปีที่แล้ว

      Teşekkürler Oğuz, Planımda var evet gelecek.

  • @azimarslantas9326
    @azimarslantas9326 3 ปีที่แล้ว

    Hocam emeğinize sağlık . GetX Package hakkında bir açıklama ve değerlendirme videosu çekecek misiniz?

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว

      Başladık, geliyor yeni seri :)

  • @yunuskocatas8060
    @yunuskocatas8060 3 ปีที่แล้ว

    provider yerinene tum klaslarda statefull widget kullansak olmamı?

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว +1

      Provider veya benzeri bir paket kullanmadan state yönetimi elbette mümkün ama yönetilebilir değil, çok karışık olur ve uygulama büyüdükçe baş edilemez hal alır. StateManagement videolarını dikkatle izleyip takip edersen ne demek istediğimi anlayabilirsin.

    • @yunuskocatas8060
      @yunuskocatas8060 3 ปีที่แล้ว

      @@kodplanet tsk hocam tum videolarınız izlemeye calisiyourm.. çok faydalı seri ama kesek biraz daha fazla videonun olsa. TH-cam de sizin gibi kaliteli ders anlatan baska kimse görmedim.. Ins devam edersiniz serilere

  • @burakt.8465
    @burakt.8465 3 ปีที่แล้ว

    Hocam MultiProvider ne zaman kullanılır?

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว +2

      Widget ağacında aynı noktadan birden çok Provider eklemen gerektiği zaman kullanabilirsin. Kullanımı kolay, dokümanlara bakıp deneyebilirsin. Udemy kursunda uygulama üzerinde anlatmış olmalıyım, ama burada detaya giremedim

    • @burakt.8465
      @burakt.8465 3 ปีที่แล้ว +1

      @@kodplanet Hocam birçok eğitim serisi izledim. Ama en çok sizden faydalandım. Sırf size destek olmak adına an itibariyle Udemy kursunuza kaydoldum. Çok açıklayıcı anlatıyorsunuz. Firebase gibi şeyleri de kursunuza eklerseniz sevinirim.
      Bir de Udemy linkini "Hakkında" bölümüne koyarsanız, güzel olur, bazı videoların altında var, bazılarında yok gibi.

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว +1

      @@burakt.8465 Teşekkürler Burak hem güzel yorumun hem de kayıt için, şu anda Firebase authentication üzerine bir seri çekiyorum. Yakında Udemy'de ekleyeceğim. Sonra da yine cloud firestore üzerine üzerine gelecek.

  • @ertanozetken8052
    @ertanozetken8052 3 ปีที่แล้ว

    Bu video ya kadar tüm kodları yazdım. ama videoda sadece sarı ve beyaz çalışırken benim uygulamamda tüm widgetlar çalışıyor. Neden olabilir. Provider paketini mi yanlış yükledim.

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว

      Paketle ilgili olduğunu sanmam, kodu tekrar gözden geçirir misiniz?

    • @ertanozetken8052
      @ertanozetken8052 3 ปีที่แล้ว

      @@kodplanet Evet haklısınız. MyHomePage de constructor yorum içine alınmamış.

  • @doganay6667
    @doganay6667 3 ปีที่แล้ว +1

    Hocam emeğinize sağlık udemy kursunuza chatlesme uygulaması yapma ile ilgili ders yüklerseniz çok güzel olur.Almayı düşünüyorum.

    • @kodplanet
      @kodplanet  3 ปีที่แล้ว +2

      Merhaba Doğan, chat örneği çok var TH-cam'da tutoriallar. Ben bu yüzden, Udemy'de çoklu kullanıcının veritabanına anlık veri okuma yazma yaptığı bir uygulama planladım.

  • @s.tunahanustuntepe2966
    @s.tunahanustuntepe2966 3 ปีที่แล้ว

    Merhabalar hocam , String sehir = Provider.of(context).sehir; de context in altını kırmızı yakıyor nedenini anlıyamadım .Çıkan kutucukta Undefined name 'context'. (Documentation) Try correcting the name to one that is defined, or defining the name. yazmakta. Ancak Text içine provider yazdıgımda bir sorun oluşmadı

    • @vedatdemir630
      @vedatdemir630 3 ปีที่แล้ว

      düzeltebildin mi ?

    • @s.tunahanustuntepe2966
      @s.tunahanustuntepe2966 3 ปีที่แล้ว

      @@vedatdemir630 o zaman yanlis kullanim yapmistim.galiba ondan oldu

    • @ebuzersariyerlioglu3520
      @ebuzersariyerlioglu3520 ปีที่แล้ว

      BuildContext'in altına yazman gerekiyor. Muhtemelen override'ın üzerine yazdın

  • @ebuubeyd676
    @ebuubeyd676 ปีที่แล้ว

    2 aydır boşu boşuna yabancı kaynaklarda sürünmüşüm halbuki türkçe aratsam herşey olcak

  • @ademyavuzcelik2725
    @ademyavuzcelik2725 2 ปีที่แล้ว +2

    Kodu çalışmayanlar;
    pub.dev/packages/provider/example
    yukardaki örneğe bakarak ilerlersek çalışıyor. Çalışır kod aşağıda mevcut.
    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    import 'package:untitled14/state_data.dart';
    void main() => runApp(ChangeNotifierProvider(
    create: (BuildContext context) {
    return StateData();
    },
    child: MyApp()));
    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    debugShowCheckedModeBanner: false,
    home: MyHomePage(),
    );
    }
    }
    class MyHomePage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('callback kullanımı'),
    ),
    body: Row(
    mainAxisAlignment: MainAxisAlignment.start,
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
    Expanded(child: SolWidgetA()),
    Expanded(child: SagWidgetA())
    ],
    ),
    );
    }
    }
    class SolWidgetA extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Container(
    color: Colors.yellow,
    child: Column(
    children: [
    Text(
    'Sol Widget',
    style: TextStyle(fontSize: 20),
    ),
    Text(
    'Sehir: ${context.watch().sehir} ',
    style: TextStyle(fontSize: 20),
    )
    ],
    ));
    }
    }
    class SagWidgetA extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Container(
    height: 350,
    color: Colors.green,
    child: Column(children: [
    Text(
    'SagWidget A',
    style: TextStyle(fontSize: 20),
    ),
    SagWidgetB()
    ]),
    );
    }
    }
    class SagWidgetB extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Container(
    height: 200,
    width: 180,
    color: Colors.purple,
    child: Column(children: [
    Text(
    'SagWidget B',
    style: TextStyle(fontSize: 20),
    ),
    SagWidgetC()
    ]),
    );
    }
    }
    class SagWidgetC extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Container(
    color: Colors.white,
    height: 150,
    width: 160,
    child: Column(children: [
    Text(
    'SagWidget C',
    style: TextStyle(fontSize: 20),
    ),
    Text(
    'Şehir: ${context.watch().sehir} ',
    style: TextStyle(fontSize: 20),
    ),
    TextField(onChanged: (input) {
    context.read().changeSehir(input);
    })
    ]),
    );
    }
    }

  • @whodoom
    @whodoom ปีที่แล้ว

    import 'package:flutter/cupertino.dart';
    class StateDate with ChangeNotifier {
    String sehir = 'Batmani';
    String radyo = 'Best FM';
    void newCity(String city) {
    sehir = city;
    notifyListeners();
    }
    }

  • @gokhanaydin7815
    @gokhanaydin7815 3 หลายเดือนก่อน

    Gayet güzel anlatım olmuş ağzınıza sağlık