Sobes.tech
Junior — Middle

Át lehet adni egy osztályt izolációnak vagy modulnak?

sobes.tech MI

Válasz az MI-től

Flutterben az izoláció (Isolate) egy külön végrehajtási szál, amely nem oszt meg memóriát a fő szállal. Nem lehet közvetlenül átadni egy osztályt vagy objektumot egyik izolától a másiknak, mivel nem oszthatnak meg memóriát.

Azonban, serializálható adatok (például primitívek, listák, térképek) átadhatók, amelyek felhasználhatók osztálypéldányok létrehozására egy másik izolátumban. Az izolátok közötti adatcsere általában üzenetek küldésével történik a SendPort és ReceivePort segítségével.

Példa adatok átadására izolátok között:

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('Kapott érték: \\${myObject.value}');
  });
}

Így nem lehet közvetlenül átadni a osztályt, de adatokat lehet küldeni az objektum újraépítéséhez egy másik izolátumban.