← Blog
MOBİLMOBILE·13 EYLÜL 2026SEP 13, 2026·8 DK OKUMA8 MIN READ

iPhone Duo çıktı: Flutter geliştiricisi olarak ne yapmanız, ne beklemeniz gerekiyor?iPhone Duo is here: what Flutter developers should do, and what to expect

Apple'ın 9 Eylül'de duyurduğu ilk katlanabilir iPhone'u 23 Ekim'de raflarda. Duyuruyla birlikte geliştirici forumları hareketlendi ve tek bir soru gündemin üstüne oturdu: uygulamayı çift ekrana göre yeniden yazmak gerekecek mi? Flutter özelinde cevap kısa: hayır — ama bugün yapabileceğiniz şeyler var ve bunların çoğu zaten elinizde.

Apple's first foldable iPhone, announced on 9 September, ships on 23 October. Developer forums lit up the same day, and one question rose above the rest: will we have to rewrite the app for a dual screen? For Flutter the answer is short: no — but there is work to do today, and most of the tools are already in your hands.

Naylalabs · MühendislikEngineering
Snapshot: Bu yazı 13 Eylül 2026'da yazıldı. Tarihler, fiyat ve API adları kaynaklardan doğrulandı: Apple'ın iPhone Duo adaptive layout Tech Talk'ı, flutter/flutter #192515 ve TrendForce'un 10 Eylül tahmini. Flutter tarafı hızlı değişebilir; issue'nun güncel durumunu kaynaktan teyit edin. Snapshot: Written on 13 September 2026. Dates, pricing and API names were verified against sources: Apple's iPhone Duo adaptive layout Tech Talk, flutter/flutter #192515 and TrendForce's 10 September forecast. The Flutter side can move fast; check the issue for its current state.

TrendForce, Apple'ın yıl sonuna kadar iPhone Duo'dan yaklaşık 5 milyon birim sevk edeceğini öngörüyor — 1.999 dolarlık başlangıç fiyatına rağmen katlanabilir pazarının neredeyse dörtte biri. Bu rakam tek başına küçük görünebilir; ama o cihazı alan kullanıcı, katlama anında uygulamanızın ne yaptığına bakarak karar veriyor.

TrendForce expects Apple to ship roughly 5 million iPhone Duo units by the end of the year — nearly a quarter of the foldable market, despite the $1,999 entry price. That number may look small on its own, but the people buying that device judge your app by watching what it does the moment they unfold it.

01iPhone Duo kısaca: dört poseiPhone Duo in brief: four poses

Book-style bir katlanabilir: kapalıyken 5,4 inç dış ekran, açıkken 7,6 inç iç ekran. Apple'ın farkı, iki ekranın birbirine yakın en-boy oranı paylaşması — içerik geçişi bu sayede daha akıcı.

A book-style foldable: a 5.4-inch cover display when closed, a 7.6-inch inner display when open. Apple's twist is that the two screens share a close aspect ratio, which makes content carry across the transition more smoothly.

Uygulamanızın karşılaşacağı dört pose var:

Your app will meet four poses:

Kritik nokta şu: geçişler uygulama kapalıyken olmuyor. Kullanıcı uygulamanın içindeyken katlama hareketini yapıyor; uygulama o anda hem yeni form faktörüne uyum sağlamak hem de durum bilgisini (scroll pozisyonu, form içeriği, açık modal) korumak zorunda.

The critical part: these transitions do not happen while the app is closed. The user folds the device while inside your app, so it has to adapt to the new form factor and preserve state — scroll position, form contents, an open modal — at the same moment.

02Toplulukta ne konuşuluyor?What the community is saying

GitHub — flutter/flutter #192515. Duyuruyla neredeyse eş zamanlı açılan bu issue, Flutter'ın iPhone Duo için fold farkındalığı olmadığını teknik detaylarıyla ortaya koyuyor. MediaQuery.displayFeatures yalnızca Android embedder'ında, Jetpack WindowManager üzerinden populate ediliyor; iPhone Duo'da cihaz ne kadar katlanırsa katlansın liste boş dönüyor. Issue, Apple'ın iOS 27.1'de getirdiği reserved-region API'lerini Darwin embedder'da ViewportMetrics yoluyla Flutter'ın DisplayFeature soyutlamasına bağlamayı öneriyor.

