რა იცით Flutter-ის შიდა მოწყობის შესახებ?
sobes.tech AI
პასუხი AI-სგან
Flutter-ის ბირთვი შედგება ძრავის, ჩარჩოსა და ვიჯეტებისგან.
-
Flutter-ის ძრავი: დაწერილია C++-ში და უზრუნველყოფს დაბალ დონეზე API-ს რენდერინგისთვის, ტექსტთან მუშაობისთვის, ნაკადებისა და პლაგინებისთვის. ის პირდაპირ ურთიერთქმედებს პლატფორმასთან (iOS, Android, Web, Desktop) და გრაფიკული API-ებთან (მაგალითად, Skia). ძრავი მართავს გამოსახულების გადაღებას, ასინქრონულ ოპერაციებს და აპლიკაციის ციკლს.
-
Flutter-ის ჩარჩო (Framework): დაწერილია Dart-ით და უზრუნველყოფს abstraction-ის ფენას ძრავზე. მასში შედის მრავალი მზადყოფნის კომპონენტი:
- Foundation: ძირითადი კლასი და დახმარებითი ფუნქციები.
- Rendering: ფენა, რომელიც მართავს ობიექტების ხეს და მათი გამოსახულების გადაღებას.
- Widgets: UI-ის ძირითადი ბლოკები, რომლებიც ქმნიან ვიჯეტების ხეს.
- Material Design და Cupertino: ვიჯეტების ნაკრები, რომელიც განახორციელებს Material Design-ის სტილებს და iOS-ის დიზაინს.
-
ვიჯეტები: Flutter-ში ყველაფერი ვიჯეტია. ვიჯეტები აღწერენ UI-ის კონფიგურაციას. არსებობს ორი ძირითადი ტიპი:
- StatelessWidget: ვიჯეტი, რომელსაც არ აქვს შიდა შეცვლადი მდგომარეობა. მისი UI დამოკიდებულია მხოლოდ მის შემომავალ პარამეტრებზე (
properties). - StatefulWidget: ვიჯეტი, რომელსაც შეუძლია ჰქონდეს შეცვლადი მდგომარეობა. ის შედგება თავად ვიჯეტისა და
Stateობიექტისგან, სადაც ინახება მდგომარეობა და UI-ის მშენებლობის ლოგიკა (buildმეთოდი).
- StatelessWidget: ვიჯეტი, რომელსაც არ აქვს შიდა შეცვლადი მდგომარეობა. მისი UI დამოკიდებულია მხოლოდ მის შემომავალ პარამეტრებზე (
რენდერინგის პროცესი:
- Build: ფრეიმვორკი იძახის
build()მეთოდს ვიჯეტზე, რომელიც აბრუნებს სხვა ვიჯეტების ხეს. - Element Tree: ვიჯეტების ხის საფუძველზე იქმნება ელემენტების ხე (
Element Tree), რომელიც წარმოადგენს UI-ის სტრუქტურას. ელემენტები აკავშირებენ ვიჯეტებს შესაბამის ობიექტებთან რენდერინგისთვის. - Render Object Tree: ელემენტები ქმნიან და მართავენ რენდერ ობიექტების ხეს (
Render Object Tree). რენდერ ობიექტები პასუხისმგებელნი არიან მორგებაზე, ფერადზე და hit testing-ზე. - Painting: ძრავი იყენებს Skia-ს (მობილურ და დესკტოპ პლატფორმებზე) ან CanvasKit-ს (ვებსაიტზე)
Render Objects-ის გამოსახატავად ეკრანზე.
რეაქტიული პროგრამირება:
Flutter იყენებს რეაქტიულ მიდგომას UI-ის მშენებლობაში. როდესაც აპლიკაციის მდგომარეობა იცვლება, ფრეიმვორკი აღადგენს იმ ნაწილს ვიჯეტების ხის, რომელიც ამ მდგომარეობაზეა დამოკიდებული. ეს ხდება ავტომატურად და ეფექტურად diffing-ის მექანიზმის და სწრაფი ვიჯეტების შექმნისა და განადგურების საშუალებით.
გახმოვანება (Hot Reload) და სწრაფი გადატვირთვა (Hot Restart):
- Hot Reload: აყენებს განახლებულ Dart კოდს უკვე გაშვებულ აპლიკაციაში, მდგომარეობის დაკარგვის გარეშე. იდეალურია UI-ის სწრაფი ინტერაციისთვის.
- Hot Restart: თავიდან იწყებს აპლიკაციას განახლებულ კოდთან და ნულიდან, განულებული მდგომარეობით. გამოიყენება, როდესაც Hot Reload ვერ მუშაობს, მაგალითად,
initState-ში ცვლილებების ან გლობალური ცვლადების ცვლილების დროს.
პლატფორმის სპეციფიკური კოდი:
Flutter-ის საშუალებით შესაძლებელია ურთიერთქმედება პლატფორმის ნატიური API-ებთან პლატფორმის არხების (Platform Channels) მეშვეობით. ეს საშუალებას აძლევს იძახოს ნატიური კოდის მეთოდები (Java/Kotlin Android-ზე, Swift/Objective-C iOS-ზე) და მიიღოს შედეგები Dart-ში.
// მაგალითი პლატფორმის არხის გამოყენების
import 'package:flutter/services.dart';
static const platform = MethodChannel('samples.flutter.dev/battery');
Future<void> getBatteryLevel() async {
String batteryLevel;
try {
final int result = await platform.invokeMethod('getBatteryLevel');
batteryLevel = 'ბატარეის დონე: $result %.';
} on PlatformException catch (e) {
batteryLevel = "ვერ მოხერხდა ბატარეის დონის მიღება: '${e.message}'.";
}
// UI-ის განახლება
}