Baştan sona Twitter'ı yazalım #1 (Flutter, Riverpod, Fpdart, Appwrite)

Gauloran

Moderasyon Ekibi Lideri
7 Tem 2013
8,191
649
Selamlar bu seride Twitter'ı yazacağız. Bu konu serinin ilk konusudur.

Konuyu anlamak için temel gereksinimler:

- Temel dart/flutter bilgisi

(Temel dart ve flutter bilgisi için bkz)
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #1
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #2
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #3
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #4
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #5
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #6
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #7
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #8
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #9
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #10
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #11
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #12
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #13
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #14
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #15
Flutter & Dart Fundamentals | Örnek Quiz Uygulaması #16
Flutter uygulamalarında debugging mantığı #17
Flutter element tree render tree mantığı
Flutter cubit mantığı fonksiyon ve event bazlı yaklaşım

Backend?

dashboard.png


- Appwrite bilgisi

Appwrite bize yardımcı olan backend kısmını halletmek için. Fakat çok fazla ayarlama yapmak gerekiyor. Biz projeyi Docker kurup Appwrite ile çalıştıracağız ancak projesini hayata geçirmek isteyenler olursa Appwrite cloud veya daha farklı docker destekleyen bir hizmet alırlarsa pek sorun yaşayacaklarını zannetmiyorum. Bu projeyi 1 sene önce Hindistanlı bir arkadaş oluşturmuş ancak çok fazla hata çıktığı için malum 1 sene de geçmiş. 1 yıl içerisinde fazla değişiklikler olmuş kodu direkt alıp ilk haliyle değişikliğe gitmeden çalıştırmak mümkün değil çünkü en başta Appwrite kendini güncellemişti projede çok fazla kritik hata vardı ki zaten Backend uygulamamızın %80'idir. Amacım bu uygulamayı baştan sona yazmak (tabii hataların hepsini gidererek) Hindistanlı arkadaşımız temelini sağlam atmış hataları çözüp üzerine ekleyeceğiz ama sıfırdan da her şeyi anlayarak yazacağız. State management yöntemi yine aynı çünkü Riverpod ile daha kolay BloC ile clean arc. uygulamak saatler sürecekti o konuda değişikliğe gitmedim. Amacımız bunu Türkçe baştan sona anlatabilmek ve projeyi bitirmek. Bunlardan yazarken bahsederim elbette

feRHAZ.png


Appwrite ile ilgili dokümantasyon:

Appwrite ile ilgili birçok hata almanız muhtemel ama çözümleri de yok değil zaten kendi dokümantasyonu da fena değil.

Açıkçası yazması ve ayaklandırması kolay bir proje değil. Hala birkaç hata alıyorum fakat çözülür dert değil.

Kullanacaklarımız (packagelar):


Kod:
  cupertino_icons: ^1.0.2[/I][/B][/FONT][/SIZE][/CENTER]
[SIZE=4][FONT=trebuchet ms][B][I][CENTER]  appwrite: ^12.0.1 //appwrite için gerekli
  flutter_svg: ^2.0.10+1 //bunu ben kullanmayacağım sanırım ama svg kullanacaksanız olur
  flutter_riverpod: ^2.5.1 //state management için riverpodu tercih ettik
  fpdart: ^1.1.0 //diğer projelerinizde de çok işinize yarayabilecek bir package
  image_picker: ^1.0.7 //resim seçme olayları
  carousel_slider: ^4.2.1 //güzel bir slider widgetı sağlıyor
  timeago: ^3.6.1 //postun ne kadar sonra atıldığını hesapladığımızda lazım
  any_link_preview: ^3.0.1 //linklenme şeysi
  like_button: ^2.0.5 //beğenme butonu için baştan sona logic oluşturmamıza gerek kalmıyor


Öncelikle projemizin son haline yakın bir hali şu şekilde:

fe5sPI.png
fe5OM8.png
fe5Pe1.png


uygulamada olan özellikler tahmin edeceğiniz üzere ama yapacağımız şeylere bir bakalım:

