diff --git a/lib/core/md_yaml_doc_loader.dart b/lib/core/md_yaml_doc_loader.dart index 293843c8..e75ad0bf 100644 --- a/lib/core/md_yaml_doc_loader.dart +++ b/lib/core/md_yaml_doc_loader.dart @@ -1,6 +1,8 @@ import 'dart:io'; import 'dart:isolate'; +import 'package:synchronized/synchronized.dart'; + import 'package:gitjournal/core/md_yaml_doc.dart'; import 'package:gitjournal/core/md_yaml_doc_codec.dart'; @@ -9,13 +11,19 @@ class MdYamlDocLoader { ReceivePort _receivePort = ReceivePort(); SendPort _sendPort; + var _loadingLock = Lock(); + Future _initIsolate() async { if (_isolate != null) return; - _isolate = await Isolate.spawn(_isolateMain, _receivePort.sendPort); - var data = await _receivePort.first; - assert(data is SendPort); - _sendPort = data as SendPort; + return await _loadingLock.synchronized(() async { + if (_isolate != null) return; + _isolate = await Isolate.spawn(_isolateMain, _receivePort.sendPort); + + var data = await _receivePort.first; + assert(data is SendPort); + _sendPort = data as SendPort; + }); } Future loadDoc(String filePath) async { diff --git a/pubspec.lock b/pubspec.lock index a7d2dd9d..fa449f28 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -640,6 +640,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.5" + synchronized: + dependency: "direct main" + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 031dec6c..201b913f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,6 +36,7 @@ dependencies: connectivity: ^0.4.6+1 flutter_emoji: ">= 2.0.0" git_url_parse2: ^0.0.1 + synchronized: ^2.2.0 dev_dependencies: flutter_launcher_icons: "^0.7.2"