Sıfırdan İleri Seviye Flutter Projesi – 1

Merhaba arkadaşlar, sizlerle sıfırdan ileri seviye flutter eğitimine örnek teşkil edecek bir proje yapacağım. Her fonksiyon, dosya adım adım anlatılarak güzel bir eğitim serisi olacaktır.

pubspec.yml, Dart programlama dilini kullanan projelerde kullanılan bir dosyadır. Bu dosya, bir Dart paketinin bağımlılıklarını ve proje yapılandırmasını tanımlamak için kullanılır. Dart dilinin paket yöneticisi olan Pub, pubspec.yml dosyasını kullanarak proje bağımlılıklarını yönetir.

pubspec.yml dosyası, proje kök dizininde bulunur ve YAML (YAML Ain’t Markup Language) formatında yazılır. Bu dosya, projenin adını, sürümünü, bağımlılıklarını, kaynak dosyalarını ve diğer yapılandırma ayarlarını içerir.

name: harpia_project
description: "A new Flutter project."
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.0.0+1

environment:
sdk: '>=2.18.6 <3.13.1'

# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`. Alternatively,
# dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies:
flutter:
sdk: flutter

expansion_tile_card: ^3.0.0
shared_preferences: ^2.2.1
font_awesome_flutter: ^10.5.0
cupertino_icons: ^1.0.2
flutter_svg: ^2.0.7
google_fonts: ^6.1.0
dio: ^5.3.2
get_storage: ^2.0.3
package_info_plus: ^4.1.0
dropdown_button2: ^2.3.9
carousel_slider: ^4.2.1
flutter_randomcolor: ^1.0.14
provider: ^6.0.5
crypto: ^3.0.1
smooth_page_indicator: ^1.0.0+2
animate_do : any
connectivity_plus: ^2.3.0
permission_handler: ^10.2.0
syncfusion_flutter_charts: ^23.1.41
flutter_colorpicker: ^1.0.3
device_info_plus: ^9.1.0
flutter_blue: ^0.8.0
flutter_pw_validator: ^1.4.2
lottie: ^2.6.0
webview_flutter: ^2.0.14
numberpicker: ^2.1.2
fluttertoast: ^8.2.2
screenshot: ^2.1.0
vibration: ^1.8.3

flutter_localizations:
sdk: flutter
intl: ^0.18.1
flutter_screenutil: ^5.9.0
easy_localization: ^3.0.3

# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.

dev_dependencies:
flutter_test:
sdk: flutter

# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^2.0.0

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter packages.
flutter:

# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true

assets:
- assets/images/
- assets/translations/
- assets/images/countries/
- assets/images/categories/
- assets/file_tr_terms.html
- assets/file_tr_policy.html
- assets/file_en_terms.html
- assets/file_en_policy.html
- assets/file_fr_terms.html
- assets/file_fr_policy.html
- assets/file_zh_terms.html
- assets/file_zh_policy.html

fonts:
- family: "Roboto"
fonts:
- asset: "assets/fonts/roboto_bold.ttf"
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg

# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware

# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages

# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages

pubspec.yaml dosyasının daha detaylı bir açıklaması:

  • name: Projenin adını belirtir. Bu, benzersiz bir isim olmalıdır ve projenizi diğer projelerden ayırmak için kullanılır. Örneğin, harpia_project olarak adlandırılmıştır.
  • description: Projenin açıklamasını içerir. Bu, projenin amacını veya işlevselliğini kısaca belirtmek için kullanılır. Örneğin, “A new Flutter project.” olarak belirtilmiştir.
  • publish_to: Bu satır, paketin yanlışlıkla flutter pub publish kullanılarak pub.dev’e gönderilmesini önler. Bu örnekte “none” olarak ayarlanmıştır, yani paket pub.dev’e gönderilmeyecektir.
  • version: Uygulamanın sürüm numarasını ve yapı numarasını belirtir. Sürüm numarası üç nokta ile ayrılmış üç sayıdan oluşur (örneğin 1.2.3). Yapı numarası ise sürüm numarasından sonra artı işareti (+) ile ayrılan bir sayıdır. Örneğin, “1.0.0+1” olarak belirtilmiştir.
  • environment: Projede kullanılan Flutter SDK sürümünü belirtir. Bu bölümde, projenin minimum ve maksimum kullanılabilir Flutter SDK sürümleri belirtilir. Örneğin, sdk: '>=2.18.6 <3.13.1' olarak belirtilmiştir, yani en az 2.18.6 sürümüne sahip olan ve 3.13.1 sürümünden önceki herhangi bir sürümü kullanan Flutter SDK’ya izin verilir.
  • dependencies: Projede kullanılan paketlerin ve bağımlılıkların listesini içerir. Her bir bağımlılık, paketin adını ve versiyonunu belirtir. Örneğin, flutter paketi Flutter SDK’sını, shared_preferences paketi cihazda kalıcı veri depolamak için kullanılır, google_fonts paketi özel yazı tiplerini kullanmak için kullanılır. Ayrıca, bazı paketlerin belirli bir versiyon aralığına (^ veya >=) sahip olduğu görülmektedir.
  • dev_dependencies: Geliştirme sırasında kullanılan paketlerin ve bağımlılıkların listesini içerir. Bu bağımlılıklar, genellikle test amaçlı veya geliştirme sırasında kullanılan araçlar ve yardımcı paketlerdir. Örneğin, flutter_test paketi, Flutter projenizin birim testlerini çalıştırmak için kullanılır.
  • flutter: Flutter özelinde yapılandırmaları içerir. Bu bölümde, uygulamanın kullanacağı asset’ler (assets bölümü) ve özel fontlar (fonts bölümü) tanımlanır. Asset’ler, uygulamanın kullanacağı görüntüler, videolar, ses dosyaları ve diğer kaynak dosyalarını içerir. Özel fontlar ise uygulamada kullanılacak özel yazı tiplerini tanımlar. Ayrıca, uses-material-design özelliği de kullanılarak Material Design ikonlarının projede kullanılacağı belirtilir.

