Sobes.tech
Junior — Middle

Kas klassi saab üle anda isolatsiooni või mooduli?

sobes.tech AI

Vastus AI-lt

Flutteris on isoleerimine (Isolate) eraldi täitmisnihe, mis ei jaga mälu peamise niidiga. Klasside või objektide otseülekanne ühest isoleerimisest teise ei ole võimalik, kuna nad ei saa mälu jagada.

Kuid serialiseeritavad andmed (näiteks primitiivid, nimekirjad, kaardid) võivad olla edastatavad ning neid saab kasutada klasside eksemplaride loomiseks teises isoleerimises. Andmete vahetamiseks isoleerimiste vahel kasutatakse tavaliselt sõnumeid SendPort ja ReceivePort kaudu.

Näide andmete edastamisest isoleerimiste vahel:

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('Saabitud väärtus: \\${myObject.value}');
  });
}

Sellisel viisil ei saa klassi otse edastada, kuid andmeid saab edastada objekti taastamiseks teises isoleerimises.