downloadOfflineRegion function
Future<OfflineRegion>
downloadOfflineRegion(
- OfflineRegionDefinition definition, {
- Map<
String, dynamic> metadata = const {}, - dynamic onEvent(
- DownloadRegionStatus event
Implementation
Future<OfflineRegion> downloadOfflineRegion(
OfflineRegionDefinition definition, {
Map<String, dynamic> metadata = const {},
Function(DownloadRegionStatus event)? onEvent,
}) async {
String channelName =
'downloadOfflineRegion_${DateTime.now().microsecondsSinceEpoch}';
await _globalChannel
.invokeMethod('downloadOfflineRegion#setup', <String, dynamic>{
'channelName': channelName,
});
if (onEvent != null) {
EventChannel(channelName).receiveBroadcastStream().handleError((error) {
if (error is PlatformException) {
onEvent(Error(error));
return Error(error);
}
var unknownError = Error(
PlatformException(
code: 'UnknowException',
message:
'This error is unhandled by plugin. Please contact us if needed.',
details: error,
),
);
onEvent(unknownError);
return unknownError;
}).listen((data) {
final Map<String, dynamic> jsonData = json.decode(data);
DownloadRegionStatus? status;
switch (jsonData['status']) {
case 'start':
status = InProgress(0.0);
break;
case 'progress':
final dynamic value = jsonData['progress'];
double progress = 0.0;
if (value is int) {
progress = value.toDouble();
}
if (value is double) {
progress = value;
}
status = InProgress(progress);
break;
case 'success':
status = Success();
break;
}
onEvent(status ?? (throw 'Invalid event status ${jsonData['status']}'));
});
}
final result = await _globalChannel
.invokeMethod('downloadOfflineRegion', <String, dynamic>{
'definition': definition.toMap(),
'metadata': metadata,
});
return OfflineRegion.fromMap(json.decode(result));
}