Sobes.tech
Middle

Flutter iOS işletim sistemine nasıl uyum sağlar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Flutter, UI'yi çizmek için doğrudan GPU ile etkileşime geçen Skia motorunu kullanır. iOS'un yerel bileşenleri (düğmeler, kaydırıcılar vb.) kullanılmaz. Görünüm ve davranışları, Human Interface Guidelines'a uygun şekilde stilize edilmiş Flutter widget'larıyla taklit edilir.

Örneğin, iOS tarzında bir düğme oluşturmak için CupertinoButton kullanılır:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class MyCupertinoButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoButton(
      child: Text('Нажми меня'),
      onPressed: () {
        // Basıldığında yapılacak işlem
      },
    );
  }
}

Flutter, platform kanalları (Platform Channels) kullanarak yerel API'lerle etkileşime geçer. Bu, Dart'tan iOS yerel kodunu çağırmaya ve tam tersi olmasına olanak tanır.

import 'package:flutter/services.dart';

class NativeApi {
  static const platform = MethodChannel('com.example.myapp/battery'); // Kanal adı

  Future<String> getBatteryLevel() async {
    try {
      final String result = await platform.invokeMethod('getBatteryLevel'); // Yerel yöntemi çağır
      return 'Pil seviyesi: $result%.';
    } on PlatformException catch (e) {
      return "Pil seviyesi alınamadı: '${e.message}'.";
    }
  }
}

iOS tarafında, yerel kod MethodChannel aracılığıyla çağrıları işler.

// iOS projesinde Swift kodu
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
    let batteryChannel = FlutterMethodChannel(name: "com.example.myapp/battery",
                                              binaryMessenger: controller.binaryMessenger)
    batteryChannel.setMethodCallHandler({
      (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
      guard call.method == "getBatteryLevel" else {
        result(FlutterMethodNotImplemented)
        return
      }
      self.receiveBatteryLevel(result: result)
    })

    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

  private func receiveBatteryLevel(result: FlutterResult) {
    let device = UIDevice.current
    device.isBatteryMonitoringEnabled = true
    if device.batteryState == .unknown {
      result(FlutterError(code: "UNAVAILABLE",
                          message: "Pil seviyesi erişilebilir değil.",
                          details: nil))
    } else {
      result(Int(device.batteryLevel * 100))
    }
  }
}

Tasarımı uyarlamak için cupertino kütüphanesinden widget'lar kullanılır, bu da iOS tarzını taklit eder. Ayrıca, iOS'e özgü fonksiyonlara erişim de plugin'ler aracılığıyla sağlanır. iOS için uygulama derlemesi Xcode üzerinden yapılır. Flutter, iOS projesi oluşturur ve bu proje daha sonra yerel yürütülebilir dosyaya (.ipa) derlenir.