GitHub — flutter/flutter #192515. Opened almost simultaneously with the announcement, this issue lays out in technical detail that Flutter has no fold awareness for iPhone Duo. MediaQuery.displayFeatures is populated only in the Android embedder, from Jetpack WindowManager; on iPhone Duo the list comes back empty no matter how folded the device is. The proposal is to plumb the reserved-region APIs Apple added in iOS 27.1 through ViewportMetrics in the Darwin embedder into Flutter's DisplayFeature abstraction.

Issue aynı zamanda Flutter'ın modelindeki daha derin bir boşluğa da parmak basıyor: iOS'ta "bu cihazda bir katlama var mı — şu an düz olsa bile?" diye sorabiliyorsunuz. Apple'ın önerisi, katlaması olan bir cihazda grid kolon sayısını çift tutmak; böylece kullanıcı her büktüğünde layout yeniden dizilmiyor. Flutter'ın modeli bunu ifade edemiyor — aktif olmayan bir özellik listede hiç yok; yani düz bir iPhone Duo ile sıradan bir iPhone 18 aynı görünüyor.

The issue also points at a deeper gap in Flutter's model: on iOS you can ask "does this device have a fold, even though it is flat right now?" Apple's guidance is to keep grid column counts even on a device with a fold, so the layout does not reshuffle every time the user bends it. Flutter's model cannot express that — an inactive feature simply is not in the list, so a flat iPhone Duo looks identical to a plain iPhone 18.

Genel topluluk sesi. Yazılan içeriklerin ezici çoğunluğu Swift/UIKit perspektifinden; Flutter özelinde kaynak hâlâ kısıtlı. Kötü haber: resmi Flutter desteği yok ve React Native'de durum daha kötü (hiçbir fold API'si yok). İyi haber: uygulamalar çökmüyor ve doğru yazılmış adaptive layout'lar büyük ölçüde çalışıyor.

The wider community. The overwhelming majority of what has been written comes from a Swift/UIKit perspective; Flutter-specific material is still thin. The bad news: there is no official Flutter support, and React Native is worse off (no fold API at all). The good news: apps do not crash, and well-written adaptive layouts largely just work.

03Flutter'da gerçek durumWhere Flutter actually stands

Bugün Flutter'dan bekleyemeyeceklerinizWhat you cannot expect from Flutter today

MediaQuery.displayFeatures iOS'ta boş geliyor. Uygulamanız katlanma konumunu, katlama bölgesinin ekrandaki yerini ya da cihazın açık/kapalı/yarı açık olduğunu Flutter altyapısıyla doğrudan bilemiyor.

MediaQuery.displayFeatures comes back empty on iOS. Your app cannot directly know, through Flutter's own plumbing, the fold posture, where the fold sits on screen, or whether the device is open, closed or half-open.

fold_probe.dart
// iPhone Duo'da her zaman boş liste döner// Always returns an empty list on iPhone Duo
final features = MediaQuery.of(context).displayFeatures;
// features.isEmpty == true — cihaz hangi pose'da olursa olsun// features.isEmpty == true — whatever pose the device is in

dual_screen paketi bir çözüm değil. Microsoft'un Surface Duo döneminde geliştirdiği bu paket Android-only ve yıllardır güncellenmedi. iPhone Duo için hiçbir katkısı yok.

The dual_screen package is not the answer. Built by Microsoft in the Surface Duo era, it is Android-only and has not been updated in years. It contributes nothing for iPhone Duo.

Halihazırda çalışanlarWhat already works

LayoutBuilder yeniden boyutlandırmayı doğru hallediyor. Kullanıcı telefonu açtığında callback tetikleniyor ve layout yeniden hesaplanıyor. Fold'un nerede olduğunu bilmiyorsunuz, ama ne kadar alanınız olduğunu biliyorsunuz — ki pratikte kararların çoğu buna dayanıyor.

