# Flutter 6: iOS bilan integratsiya va Platform Channels

> **Holat:** 2026-yil sentabr. Krossplatforma dasturchining eng kuchli ustunligi — kerak bo'lganda to'g'ridan-to'g'ri operatsion tizimning nativ imkoniyatlariga chiqa olishidir. Ushbu darsda Flutter va iOS (Swift) o'rtasida ma'lumot almashish (MethodChannel, Pigeon 29.0.4), mavjud iOS ilovasiga Flutter qo'shish (Add-to-App), Swift Package Manager (SwiftPM) integratsiyasi hamda qaysi funksiyalar sof Swift kodini talab qilishi ko'rsatiladi.

## Mundarija

1. [Platform Channels arxitekturasi: Dart va Swift ko'prigi](#platform-channels)
2. [MethodChannel amaliyoti: Swift tomoni va MainActor](#method-channel)
3. [Tip-xavfsiz aloqa: Pigeon 29.0.4](#pigeon)
4. [Mavjud iOS loyihasiga Flutter ulash (Add-to-App)](#add-to-app)
5. [Paketlar boshqaruvi: CocoaPods'dan SwiftPM'ga o'tish](#swiftpm)
6. [Faqat nativ Swift talab qiluvchi funksiyalar](#native-features)
7. [Liquid Glass dizayn bo'shlig'i va vaqtinchalik yechim](#liquid-glass)
8. [Reliz: flutter build ipa va App Store Connect](#release)
9. [Xulosa](#xulosa)
10. [Manbalar](#manbalar)

---

## 1. Platform Channels arxitekturasi: Dart va Swift ko'prigi](#platform-channels)

Flutter ilovasi operatsion tizimning o'ziga xos imkoniyatlariga (Bluetooth, kamera, batareya holati, maxsus datchiklar) murojaat qilish uchun **Platform Channels** mexanizmidan foydalanadi:

```text
+------------------------+                 +------------------------+
|      Flutter (Dart)    |                 |       iOS (Swift)      |
|                        |                 |                        |
|   MethodChannel.invoke | == binariy ===> | FlutterMethodChannel   |
|   (xabar yuborish)     |    xabarlar     | (handler / delegate)   |
|                        | <== (javob) === |                        |
+------------------------+                 +------------------------+
```

Xabarlar standart koder (StandardMessageCodec) orqali binariy ko'rinishga o'giriladi: Dart'dagi `String`, `int`, `Map`, `List` avtomatik ravishda Swift'dagi `String`, `Int`, `[String: Any]`, `[Any]` turlariga aylanadi.

---

## 2. MethodChannel amaliyoti: Swift tomoni va MainActor {#method-channel}

### Dart tomoni:
```dart
import 'package:flutter/services.dart';

class BatteryService {
  static const MethodChannel _channel = MethodChannel('uz.azimjondev.battery');

  static Future<int> getBatteryLevel() async {
    try {
      final int level = await _channel.invokeMethod('getBatteryLevel');
      return level;
    } on PlatformException {
      return -1;
    }
  }
}
```

### Swift tomoni (iOS 26 / Swift 6 xavfsizligi):
Swift 6 da `UIDevice` ob'ekti `@MainActor` ga bog'langan. Shuning uchun platforma xabarlarini qayta ishlashda oqim xavfsizligini ta'minlash uchun `MainActor.assumeIsolated` qo'llaniladi:

```swift
@preconcurrency import Flutter
import UIKit

public final class BatteryPlugin: NSObject, @preconcurrency FlutterPlugin {
  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(
      name: "uz.azimjondev.battery",
      binaryMessenger: registrar.messenger()
    )
    let instance = BatteryPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  @MainActor
  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    if call.method == "getBatteryLevel" {
      let device = UIDevice.current
      device.isBatteryMonitoringEnabled = true
      if device.batteryState == .unknown {
        result(FlutterError(code: "UNAVAILABLE", message: "Batareya darajasi noma'lum", details: nil))
      } else {
        result(Int(device.batteryLevel * 100))
      }
    } else {
      result(FlutterMethodNotImplemented)
    }
  }
}
```

---

## 3. Tip-xavfsiz aloqa: Pigeon 29.0.4 {#pigeon}

`MethodChannel` ning eng katta kamchiligi — satrlar (string) orqali chaqirilishi va tiplar xavfsiz emasligidir (agar Dart tomonida metod nomida xato qilsangiz, faqat runtime'da ma'lum bo'ladi).

Buning oldini olish uchun Google rasmiy **Pigeon** kod-generatorini yaratgan ([Pigeon pub.dev](https://pub.dev/packages/pigeon)). 

Pigeon kirish fayli (`pigeons/messages.dart`):

```dart
import 'package:pigeon/pigeon.dart';

@ConfigurePigeon(
  PigeonOptions(
    dartOut: 'lib/src/messages.g.dart',
    swiftOut: 'ios/Runner/Messages.g.swift',
  ),
)
@HostApi()
abstract class DeviceHostApi {
  int getBatteryLevel();
}
```

Ushbu shablon asosida Pigeon Dart uchun ham, Swift uchun ham kompilyatsiya vaqtida qat'iy tiplangan protokol va chaqiruvlarni avtomatik generatsiya qiladi.

---

## 4. Mavjud iOS loyihasiga Flutter ulash (Add-to-App) {#add-to-app}

Katta korporativ iOS ilovasini birdaniga Flutter'ga ko'chirish shart emas. Apple ilovasi ichiga Flutterni bitta yoki bir nechta ekran ko'rinishida qo'shish mumkin (**Add-to-App**):
- **`FlutterEngine`:** Flutter runtime'ni xotirada boshqaradi. Ilova ishga tushganda oldindan qizdirib (pre-warm) qo'yiladi.
- **`FlutterViewController`:** Standart `UIViewController` vorisi bo'lib, SwiftUI'dagi `UIViewControllerRepresentable` yoki UIKit UINavigationController zanjiriga oddiy ekran kabi ulanadi.

---

## 5. Paketlar boshqaruvi: CocoaPods'dan SwiftPM'ga o'tish {#swiftpm}

Tarixiy jihatdan Flutter plaginlari CocoaPods orqali o'rnatilar edi. Biroq 2026-yilda jiddiy o'zgarishlar yuz berdi:
- **Flutter 3.44 (2026-05-20):** Swift Package Manager (SwiftPM) plaginlar uchun rasmiy sukut bo'yicha paket menejeriga aylandi.
- **CocoaPods kelajagi:** CocoaPods jamoasi rasman e'lon qilganidek, uning Master Trunk ombori **2026-yil 2-dekabrdan boshlab faqat o'qish (Read-only)** rejimiga o'tadi ([CocoaPods Blog](http://blog.cocoapods.org)).
- Google ma'lumotlariga ko'ra, eng ommabop **top 100 ta Flutter plaginining 92 tasi** allaqachon SwiftPM'ga to'liq moslashtirilgan.
- **iOS talabi:** Flutter 3.47 dan boshlab minimal qo'llab-quvvatlanadigan tizim versiyasi **iOS 15** qilib belgilandi.
- **UIScene:** Flutter 3.41 dan boshlab `UIScene` sukut bo'yicha integratsiya qilingan bo'lib, Apple'ning iOS 27 uchun e'lon qilgan talablariga to'liq javob beradi.

---

## 6. Faqat nativ Swift talab qiluvchi funksiyalar {#native-features}

Har qanday Flutter dasturchisi bilishi kerak: quyidagi imkoniyatlar sof Flutter widgetlari orqali qurilmaydi va baribir **nativ Swift/SwiftUI kodini** talab qiladi:

1. **WidgetKit (Asosiy ekran va qulflangan ekran vidjetlari):** Vidjet interfeysi faqat SwiftUI'da chiziladi. `home_widget` (0.10.0) plagini faqat App Group orqali Dart'dan SwiftUI vidjetiga ma'lumot uzatish vazifasini bajaradi.
2. **Live Activities va Dynamic Island:** `live_activities` (2.6.0) yordamida buyurtma holati kabi hodisalar boshqariladi, lekin vizual taqdimot SwiftUI ActivityConfiguration ichida yoziladi.
3. **Fon ishlari (Background Processing):** Apple tizimida qat'iy vaqt chegaralari (BGTaskScheduler) mavjud bo'lib, uzoq davom etuvchi fon jarayonlarini boshqarishda `workmanager` (0.10.10) nativ cheklovlarga duch keladi.

---

## 7. Liquid Glass dizayn bo'shlig'i va vaqtinchalik yechim {#liquid-glass}

Apple'ning eng so'nggi Liquid Glass dizayn tili Cupertino widgetlariga hali kiritilmagan (#191058 masalasi ochiq turibdi). Shunga qaramay, Flutter'ning `BackdropFilter` widgeti orqali unga juda yaqin shishasimon vizual effekt hosil qilish mumkin:

```dart
import 'dart:ui';
import 'package:flutter/material.dart';

Widget buildGlassCard({required Widget child}) {
  return ClipRRect(
    borderRadius: BorderRadius.circular(20),
    child: BackdropFilter(
      filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),
      child: Container(
        decoration: BoxDecoration(
          color: Colors.white.withValues(alpha: 0.15),
          borderRadius: BorderRadius.circular(20),
          border: Border.all(
            color: Colors.white.withValues(alpha: 0.25),
            width: 1.5,
          ),
        ),
        padding: const EdgeInsets.all(20),
        child: child,
      ),
    ),
  );
}
```

---

## 8. Reliz: flutter build ipa va App Store Connect {#release}

Ilovani App Store'ga topshirish uchun tayyorlash:

```bash
flutter build ipa --release
```

Ushbu buyruq avtomatik ravishda:
- Dart kodini AOT rejimida mashina kodiga kompilyatsiya qiladi;
- SwiftPM orqali barcha bog'liqliklarni yig'adi;
- `build/ios/archive/*.xcarchive` arxivini hosil qiladi va `build/ios/ipa/` katalogiga tayyor `.ipa` faylini eksport qiladi.

---

## 9. Xulosa {#xulosa}

- MethodChannel oddiy xabarlar almashish uchun xizmat qiladi, ammo jamoaviy loyihalarda tip-xavfsiz **Pigeon 29.0.4** tavsiya etiladi.
- Swift 6 oqim xavfsizligi sharoitida platforma xabarlarida UIDevice bilan ishlashda `@MainActor` inobatga olinishi zarur.
- CocoaPods Master ombori 2026-yil oxirida read-only rejimga o'tishi sababli, Flutter'ning SwiftPM'ga to'liq o'tgani eng to'g'ri strategik qadam bo'ldi.
- WidgetKit, Live Activities va Dynamic Island har doim nativ SwiftUI bilimini talab qiladi — bu esa iOS dasturchisi uchun katta raqobatbardosh ustunlikdir.

---

## Manbalar {#manbalar}

1. [Writing Custom Platform-Specific Code — Flutter Docs](https://docs.flutter.dev/platform-integration/platform-channels)
2. [Pigeon Code Generation Tool — pub.dev](https://pub.dev/packages/pigeon)
3. [Integrating Flutter into Existing iOS Apps (Add-to-App)](https://docs.flutter.dev/add-to-app/ios)
4. [CocoaPods Trunk Plans (2026-12-02)](http://blog.cocoapods.org)
5. [Flutter Swift Package Manager Integration](https://docs.flutter.dev/packages-and-plugins/swift-package-manager)