Bu bölüm, projede kullanılacak harici paketleri ve bu paketlerin sürüm numaralarını içerir. İşte dependencies bölümündeki bazı yaygın kullanılan paketlerin açıklamaları:

  • flutter: Bu, Flutter SDK’nın kendisini temsil eder. Projenin Flutter SDK’ya bağımlı olduğunu belirtmek için kullanılır.
  • cupertino_icons: Bu paket, iOS ikon setini kullanmanızı sağlar. Flutter uygulamalarında iOS stili ikonlar kullanmak istediğinizde genellikle bu paketi eklersiniz.
  • http: Bu paket, HTTP isteklerini yapmak ve yanıtları işlemek için kullanılır. Web API’larıyla iletişim kurmak veya verileri sunucudan almak gibi HTTP istemcisi işlevleri gerçekleştirmek için kullanılabilir.
  • shared_preferences: Bu paket, basit veri depolama işlemleri için kullanılır. Örneğin, uygulamada kullanıcı tercihlerini, oturum durumunu veya küçük veri parçacıklarını depolamak için kullanılabilir.
  • google_fonts: Bu paket, Google Fonts hizmetinden yazı tiplerini kullanmanızı sağlar. Farklı yazı tiplerini uygulamanıza eklemek ve kullanmak için kullanılabilirsiniz.
  • provider: Bu paket, Flutter uygulamalarında durum yönetimi için kullanılan birinci sınıf bir pakettir. Veri akışını sağlamak ve uygulamanızın farklı widget’lar arasında veri paylaşmasını kolaylaştırmak için kullanılabilir.
  • expansion_tile_card, Flutter’da kullanılabilen bir pakettir. Bu paket, genişletilebilir bir kart bileşeni sağlar. expansion_tile_card, başlık ve içerik olmak üzere iki kısımdan oluşan bir kartı temsil eder. Başlık kısmı genellikle kullanıcıya bir özet veya başlık gösterirken, içerik kısmı daha fazla ayrıntıyı veya gizli bilgileri görüntüler. expansion_tile_card, genellikle bir liste içinde kullanılır ve kullanıcılar başlığı tıklayarak içeriği genişletebilir veya daraltabilir. Başlık tıklandığında, kartın boyutu otomatik olarak ayarlanır ve içerik görüntülenir veya gizlenir. Bu paket, kullanıcı arayüzünde genişletilebilir veya daraltılabilir bir kart yapısı oluşturmak için kullanışlıdır. Özellikle, daha fazla ayrıntıyı kullanıcılara sunmak veya gizli içeriği göstermek için kullanılabilir.
  • font_awesome_flutter, Flutter uygulamalarında popüler Font Awesome ikonlarını kullanmak için kullanılan bir pakettir. Font Awesome, çeşitli ikonları içeren bir ikon kütüphanesidir ve uygulama geliştiricilerine çeşitli ikonları kolayca kullanma imkanı sağlar. font_awesome_flutter paketi, Font Awesome ikonlarını Flutter uygulamalarına entegre etmek için özel olarak oluşturulmuştur. Bu paket, Font Awesome ikonlarının Flutter ikonlarına dönüştürülmesini sağlar ve bu ikonları kullanmanızı kolaylaştırır.
  • flutter_svg, Flutter uygulamalarında SVG (Scalable Vector Graphics) dosyalarını kullanmak için kullanılan bir pakettir. SVG, vektör tabanlı grafikleri tanımlamak için kullanılan bir XML tabanlı dosya formatıdır. flutter_svg paketi, SVG dosyalarını Flutter uygulamalarında görüntülemek, özelleştirmek ve etkileşimli hale getirmek için kullanılabilir. flutter_svg paketi, SVG dosyalarını Flutter’ın widget ağacına dönüştürür ve bu SVG dosyalarını Flutter uygulamalarında kullanılabilen standart Flutter widget’ları olarak görüntüler.
  • dio, Flutter uygulamalarında HTTP istekleri yapmak için kullanılan popüler bir pakettir. Dio, hızlı, esnek ve güçlü bir HTTP istemci kütüphanesidir ve çeşitli platformlarda (iOS, Android, web vb.) kullanılabilir. dio, asenkron HTTP istekleri yapmayı sağlar ve aynı zamanda dosya indirme, yükleme, ilerleme takibi, oturum yönetimi, ara kesme, hata işleme ve diğer çeşitli özellikleri destekler. Ayrıca, JSON dönüşümü yapma, istekleri iptal etme ve zaman aşımı ayarları gibi kullanışlı işlevlere de sahiptir.
  • get_storage, Flutter uygulamalarında basit ve hızlı bir şekilde yerel (local) veri depolama işlemleri yapmak için kullanılan bir pakettir. Bu paket, ana bellek veya disk üzerinde veri depolamak için kullanılabilir ve çeşitli veri tiplerini destekler. get_storage, SQLite veya SharedPreferences gibi diğer veritabanı veya veri depolama yöntemlerine kıyasla daha hafif bir çözümdür. Hızlı ve basit bir API sağlar ve verileri key-value (anahtar-değer) çiftleri olarak depolar.
  • package_info_plus, Flutter uygulamalarında cihazın paket bilgilerine erişmek için kullanılan bir pakettir. Bu paket, uygulamanın paket adı, sürümü, başlatma ikonu gibi bilgilere erişmek için kullanılır. Ayrıca, uygulamanın kurulu olduğu platforma özgü bilgilere de erişim sağlar. package_info_plus paketi, Flutter uygulamasının pubspec.yaml dosyasında tanımlanan version, name ve description gibi bilgileri alır ve bu bilgilere programatik olarak erişim sağlar. Ayrıca, uygulamanın çalıştığı platforma özgü bilgilere de erişim imkanı sunar.
  • carousel_slider, Flutter’da kullanılan bir pakettir ve kullanıcıya bir dizi öğeyi yatay veya dikey bir kaydırma (carousel) şeklinde sunmak için kullanılır. Bu paket, görüntü, metin veya herhangi bir özelleştirilmiş widget gibi öğeleri bir dizi halinde göstermek için kullanılabilir. carousel_slider paketi, kullanıcıya kaydırılabilir bir slayt gösterisi sunmak için kullanışlı bir API sağlar. Özel geçiş efektleri, otomatik oynatma, sayfalama noktaları ve diğer özelleştirme seçenekleri gibi çeşitli özellikleri destekler.
  • crypto, Flutter ve diğer birçok programlama dilinde kullanılan bir kriptografi kütüphanesidir. Kriptografi, verilerin güvenliği, gizliliği ve bütünlüğü ile ilgilenen bir alan olarak tanımlanabilir. Kriptografi, şifreleme, şifre çözme, dijital imzalama, kimlik doğrulama ve güvenli iletişim gibi işlemleri gerçekleştirmek için kullanılır. crypto kütüphanesi, Flutter uygulamalarında kriptografik işlemler gerçekleştirmek için kullanılabilir. Bu kütüphane, çeşitli şifreleme algoritmalarını, karma işlevlerini (hash functions), HMAC’leri (Hash-based Message Authentication Code), dijital imzaları ve diğer kriptografik araçları sağlar.
  • smooth_page_indicator, Flutter’da kullanılan bir pakettir ve sayfalar arasında gezinme işaretçileri oluşturmayı sağlar. Bu paket, kullanıcıya kaydırılabilir bir sayfa görünümünde hangi sayfada olduğunu göstermek için kullanılan animasyonlu ve özelleştirilebilir göstergeler sunar.
  • animate_do, Flutter’da kullanılan bir pakettir ve animasyonlu efektler eklemek için kullanılır. Bu paket, UI öğelerine giriş, çıkış veya diğer animasyonlu geçiş efektlerini uygulamak için kolay bir yol sağlar.
  • connectivity_plus, Flutter’da kullanılan bir pakettir ve cihazın ağ bağlantısının durumunu izlemek ve ağ değişikliklerini algılamak için kullanılır. Bu paket, internet bağlantısıyla ilgili bilgileri almak ve ağdurumu değişikliklerine tepki vermek için kullanışlı bir API sağlar.
  • permission_handler, Flutter’da kullanılan bir pakettir ve kullanıcının izinlerini yönetmek için kullanılır. Bu paket, uygulamanın belirli işlevlerini kullanırken kullanıcılardan izin talep etmek ve izin durumunu kontrol etmek için kullanışlı bir API sağlar.
  • syncfusion_flutter_charts, Flutter’da kullanılan bir pakettir ve etkileyici ve interaktif grafikler oluşturmak için kullanılır. Bu paket, çeşitli grafik türlerini destekleyerek verileri görsel olarak temsil etmek için bir dizi özelleştirilebilir grafik bileşeni sağlar.
  • flutter_colorpicker, Flutter’da kullanılan bir pakettir ve kullanıcının renk seçimini kolaylaştırmak için kullanılır. Bu paket, renk seçici bileşenlerini içerir ve kullanıcının istediği renkleri seçmesine ve ayarlamasına olanak tanır.
  • device_info_plus, Flutter’da kullanılan bir pakettir ve cihazın bilgilerine erişmek için kullanılır. Bu paket, işletim sistemi, cihaz modeli, cihaz adı, cihaz ID’si ve diğer cihaz özellikleri gibi bilgilere erişmek için bir dizi API sağlar.
  • flutter_blue, Flutter’da Bluetooth Low Energy (BLE) cihazlarına erişmek için kullanılan bir pakettir. Bu paket, Flutter uygulamalarının BLE cihazlarıyla iletişim kurmasını sağlar ve BLE özelliklerini kullanarak cihazlarla etkileşime geçebilir.
  • flutter_pw_validator, Flutter’da kullanılan bir pakettir ve şifre doğrulama/validasyon işlemleri için yardımcı fonksiyonlar sağlar. Bu paket, kullanıcıların belirli bir şifre formatını karşılayıp karşılamadığını kontrol etmek için kullanılabilir.
  • Lottie, animasyonların Flutter, iOS, Android ve Web gibi platformlarda oynatılması için kullanılan bir formattır. Lottie, Airbnb tarafından geliştirilmiş ve açık kaynak olarak sunulmuştur. Lottie, animasyonları JSON formatında saklar ve bu animasyonları platformlar arasında paylaşılabilir hale getirir. Lottie’nin en büyük avantajlarından biri, animasyonların vektör tabanlı olmasıdır. Bu sayede animasyonlar, farklı ekran boyutlarına ve çözünürlüklere uyum sağlar ve piksel yoğunluğundan etkilenmez. Ayrıca, Lottie animasyonları küçük boyutludur ve yüksek performanslıdır. Lottie animasyonları, tasarımcılar tarafından Adobe After Effects, Adobe Illustrator veya Haiku gibi araçlar kullanılarak oluşturulur. Animasyonlar daha sonra JSON formatına dönüştürülerek uygulamalarda kullanılmak üzere entegre edilir. Flutter’da Lottie animasyonlarını oynatmak için lottie adlı bir Flutter paketi bulunur. Bu paket, Lottie animasyonlarını Flutter uygulamalarına entegre etmenizi sağlar. Animasyonları yükleyebilir, oynatabilir, duraklatabilir ve animasyon durumunu kontrol edebilirsiniz.
  • webview_flutter, Flutter’da yerleşik bir web tarayıcısı görüntülemek için kullanılan bir pakettir. Bu paket, Flutter uygulamalarında bir web sayfasını tam ekran veya bir widget içinde görüntülemek ve etkileşimde bulunmak için kullanılır.
  • numberpicker, Flutter’da sayıları seçmek veya belirlemek için kullanılan bir widget veya pakettir. Bu widget veya paket, kullanıcının bir dizi sayı arasında gezinmesine ve istediği sayıyı seçmesine olanak tanır.
  • fluttertoast, Flutter uygulamalarında kullanıcıya geçici bildirimler veya tost mesajları göstermek için kullanılan bir pakettir. Bu paket, kullanıcılara hızlı ve basit bir şekilde mesajlar göstermek için pop-up benzeri bildirimler sağlar.
  • Screenshot, bir cihazın ekranının anlık bir görüntüsünün alınması işlemidir. Bir ekran görüntüsü veya ekran yakalama olarak da adlandırılır. Bu işlem, kullanıcıların anlık ekran görüntülerini kaydetmelerini veya paylaşmalarını sağlar. Ekran görüntüleri, bir cihazın ekranında görünen tüm içeriği, metinleri, görüntüleri, uygulama arayüzlerini ve diğer görsel öğeleri içerir. Bir cihazın ekran görüntüsü, genellikle bir resim dosyası olarak kaydedilir ve daha sonra kullanıcı tarafından istenilen şekilde kullanılabilir.
  • Vibration, bir cihazın titreşimli bir geribildirim sağlaması işlemidir. Bir cihazın titreşimi, kullanıcıya dokunsal veya duyusal bir geri bildirim sağlar. Titreşim, bir cihazın motorunu kullanarak hızlı bir şekilde sallanmasıyla oluşturulur.
