Kaip prisitaiko Flutter prie iOS operacinės sistemos?
sobes.tech AI
Atsakymas iš AI
Flutter naudoja Skia variklį UI atvaizdavimui, kuris tiesiogiai sąveikauja su GPU. Natyvios iOS komponentės (mygtukai, slankikliai ir kt.) nėra naudojamos. Jų išvaizda ir elgsena imituojama Flutter widget'ais, stilizuotais pagal Human Interface Guidelines.
Pavyzdžiui, kuriant iOS stiliaus mygtuką naudojamas CupertinoButton:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class MyCupertinoButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoButton(
child: Text('Paspausk mane'),
onPressed: () {
// Veiksmas paspaudus
},
);
}
}
Flutter sąveikauja su natyviais API per savo plėtinius, naudojant platformos kanalus (Platform Channels). Tai leidžia iš Dart kodo iškviesti iOS natūralų kodą ir atvirkščiai.
import 'package:flutter/services.dart';
class NativeApi {
static const platform = MethodChannel('com.example.myapp/battery'); // Kanalo pavadinimas
Future<String> getBatteryLevel() async {
try {
final String result = await platform.invokeMethod('getBatteryLevel'); // Natūralios funkcijos iškvietimas
return 'Baterijos lygis: $result%.';
} on PlatformException catch (e) {
return "Nepavyko gauti baterijos lygio: '${e.message}'.";
}
}
}
iOS pusėje natūralus kodas apdoroja iškvietimus per MethodChannel:
// Swift kodas iOS projekte
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: "Baterijos lygis nepasiekiamas.",
details: nil))
} else {
result(Int(device.batteryLevel * 100))
}
}
}
Dizaino pritaikymui naudojami cupertino bibliotekos widget'ai, imituojantys iOS stilių. Taip pat, prieiga prie specifinių iOS funkcijų vykdoma per plėtinius. iOS programos kūrimas vyksta per Xcode. Flutter generuoja iOS projektą, kuris vėliau kompiliuojamas į nativų vykdomąjį failą (.ipa).