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:
```dart
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

## Kaynakça