- kullanıcı girişi ve kayıt
- kullanıcılar post atabilir (tweet atabilir yani)
- kullanıcılar başka birinin tweetini retweetleyebilir (repost)
- kullanıcılar başka birinin tweetini beğenebilir
- kullanıcılar başka birinin tweetine yorum yazabilir
- kullanıcılar başka bir kullanıcıyı takip edebilir unf. edebilir
- kullanıcılar başka bir kullanıcıyı aratabilir
- kullanıcılar profilini düzenleyebilir bio ekleyebilir
- hashtag, link, tweetlerin yani postların içerisinde çoklu resim paylaşımı yapılabilir
- notifications (bildirim mevzuları)

Öncelikle klasör yapısından bahsedelim

feRj9D.png


klasör yapımız bu şekilde olacak. Feature first yaklaşımı diye duymuş olabilirsiniz. Özetle uygulamanın her bir özelliğini bir klasör yapısı halinde ve her bir klasörü kendi içerisinde apilere erişecek olan controllerları oluşturup tekrarlanacak olan widgetları widgets klasörüne ve kalan ui kısmını da views içerisinde yazmaya yönelik bir yapıdır.

Serinin bu konusu için yapmanız gerekenler.

1- Docker'ı yükleyin

Docker da nedir?

Docker, bir konteynerleştirme teknolojisi olarak adlandırılır. Konteynerler, uygulamaları ve onların bağımlılıklarını bağımsız ve izole bir ortamda çalıştırmak için kullanılır. Bir Docker konteyneri, tüm uygulama kodunu, kütüphaneleri ve konfigürasyon dosyalarını içerir.


feRBHk.png


2- Appwrite'ı docker içerisinde çalıştırın

Self-hosting - Docs - Appwrite

feRY9i.png


artık size uyan hangisiyse dokümantasyonda vermiş adamlar seçin hemen ben windows kullandığım için o sekmedeyim. Böylece appwrite'ı kurmuş olacaksınız. Kodu girdikten sonra enterlayın default ayarlarda yükleyin kafanız karışmasın.

feReTC.png


Ardından docker'da appwrite'ı bu şekilde göreceksiniz. Self hosting'i başardınız tarayıcınıza localhost yazarak Appwrite'ın giriş ekranı sizi artık karşılar orada Appwrite'a kayıt olun çok basit işlemlerdir. Daha sonra size projenin adını soracak istediğiniz bir ismi verin.

3- Flutter projesi oluşturun

Bu da serinin ilk kısmının yapacağınız son işlemidir. Projeyi dilerseniz klasör yapısını yukarıda attığım gibi hazır hale getirebilirsiniz veyahut yazarken klasörleri açmakla da uğraşabilirsiniz size kalmış. Şu anda giriş setup kısımlarını vs. hallettik.

Bir de unutmadan pubspec.yaml dosyamı sizinle paylaşıyorum ki flutter projesi oluşturduğunuzda package'ların sürüm farklılıklarından dolayı sıkıntı yaşamamanız için direkt alıp kopyalamayın sadece packageların sürümleri hakkında fikir sahibi olmanız için:

Kod:
name: kooginapp[/I][/B][/FONT][/SIZE][/CENTER]
[SIZE=4][FONT=trebuchet ms][B][I][CENTER]description: "A new Flutter project."

publish_to: 'none'


version: 1.0.0+1

environment:
  sdk: '>=3.2.6 <4.0.0'

dependencies:
  flutter:
    sdk: flutter


  cupertino_icons: ^1.0.2
  appwrite: ^12.0.1
  flutter_svg: ^2.0.10+1
  flutter_riverpod: ^2.5.1
  fpdart: ^1.1.0
  image_picker: ^1.0.7
  carousel_slider: ^4.2.1
  timeago: ^3.6.1
  any_link_preview: ^3.0.1
  like_button: ^2.0.5

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^2.0.0


flutter:


  uses-material-design: true


  assets:
    - assets/svgs/


Serinin bir sonraki konusunda görüşmek üzere.

 

sasorii

