# Flutter
Flutter, Google tarafından oluşturulan açık kaynaklı bir UI yazılım geliştirme kitidir. Android, iOS, Windows, Mac, Linux ve web için uygulamalar geliştirmek için kullanılıyor. Flutter'ın ilk sürümü "Sky" olarak biliniyordu ve Android işletim sisteminde çalışıyordu. Flutter ilk olarak 2015 Dart geliştirici zirvesinde tanıtıldı. Tanıtımında sabit bir şekilde saniyede 120 FPS çalışan uygulamalar geliştirilebileceği belirtildi. 4 Aralık 2018'de Flutter 1.0, Flutter Live etkinliğinde ilk "kararlı sürüm" olarak yayımlandı. 11 Aralık 2019'da Flutter Interactive etkinliğinde Flutter 1.12 yayımlandı.
6 Mayıs 2020'de, 2.8 sürümündeki Dart SDK ve 1.17.0 sürümündeki Flutter, Metal API'a desteğin eklendiği ve iOS cihazlarındaki (yaklaşık %50) ana widget'larındaki performansı büyük ölçüde artırdı. Ağ etkinlikleri izleme aracı ve çok daha fazlası eklendi.


## Tarihçe ve Sürüm Gelişimi.
  - Flutter, Google tarafından geliştirilmeye başlanmış ve ilk olarak 2015 yılında Dart geliştirici zirvesinde “Sky” adıyla tanıtılmıştır.
  - 4 Aralık 2018: Flutter 1.0 sürümü yayımlanarak kararlı hâle gelmiştir.
  - 2021: Flutter 2.0 yayımlandı. Bu sürüm ile web, masaüstü ve yerleşik cihaz desteği “kararlı” olmasa da “beta” veya “dev” kanallarında desteklenmeye başlandı.
  - 3 Mayıs 2023: Google, Flutter 3.10 sürümünü duyurdu. Bu sürüm, Dart 3 ile birlikte geldi ve platformlar arası geliştirme araçlarını büyük ölçüde iyileştirdi.


## Dart Programlama Dili.
Flutter, Dart adlı programlama dili ile yazılır. Dart, yine Google tarafından geliştirilmiş, istemci tarafı odaklı, C tarzı sözdizimine sahip, JIT (Just-In-Time) ve AOT (Ahead-Of-Time) derleyicilerini destekleyen bir programlama dilidir.
Dart sayesinde:
  - Geliştirme sürecinde “hot reload” özelliği ile anında güncellemeler görülebilir.
  - AOT derleme ile yüksek performanslı, native (yerel) kodlar üretilebilir.


## Teknik Mimari ve Bileşenler.
Flutter Motoru
  - C++ ile yazılmıştır.
  - Grafik işlemleri için Skia grafik motorunu kullanır.
  - Platforma özgü API'lerle (kamera, GPS, dosya sistemi gibi) iletişimi sağlayan platform kanallarını içerir.
Widget Sistemi
  - Flutter’ın temel yapı taşı “widget”lardır.
  - StatelessWidget ve StatefulWidget türleriyle kullanıcı arayüzleri inşa edilir.
  - Material Design (Android) ve Cupertino (iOS) stillerinde önceden tanımlı widget’lar sunar.
Rendering (Çizim)
  - Flutter, platformun yerel UI sistemini kullanmak yerine kendi widget'larını çizer. Bu, daha tutarlı bir görünüm sağlar.
  - Skia motoru sayesinde yüksek performans elde edilir.


## Platform Desteği.
Flutter; aşağıdaki platformlarda çalışabilir:
  - Android
  - iOS
  - Web (HTML/CSS/CanvasKit ile)
  - Windows
  - macOS
  - Linux
  - Embedded sistemler (Raspberry Pi gibi)
Masaüstü desteği başlangıçta sadece deneyseldi; ancak Flutter 3.0 itibarıyla Windows, macOS ve Linux için kararlı destek sunulmuştur.


## Flutter ile Geliştirilen Bazı Uygulamalar.
  - Google Ads
  - Alibaba
  - BMW
  - eBay Motors
  - Reflectly
  - Hamilton Musical App


#### Flutter’ın Avantajları.
  - Tek bir kod tabanıyla çoklu platformlara uygulama geliştirme imkânı
  - Hot reload ile hızlı geliştirme süreci
  - Yüksek performans (native benzeri)
  - Zengin widget kütüphanesi
  - Aktif topluluk ve düzenli güncellemeler


#### Rakipleri.
Flutter, aşağıdaki diğer çapraz platform araçlarıyla rekabet halindedir:
  - React Native (Meta)
  - Xamarin (Microsoft)
  - SwiftUI (Apple, sadece iOS/macOS)
  - Kotlin Multiplatform (JetBrains)


## Framework Mimarisi.
Flutter'ın ana bileşenleri şunlardır:
 - Dart platformu
  - Flutter motoru
  - Temel kütüphane
  - Tasarıma özel widget'lar


## Merhaba Dünya Örneği.
Flutter kullanılarak yazılmış bir "merhaba dünya" örneği:
import 'package:flutter/material.dart';
void main() => runApp(HelloWorldApp());
class HelloWorldApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 //Uygulama arayüzünde gösterilecek olan alan.
 // MaterialApp veya Scaffold açılabilir, yahut metot ile farklı bir yerden inşa edilebilir.
 return MaterialApp(
 title: 'Merhaba Dünya Uygulaması',
 //title ile uygulamamızın ismi belirlenir (telefon ana ekranında görünecek olan isim).
 home: Scaffold(
 //AppBar() isimli widget otomatik olarak uygulamanın en üstüne bir bar oluşturur.
 appBar: AppBar(
 title: Text('Merhaba'),
 // Uygulama barına "Merhaba" yazdırır
 //Center isimli widget ile yazıyı sayfa ortasına yerleştiriyoruz.
 body: Center(
 child: Text('Merhaba Dünya'),
 // ekrana "Merhaba Dünya" yazdırır.
 ),


## Yararlı Bağlantılar.
  - Resmi web sitesi