Sobes.tech
Junior — Middle

Ar galima perduoti klasę į izoliaciją ar modulį?

sobes.tech AI

Atsakymas iš AI

Flutter'e, izoliacija (Isolate) yra atskiras vykdymo srautas, kuris nesidalija atmintimi su pagrindiniu srautu. Negalima tiesiogiai perduoti klasės ar objekto iš vieno izoliato į kitą, nes jie negali dalintis atmintimi.

Tačiau, serializuojami duomenys (pvz., primityvūs, sąrašai, žemėlapiai) gali būti perduodami, ir jie gali būti naudojami kuriant klasių egzempliorius kitoje izoliacijoje. Duomenų mainams tarp izoliacijų dažnai naudojamos žinutės per SendPort ir ReceivePort.

Pavyzdys duomenų perdavimo tarp izoliacijų:

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('Gautas vertė: \\${myObject.value}');
  });
}

Šiuo būdu, klasė negali būti perduota tiesiogiai, tačiau duomenys gali būti perduoti objekto rekonstrukcijai kitoje izoliacijoje.