Flutter qanday qilib iOS operatsion tizimiga moslashadi?
sobes.tech AI
AIdan javob
Flutter UI-ni render qilish uchun Skia dvigatelidan foydalanadi, u GPU bilan to'g'ridan-to'g'ri o'zaro aloqada bo'ladi. iOS ning mahalliy komponentlari (tugmalar, skrolllar va boshqalar) ishlatilmaydi. Ularning ko'rinishi va xulq-atvori Flutter vidjetlari bilan imitatsiya qilinadi, ular Human Interface Guidelines ga moslashtirilgan.
Masalan, iOS uslubidagi tugma yaratish uchun CupertinoButton ishlatiladi:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class MyCupertinoButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoButton(
child: Text('Нажми меня'),
onPressed: () {
// Bosish bilan amalga oshiriladigan harakat
},
);
}
}
Flutter mahalliy API lar bilan pluginlar orqali muloqot qiladi, platforma kanallari (Platform Channels) yordamida. Bu Dart dan iOS ning mahalliy kodini chaqirishga va aksincha qilishga imkon beradi.
import 'package:flutter/services.dart';
class NativeApi {
static const platform = MethodChannel('com.example.myapp/battery'); // Kanal nomi
Future<String> getBatteryLevel() async {
try {
final String result = await platform.invokeMethod('getBatteryLevel'); // Mahalliy metodni chaqirish
return 'Batareya darajasi: $result%.';
} on PlatformException catch (e) {
return "Batareya darajasini olish imkoni bo'lmadi: '${e.message}'.";
}
}
}
iOS tomonida, mahalliy kod MethodChannel orqali chaqirilarni boshqaradi.
// iOS loyihasida Swift kodi
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 darajasi mavjud emas.",
details: nil))
} else {
result(Int(device.batteryLevel * 100))
}
}
}
Dizaynni moslashtirish uchun cupertino kutubxonasidan vidjetlar ishlatiladi, ular iOS uslubini taklif qiladi. Shuningdek, iOS ga xos funksiyalarga kirish pluginlar orqali amalga oshiriladi. iOS uchun ilovani yig'ish Xcode orqali amalga oshiriladi. Flutter iOS loyihasini yaratadi, keyin esa u nativ bajariladigan faylga (.ipa) kompilyatsiya qilinadi.