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...
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.
@@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 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
@@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.
Şö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?
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.
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.
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.
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..
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.
@@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
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
@@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.
@@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.
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.
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.
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ı
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...
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.
Ya gerçekten öğretmek çok başka birşey. Harika anlatıyorsunuz hocam.
Gayet güzel anlatım olmuş ağzınıza sağlık, 04.08.2024
Hocam süpersin sen ya.. mükemmelsin. yorum yapmam normalde ama hayran oldum buraya.. süpersin
Başlangıcını atmak için yeterli bir video. Güzel sade anlatım
provider mantığını sayenizde öğrendim harikasınız.
bu konuyu en iyi anlatan video elinize sağlık
Hocam çok teknik,çok profesyonel, çok yalın:)
hocam senden allah razı olsun. çok teşekkürler.
Hocam ağzına yüreğine sağlık anlatım harıka olmuş
Gayet güzel anlatım olmuş ağzınıza sağlık
Cok iyi basit sade anlaşılır anlatıyorsunuz lütfen firebase ile bu sekidle anlatımlar gelsin
Teşekkürler Musa
@@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?
String text= ' ' ; Şeklinde boş tanımlayabilirsin.
@@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
@@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.
Tesekkur ederim Abi
Şö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?
notifylisteners() haber veriyor ama rebuild özelliği var mı yoksa haber verdikleri mi rebuild yapar??
Hocam consumer'ı anlattığınız videoyu bulamadım. Sanırım doğrudan shared preference a geçtiniz.
Bu dersin detayı Udemy de aslında da o yüzden :)
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
2- Manipülasyon: Kendi yararı için kullanmak, kontrol etmek veya başka bir şekilde etkilemek için tasarlanmış davranış
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.
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.
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)
]),
);
}
}
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.
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..
Teşekkürler Oğuz, Planımda var evet gelecek.
Hocam emeğinize sağlık . GetX Package hakkında bir açıklama ve değerlendirme videosu çekecek misiniz?
Başladık, geliyor yeni seri :)
provider yerinene tum klaslarda statefull widget kullansak olmamı?
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.
@@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
Hocam MultiProvider ne zaman kullanılır?
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
@@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.
@@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.
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.
Paketle ilgili olduğunu sanmam, kodu tekrar gözden geçirir misiniz?
@@kodplanet Evet haklısınız. MyHomePage de constructor yorum içine alınmamış.
Hocam emeğinize sağlık udemy kursunuza chatlesme uygulaması yapma ile ilgili ders yüklerseniz çok güzel olur.Almayı düşünüyorum.
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.
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ı
düzeltebildin mi ?
@@vedatdemir630 o zaman yanlis kullanim yapmistim.galiba ondan oldu
BuildContext'in altına yazman gerekiyor. Muhtemelen override'ın üzerine yazdın
2 aydır boşu boşuna yabancı kaynaklarda sürünmüşüm halbuki türkçe aratsam herşey olcak
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);
})
]),
);
}
}
teşekkürler
import 'package:flutter/cupertino.dart';
class StateDate with ChangeNotifier {
String sehir = 'Batmani';
String radyo = 'Best FM';
void newCity(String city) {
sehir = city;
notifyListeners();
}
}
Gayet güzel anlatım olmuş ağzınıza sağlık