Sobes.tech
Junior — Middle

Klassni izolatsiya yoki modulga o'tkazish mumkinmi?

sobes.tech AI

AIdan javob

Flutterda, izolyatsiya (Isolate) — bu alohida bajarish oqimi bo‘lib, u asosiy oqim bilan xotira bo‘lishmaydi. Bir izolyatdan boshqasiga to‘g‘ridan-to‘g‘ri sinf yoki ob'ektni uzatib bo‘lmaydi, chunki ular xotira bilan bo‘lisha olmaydi.

Ammo, seriyalash mumkin bo‘lgan ma'lumotlar (masalan, primitivlar, ro‘yxatlar, xaritalar) uzatish mumkin, ular boshqa izolyatda sinflar nusxalarini yaratish uchun ishlatilishi mumkin. Izolyatlar o‘rtasida ma'lumot almashish uchun odatda SendPort va ReceivePort orqali xabarlar yuboriladi.

Izolyatlar o‘rtasida ma'lumot uzatish misoli:

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

Shunday qilib, sinfni to‘g‘ridan-to‘g‘ri uzatib bo‘lmaydi, ammo ma'lumotlar uzatilib, boshqa izolyatda ob'ektni tiklash mumkin.