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.