LayoutBuilder handles the resize correctly. Unfolding fires the callback and the layout is recomputed. You do not know where the fold is, but you do know how much space you have — which is what most decisions actually hinge on.

MediaQuery.paddingOf(context) asimetrik safe area'ları zaten ayrı ayrı veriyor. iPhone Duo'da sistem kontrolleri bir tarafa kaydığı için sol ve sağ inset'ler eşit değil — Flutter bunu native olarak destekliyor.

MediaQuery.paddingOf(context) already reports asymmetric safe areas separately. On iPhone Duo the system controls shift to one side, so left and right insets differ — Flutter supports this natively.

Tablet breakpoint'leriniz zaten doğru layoutu seçiyor. İç ekran açıldığında her iki boyutta da regular size class'a sahip — iPad genişliğinde. Halihazırda bir tablet layout'u olan Flutter uygulaması açık modda makul görünecek.

Your tablet breakpoints already pick the right layout. Opened, the inner display has a regular size class in both dimensions — iPad width. A Flutter app that already has a tablet layout will look reasonable unfolded.

04Layout'u nasıl düşünmeli?How to think about layout

iPhone Duo, yıllardır sorduğumuz soruyu geçersiz kılıyor: "portrait mı, landscape mı?" Doğru soru artık tek: elimdeki alan ne kadar?

iPhone Duo invalidates the question we have asked for years: "portrait or landscape?" There is only one right question now: how much space do I have?

adaptive_page.dart
// ❌ Yanlış: orientation'a göre dallanmak — iç ekran kilidi yoksayıyor// ❌ Wrong: branching on orientation — the inner display ignores the lock
if (MediaQuery.of(context).orientation == Orientation.portrait) {
  return CompactLayout();
}

// ✅ Doğru: fiziksel alanı ölçerek karar vermek// ✅ Right: decide by measuring the space you actually have
return LayoutBuilder(
  builder: (context, constraints) {
    if (constraints.maxWidth >= 600) return WideLayout();
    return CompactLayout();
  },
);

setPreferredOrientations'ı bırakınDrop setPreferredOrientations

En yaygın ve en sessiz sorun bu. Portrait kilidi varsa iPhone Duo'nun iç ekranı onu yoksayıyor ve uygulama letterbox moduna giriyor — 7,6 inçlik ekranın ortasında siyah bantlarla çevrili bir telefon uygulaması. Kullanıcının 1.999 dolar verdiği cihazda gördüğü ilk izlenim bu oluyor.

This is the most common and quietest failure. With a portrait lock in place, iPhone Duo's inner display ignores it and the app drops into letterbox mode — a phone app framed by black bars in the middle of a 7.6-inch screen. That is the first impression on a device someone paid $1,999 for.

main.dart
// ❌ Letterbox'a neden olur// ❌ Causes letterboxing
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);

// ✅ Layout kararını LayoutBuilder'a bırakın// ✅ Leave the layout decision to LayoutBuilder
SystemChrome.setPreferredOrientations([]);

MediaQuery.sizeOf — doğru yerde çağırınMediaQuery.sizeOf — call it in the right place

Boyut bilgisini initState'de saklarsanız katlama anında güncellenmez; ekran değişir, değişkeniniz değişmez.

Cache the size in initState and it will not update when the device folds; the screen changes, your variable does not.

home_state.dart
// ❌ Katlama sonrası bayat kalır// ❌ Goes stale after a fold
void initState() {
  screenSize = MediaQuery.of(context).size;
}

// ✅ Her katlama değişiminde yeniden tetiklenir// ✅ Re-triggers on every fold change
Widget build(BuildContext context) {
  final size = MediaQuery.sizeOf(context);
}

Asimetrik safe areaAsymmetric safe areas

iPhone Duo'da sol ve sağ inset'lerin eşit olmadığını varsayın. Tek taraflı bir ölçümü ikiyle çarpan her hesap burada yanlış sonuç veriyor.

Assume left and right insets are not equal on iPhone Duo. Any calculation that doubles a single-side measurement produces the wrong answer here.

layout_math.dart
// ❌ Hatalı// ❌ Wrong
final usableWidth = size.width - padding.left * 2;