Asistan Moderatör
2 Mar 2023
211
97
nijerya
Selamlar bu seride Twitter'ı yazacağız. Bu konu serinin ilk konusudur.

Konuyu anlamak için temel gereksinimler:

- Temel dart/flutter bilgisi

(Temel dart ve flutter bilgisi için bkz)
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #1
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #2
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #3
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #4
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #5
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #6
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #7
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #8
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #9
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #10
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #11
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #12
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #13
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #14
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #15
Flutter & Dart Fundamentals | Örnek Quiz Uygulaması #16
Flutter uygulamalarında debugging mantığı #17
Flutter element tree render tree mantığı
Flutter cubit mantığı fonksiyon ve event bazlı yaklaşım

Backend?

dashboard.png


- Appwrite bilgisi

Appwrite bize yardımcı olan backend kısmını halletmek için. Fakat çok fazla ayarlama yapmak gerekiyor. Biz projeyi Docker kurup Appwrite ile çalıştıracağız ancak projesini hayata geçirmek isteyenler olursa Appwrite cloud veya daha farklı docker destekleyen bir hizmet alırlarsa pek sorun yaşayacaklarını zannetmiyorum. Bu projeyi 1 sene önce Hindistanlı bir arkadaş oluşturmuş ancak çok fazla hata çıktığı için malum 1 sene de geçmiş. 1 yıl içerisinde fazla değişiklikler olmuş kodu direkt alıp ilk haliyle değişikliğe gitmeden çalıştırmak mümkün değil çünkü en başta Appwrite kendini güncellemişti projede çok fazla kritik hata vardı ki zaten Backend uygulamamızın %80'idir. Amacım bu uygulamayı baştan sona yazmak (tabii hataların hepsini gidererek) Hindistanlı arkadaşımız temelini sağlam atmış hataları çözüp üzerine ekleyeceğiz ama sıfırdan da her şeyi anlayarak yazacağız. State management yöntemi yine aynı çünkü Riverpod ile daha kolay BloC ile clean arc. uygulamak saatler sürecekti o konuda değişikliğe gitmedim. Amacımız bunu Türkçe baştan sona anlatabilmek ve projeyi bitirmek. Bunlardan yazarken bahsederim elbette

feRHAZ.png


Appwrite ile ilgili dokümantasyon:

Appwrite ile ilgili birçok hata almanız muhtemel ama çözümleri de yok değil zaten kendi dokümantasyonu da fena değil.

Açıkçası yazması ve ayaklandırması kolay bir proje değil. Hala birkaç hata alıyorum fakat çözülür dert değil.

Kullanacaklarımız (packagelar):


Kod:
  cupertino_icons: ^1.0.2[/I][/B][/FONT][/SIZE][/CENTER][/I][/B][/FONT][/SIZE][/CENTER]
[SIZE=4][FONT=trebuchet ms][B][I][CENTER][SIZE=4][FONT=trebuchet ms][B][I][CENTER]  appwrite: ^12.0.1 //appwrite için gerekli
  flutter_svg: ^2.0.10+1 //bunu ben kullanmayacağım sanırım ama svg kullanacaksanız olur
  flutter_riverpod: ^2.5.1 //state management için riverpodu tercih ettik
  fpdart: ^1.1.0 //diğer projelerinizde de çok işinize yarayabilecek bir package
  image_picker: ^1.0.7 //resim seçme olayları
  carousel_slider: ^4.2.1 //güzel bir slider widgetı sağlıyor
  timeago: ^3.6.1 //postun ne kadar sonra atıldığını hesapladığımızda lazım
  any_link_preview: ^3.0.1 //linklenme şeysi
  like_button: ^2.0.5 //beğenme butonu için baştan sona logic oluşturmamıza gerek kalmıyor



Öncelikle projemizin son haline yakın bir hali şu şekilde:

fe5sPI.png
fe5OM8.png
fe5Pe1.png


uygulamada olan özellikler tahmin edeceğiniz üzere ama yapacağımız şeylere bir bakalım:

- kullanıcı girişi ve kayıt
- kullanıcılar post atabilir (tweet atabilir yani)
- kullanıcılar başka birinin tweetini retweetleyebilir (repost)
- kullanıcılar başka birinin tweetini beğenebilir
- kullanıcılar başka birinin tweetine yorum yazabilir
- kullanıcılar başka bir kullanıcıyı takip edebilir unf. edebilir
- kullanıcılar başka bir kullanıcıyı aratabilir
- kullanıcılar profilini düzenleyebilir bio ekleyebilir
- hashtag, link, tweetlerin yani postların içerisinde çoklu resim paylaşımı yapılabilir
- notifications (bildirim mevzuları)

Öncelikle klasör yapısından bahsedelim

feRj9D.png


klasör yapımız bu şekilde olacak. Feature first yaklaşımı diye duymuş olabilirsiniz. Özetle uygulamanın her bir özelliğini bir klasör yapısı halinde ve her bir klasörü kendi içerisinde apilere erişecek olan controllerları oluşturup tekrarlanacak olan widgetları widgets klasörüne ve kalan ui kısmını da views içerisinde yazmaya yönelik bir yapıdır.

Serinin bu konusu için yapmanız gerekenler.

1- Docker'ı yükleyin

Docker da nedir?

Docker, bir konteynerleştirme teknolojisi olarak adlandırılır. Konteynerler, uygulamaları ve onların bağımlılıklarını bağımsız ve izole bir ortamda çalıştırmak için kullanılır. Bir Docker konteyneri, tüm uygulama kodunu, kütüphaneleri ve konfigürasyon dosyalarını içerir.


feRBHk.png


2- Appwrite'ı docker içerisinde çalıştırın

Self-hosting - Docs - Appwrite

feRY9i.png


artık size uyan hangisiyse dokümantasyonda vermiş adamlar seçin hemen ben windows kullandığım için o sekmedeyim. Böylece appwrite'ı kurmuş olacaksınız. Kodu girdikten sonra enterlayın default ayarlarda yükleyin kafanız karışmasın.

feReTC.png


Ardından docker'da appwrite'ı bu şekilde göreceksiniz. Self hosting'i başardınız tarayıcınıza localhost yazarak Appwrite'ın giriş ekranı sizi artık karşılar orada Appwrite'a kayıt olun çok basit işlemlerdir. Daha sonra size projenin adını soracak istediğiniz bir ismi verin.

3- Flutter projesi oluşturun

Bu da serinin ilk kısmının yapacağınız son işlemidir. Projeyi dilerseniz klasör yapısını yukarıda attığım gibi hazır hale getirebilirsiniz veyahut yazarken klasörleri açmakla da uğraşabilirsiniz size kalmış. Şu anda giriş setup kısımlarını vs. hallettik.

Bir de unutmadan pubspec.yaml dosyamı sizinle paylaşıyorum ki flutter projesi oluşturduğunuzda package'ların sürüm farklılıklarından dolayı sıkıntı yaşamamanız için direkt alıp kopyalamayın sadece packageların sürümleri hakkında fikir sahibi olmanız için:

Kod:
name: kooginapp[/I][/B][/FONT][/SIZE][/CENTER][/I][/B][/FONT][/SIZE][/CENTER]
[SIZE=4][FONT=trebuchet ms][B][I][CENTER][SIZE=4][FONT=trebuchet ms][B][I][CENTER]description: "A new Flutter project."

publish_to: 'none'


version: 1.0.0+1

environment:
  sdk: '>=3.2.6 <4.0.0'

dependencies:
  flutter:
    sdk: flutter


  cupertino_icons: ^1.0.2
  appwrite: ^12.0.1
  flutter_svg: ^2.0.10+1
  flutter_riverpod: ^2.5.1
  fpdart: ^1.1.0
  image_picker: ^1.0.7
  carousel_slider: ^4.2.1
  timeago: ^3.6.1
  any_link_preview: ^3.0.1
  like_button: ^2.0.5

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^2.0.0


flutter:


  uses-material-design: true


  assets:
    - assets/svgs/



Serinin bir sonraki konusunda görüşmek üzere.
Hocam sen nasıl bir codersin be
Eline sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.