assets:
- assets/images/
- assets/translations/
- assets/images/countries/
- assets/images/categories/
- assets/file_tr_terms.html
- assets/file_tr_policy.html
- assets/file_en_terms.html
- assets/file_en_policy.html
- assets/file_fr_terms.html
- assets/file_fr_policy.html
- assets/file_zh_terms.html
- assets/file_zh_policy.html

Yukarıdaki liste, bir projenin varlıklarının bir kısmını temsil eder. Varlıklar, bir Flutter uygulamasında kullanılan dosya veya klasörlerdir ve uygulama tarafından erişilebilir olması için projeye dahil edilir. Bu varlıklar, genellikle görüntüler, metin dosyaları, çeviri dosyaları ve diğer statik veriler gibi kaynakları içerir.

Aşağıda, listedeki her bir varlık kategorisini açıklamaya çalışayım:

  • assets/images/: Bu klasör, uygulamada kullanılan görüntülerin depolandığı bir klasördür. Bu klasördeki görüntüler, uygulama tarafından kullanılarak görüntülenebilir veya arayüzdeki görsel öğelerde kullanılabilir.
  • assets/translations/: Bu klasör, uygulamanın çoklu dil desteği için kullanılan çeviri dosyalarını içerir. Çeşitli dillerde kullanılan metinlerin çevirileri bu klasör altında saklanır.
  • assets/images/countries/: Bu klasör, ülke bayrakları veya ülke simgeleri gibi ülke temalı görüntüleri içerir. Bu görüntüler, uygulamanın kullanıcı arayüzünde ülke seçimi gibi işlevlerde kullanılabilir.
  • assets/images/categories/: Bu klasör, uygulamanın kategori veya etiket temalı görüntülerini içerir. Örneğin, bir e-ticaret uygulamasında ürün kategorilerini göstermek için kullanılan simgeler bu klasörde yer alabilir.
  • assets/file_tr_terms.html, assets/file_tr_policy.html, assets/file_en_terms.html, vb.: Bu dosyalar, kullanım şartları ve gizlilik politikası gibi metin tabanlı belgeleri içerir. Her dil için ayrı bir dosya bulunur ve bu dosyalar uygulama içinde görüntülenebilir veya kullanıcılara sunulabilir.

Bu varlık yapısı, genellikle Flutter projelerinde kullanılan bir düzendir. Varlıklar, projenin pubspec.yaml dosyasında belirtilir ve uygulama tarafından kullanılmak üzere projeye dahil edilir. Bu sayede, uygulama çalışırken bu varlıklara erişilebilir ve kullanılabilir.

Yorum bırakın