// ✅ Doğru// ✅ Right
final usableWidth = size.width - padding.left - padding.right;

05Katlama tespiti: platform channel köprüsüDetecting the fold: a platform channel bridge

Flutter resmi destek sunana kadar Apple'ın reservedRegions API'sine platform channel üzerinden erişebilirsiniz. iOS 27.1'de UIView üzerindeki reservedRegions(kind:), her bölge için bir frame, bir tür ve aktif/pasif durum döndürüyor. Katlama bölgesinin türü .division.

Until Flutter ships official support, you can reach Apple's reservedRegions API through a platform channel. In iOS 27.1, reservedRegions(kind:) on UIView returns a frame, a kind and an active/inactive state per region. The fold's kind is .division.

AppDelegate.swift
if #available(iOS 27.1, *) {
    let channel = FlutterMethodChannel(
        name: "com.yourapp/iphone_duo",
        binaryMessenger: flutterViewController.binaryMessenger
    )
    channel.setMethodCallHandler { call, result in
        if call.method == "getFoldRegions" {
            guard let view = flutterViewController.view else { result([]); return }
            // .division = katlama bölgesi// .division = the fold region
            let regions = view.reservedRegions(kind: .division).map {
                ["x": $0.frame.origin.x, "y": $0.frame.origin.y,
                 "width": $0.frame.size.width, "height": $0.frame.size.height,
                 "isActive": $0.isActive] as [String: Any]
            }
            result(regions)
        }
    }
}
iphone_duo_bridge.dart
class IPhoneDuoBridge {
  static const _channel = MethodChannel('com.yourapp/iphone_duo');

  static Future<List<FoldRegion>> getFoldRegions() async {
    try {
      final List<dynamic> raw = await _channel.invokeMethod('getFoldRegions');
      return raw.map((r) => FoldRegion.fromMap(Map<String, dynamic>.from(r))).toList();
    } catch (_) {
      return []; // Android ya da iOS 27.1 öncesi// Android, or pre-iOS 27.1
    }
  }
}

isActive: false döndüğünde cihaz düz demek: katlama bölgesi sıfır genişliğe sahip ve layout'u etkilemiyor. Buradaki asıl kazanç, bölgenin varlığını öğrenmek — cihazda bir katlama olduğunu bildiğiniz anda kolon sayısını çift tutmak gibi kararları önceden verebilirsiniz.

When isActive: false comes back, the device is flat: the fold region has zero width and does not affect layout. The real win here is learning that the region exists — once you know the device has a fold, you can make decisions like keeping column counts even up front.

06iOS SDK rebuild: küçük adım, büyük farkThe iOS SDK rebuild: small step, big difference

Tek satır kod yazmadan görünümü değiştiren tek şey: hangi SDK ile build aldığınız.

The one thing that changes how the app looks without writing a line of code: which SDK you built against.

Build SDKBuild SDK İç ekran davranışıInner display behaviour
Eski SDKOlder SDK Letterbox — iki yanda siyah bantlar.Letterboxed — black bars on both sides.
iOS 27 SDK Tam genişlik, ama status bar sola uzanıyor.Full width, but the status bar stretches to the left.
iOS 27.1 SDK Tam kenardan kenara; navigasyon butonları dikey yerleşiyor.Properly edge to edge; navigation buttons lay out vertically.

Xcode 27.1'e geçin ve rebuild edin. Aynı sürüm Device Hub üzerinden iPhone Duo simülatörünü de getiriyor: açma, kapama, döndürme ve katlama kontrolleriyle dört pose'u gerçek cihaza ihtiyaç duymadan test edebiliyorsunuz.

Move to Xcode 27.1 and rebuild. The same release brings the iPhone Duo simulator through Device Hub: open, close, rotate and fold controls let you exercise all four poses without a physical device.

07Kontrol listesiChecklist

08ÖzetIn summary

Uygulamanız iPhone Duo'da çökmüyor — ama kullanıcı telefonu açtığı anda layout'un ne yaptığı, uygulamanızın kalitesini orada yargılıyor. Flutter'ın resmi fold desteği henüz yok ve iOS tarafı beklemede. Buna karşılık gereken her şey — LayoutBuilder, MediaQuery, tablet breakpoint'leri — halihazırda elinizde; fold tespitini de platform channel ile bugün ekleyebilirsiniz.

