Sobes.tech
Junior — Middle

Sinifi izolasiya və ya modula keçirmək mümkündürmü?

sobes.tech Süni İntellekt

AI-dan cavab

Flutter-da, İzolyasiya (Isolate) əsas axınla yaddaş paylaşmayan ayrıca icra axınıdır. Bir izolyatdan digərinə birbaşa sinif və ya obyekt ötürmək mümkün deyil, çünki onlar yaddaşı paylaşa bilməzlər.

Ancaq, seriyalaşdırıla bilən məlumatlar (məsələn, primitivlər, siyahılar, xəritələr) ötürülə bilər və bunlar başqa izolyatda sinif nümunələri yaratmaq üçün istifadə oluna bilər. İzolyatlar arasında məlumat mübadiləsi adətən SendPortReceivePort vasitəsilə mesajlar göndərməklə həyata keçirilir.

İzolyatlar arasında məlumat ötürülməsinin nümunəsi:

import 'dart:isolate';

class MyClass {
  final int value;
  MyClass(this.value);

  Map<String, dynamic> toMap() => {'value': value};

  static MyClass fromMap(Map<String, dynamic> map) => MyClass(map['value']);
}

void isolateEntry(SendPort sendPort) {
  final myObject = MyClass(42);
  sendPort.send(myObject.toMap());
}

void main() async {
  final receivePort = ReceivePort();
  await Isolate.spawn(isolateEntry, receivePort.sendPort);

  receivePort.listen((message) {
    final myObject = MyClass.fromMap(message);
    print('Alınan dəyər: \\${myObject.value}');
  });
}

Bu şəkildə, sinfi birbaşa ötürmək mümkün deyil, amma məlumatlar ötürülərək obyekt başqa izolyatda bərpa edilə bilər.