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 SendPort və ReceivePort 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.