Your app will not crash on iPhone Duo — but what the layout does the instant someone unfolds it is where your app's quality gets judged. Flutter has no official fold support yet and the iOS side is pending. Everything you actually need, though — LayoutBuilder, MediaQuery, tablet breakpoints — is already in your hands, and you can add fold detection through a platform channel today.

main.dart
// Muhtemelen uygulamanızdaki en değerli tek satırlık düzeltme// Probably the highest-value one-line fix in your app
SystemChrome.setPreferredOrientations([]); // portrait kilidini kaldır// drop the portrait lock

Bunu şimdi planlamak, 23 Ekim'den sonra acele etmekten çok daha ucuz. Mobil tarafta bu yıl planlanacak tek yapısal değişiklik de değil: Material ve Cupertino'nun SDK'dan ayrılması ve ajan uyumlu uygulama tasarımı aynı takvime giriyor.

Planning this now is far cheaper than rushing after 23 October. And it is not the only structural change to plan for on mobile this year: Material and Cupertino leaving the SDK and agent-ready app design land in the same window.

09Sık sorulanlarFrequently asked questions

Flutter uygulamam iPhone Duo'da çalışacak mı?Will my Flutter app run on iPhone Duo?

Evet, çalışıyor. Soru çalışıp çalışmaması değil, kullanıcı telefonu açtığında layout'un ne yaptığı. Doğru yazılmış adaptive layout'lar iç ekranda makul görünüyor; portrait kilidi olan ya da orientation'a göre dallanan uygulamalar letterbox moduna düşüyor.

Yes, it runs. The question is not whether it works but how the layout behaves when the user unfolds the device. Well-written adaptive layouts look reasonable on the inner display; apps with a portrait lock or orientation branching drop into letterbox mode.

MediaQuery.displayFeatures neden boş dönüyor?Why is MediaQuery.displayFeatures empty?

Çünkü yalnızca Android embedder'ında, Jetpack WindowManager üzerinden populate ediliyor. Darwin embedder'da karşılığı yok. flutter/flutter #192515 bunu iOS 27.1 reserved-region API'leriyle beslemeyi öneriyor; henüz resmi yanıt yok.

Because it is populated only in the Android embedder, from Jetpack WindowManager. The Darwin embedder has no equivalent. flutter/flutter #192515 proposes feeding it from the iOS 27.1 reserved-region APIs; there is no official response yet.

dual_screen paketini kullanabilir miyim?Can I use the dual_screen package?

Hayır. Android-only ve yıllardır güncellenmedi. iPhone Duo için bir katkısı yok; fold bilgisine bugün ulaşmanın tek yolu platform channel köprüsü.

No. It is Android-only and has not been updated in years. It contributes nothing for iPhone Duo; a platform channel bridge is the only route to fold information today.

Katlanmayı bugün tespit edebilir miyim?Can I detect the fold today?

Evet, ama Flutter'ın dışından. iOS 27.1'de UIView.reservedRegions(kind:) katlama bölgesini .division türüyle veriyor; cihaz düzken isActive false ve genişlik sıfır. Bunu FlutterMethodChannel ile Dart tarafına taşıyabilirsiniz.

Yes, but from outside Flutter. In iOS 27.1, UIView.reservedRegions(kind:) returns the fold as a .division region; while the device is flat, isActive is false and the width is zero. Carry it to Dart through a FlutterMethodChannel.

Gerçek cihaz olmadan test edebilir miyim?Can I test without a physical device?

Evet. Xcode 27.1, Device Hub üzerinden iPhone Duo simülatörünü içeriyor; açma, kapama, döndürme ve katlama kontrolleriyle dört pose'u ekranda deneyebiliyorsunuz.

Yes. Xcode 27.1 ships an iPhone Duo simulator through Device Hub, with open, close, rotate and fold controls so you can exercise all four poses on screen.

FlutteriPhone DuoFoldable MOBİLMOBILE Adaptive Layout