Flutter iOS əməliyyat sisteminə necə uyğunlaşır?
sobes.tech Süni İntellekt
AI-dan cavab
Flutter UI üçün Skia mühərrikindən istifadə edir, bu da birbaşa GPU ilə qarşılıqlı əlaqədədir. iOS-un yerli komponentləri (düymələr, sürüşdürmələr və s.) istifadə edilmir. Onların görünüşü və davranışı Flutter widgetları ilə imitasiya olunur, Human Interface Guidelines-ə uyğun stilizə edilir.
Məsələn, iOS üslubunda düymə yaratmaq üçün CupertinoButton istifadə olunur:
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ıqda əməliyyat
},
);
}
}
Flutter, yerli API-lərlə pluginlar vasitəsilə qarşılıqlı əlaqə qurur, platforma kanalları (Platform Channels) istifadə edir. Bu, Dart-dan iOS yerli kodunu çağırmağa və əksinə imkan verir.
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'); // Nativ metod çağırışı
return 'Batareya səviyyəsi: $result%.';
} on PlatformException catch (e) {
return "Batareya səviyyəsini almaq mümkün olmadı: '${e.message}'.";
}
}
}
iOS tərəfində, yerli kod MethodChannel vasitəsilə çağırışları idarə edir.
// iOS layihəsində 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: "Batareya səviyyəsi mövcud deyil.",
details: nil))
} else {
result(Int(device.batteryLevel * 100))
}
}
}
Dizaynı uyğunlaşdırmaq üçün cupertino kitabxanasından widgetlər istifadə olunur, bunlar iOS stilini təqlid edir. Həmçinin, iOS-ə xas funksiyalara giriş pluginlər vasitəsilə həyata keçirilir. iOS üçün tətbiqin yığılması Xcode vasitəsilə həyata keçirilir. Flutter iOS layihəsini yaradır və sonra bu layihə yerli icra edilə bilən fayla (.ipa) çevrilir.