Skip to content

Commit

Permalink
Update dart definitions of OfflineRegion and OfflineRegionDefinition
Browse files Browse the repository at this point in the history
`downloadOfflineRegion` now accepts a separate `metadata` arg in
addition to the `definition`

The `definition` parameter to `invokeMethod` (formerly `region`) is no
longer a JSON string, but the object itself, so deserialization may have
to change.
  • Loading branch information
shroff committed Feb 24, 2021
1 parent 26db77e commit 71186fb
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 54 deletions.
20 changes: 12 additions & 8 deletions lib/src/global.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Future<List<OfflineRegion>> mergeOfflineRegions(
},
);
Iterable regions = json.decode(regionsJson);
return regions.map((region) => OfflineRegion.fromJson(region)).toList();
return regions.map((region) => OfflineRegion.fromMap(region)).toList();
}

Future<List<OfflineRegion>> getListOfRegions({String accessToken}) async {
Expand All @@ -41,12 +41,14 @@ Future<List<OfflineRegion>> getListOfRegions({String accessToken}) async {
},
);
Iterable regions = json.decode(regionsJson);
return regions.map((region) => OfflineRegion.fromJson(region)).toList();
return regions.map((region) => OfflineRegion.fromMap(region)).toList();
}

Future<OfflineRegion> updateOfflineRegionMetadata(
int id, Map<String, dynamic> metadata,
{String accessToken}) async {
int id,
Map<String, dynamic> metadata, {
String accessToken,
}) async {
final regionJson = await _globalChannel.invokeMethod(
'updateOfflineRegionMetadata',
<String, dynamic>{
Expand All @@ -56,7 +58,7 @@ Future<OfflineRegion> updateOfflineRegionMetadata(
},
);

return OfflineRegion.fromJson(json.decode(regionJson));
return OfflineRegion.fromMap(json.decode(regionJson));
}

Future<dynamic> setOfflineTileCountLimit(int limit, {String accessToken}) =>
Expand All @@ -78,7 +80,8 @@ Future<dynamic> deleteOfflineRegion(int id, {String accessToken}) =>
);

Future<OfflineRegion> downloadOfflineRegion(
OfflineRegionDefinition region, {
OfflineRegionDefinition definition, {
Map<String, dynamic> metadata = const {},
String accessToken,
Function(DownloadRegionStatus event) onEvent,
}) async {
Expand All @@ -89,7 +92,8 @@ Future<OfflineRegion> downloadOfflineRegion(
_globalChannel.invokeMethod('downloadOfflineRegion', <String, dynamic>{
'accessToken': accessToken,
'channelName': channelName,
'region': json.encode(region._toJson())
'definition': definition.toMap(),
'metadata': metadata,
});

if (onEvent != null) {
Expand Down Expand Up @@ -137,5 +141,5 @@ Future<OfflineRegion> downloadOfflineRegion(
});
}

return OfflineRegion.fromJson(json.decode(await result));
return OfflineRegion.fromMap(json.decode(await result));
}
95 changes: 49 additions & 46 deletions lib/src/offline_region.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,88 +5,91 @@ part of mapbox_gl;
class OfflineRegionDefinition {
const OfflineRegionDefinition({
@required this.bounds,
@required this.metadata,
@required this.mapStyleUrl,
@required this.minZoom,
@required this.maxZoom,
this.includeIdeographs = false,
});

final LatLngBounds bounds;
final Map<String, dynamic> metadata;
final String mapStyleUrl;
final double minZoom;
final double maxZoom;
final bool includeIdeographs;

@override
String toString() =>
"$runtimeType, bounds = $bounds, mapStyleUrl = $mapStyleUrl, minZoom = $minZoom, maxZoom = $maxZoom";

Map<String, dynamic> _toJson() {
Map<String, dynamic> toMap() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['bounds'] = bounds.toList();
data['metadata'] = metadata;
data['mapStyleUrl'] = mapStyleUrl;
data['minZoom'] = minZoom;
data['maxZoom'] = maxZoom;
data['includeIdeographs'] = includeIdeographs;
return data;
}

@override
String toString() =>
"$runtimeType, bounds = $bounds, metadata = $metadata, mapStyleUrl = $mapStyleUrl, minZoom = $minZoom, maxZoom = $maxZoom";
}

/// Description of a downloaded region including its identifier.
class OfflineRegion extends OfflineRegionDefinition {
const OfflineRegion({
this.id,
LatLngBounds bounds,
Map<String, dynamic> metadata,
String mapStyleUrl,
double minZoom,
double maxZoom,
}) : super(
bounds: bounds,
metadata: metadata,
mapStyleUrl: mapStyleUrl,
minZoom: minZoom,
maxZoom: maxZoom);

final int id;

factory OfflineRegion.fromJson(Map<String, dynamic> json) {
if (json == null) {
return null;
}

return OfflineRegion(
id: json['id'],
bounds: json['bounds'] != null
? fromList(
json['bounds'],
factory OfflineRegionDefinition.fromMap(Map<String, dynamic> map) {
return OfflineRegionDefinition(
bounds: map['bounds'] != null
? _latLngBoundsFromList(
map['bounds'],
)
: null,
metadata: json['metadata'],
mapStyleUrl: json['mapStyleUrl'],
minZoom: json['minZoom'].toDouble(),
maxZoom: json['maxZoom'].toDouble(),
mapStyleUrl: map['mapStyleUrl'],
minZoom: map['minZoom'],
maxZoom: map['maxZoom'],
includeIdeographs: map['includeIdeographs'] ?? false,
);
}

static LatLngBounds fromList(dynamic json) {
static LatLngBounds _latLngBoundsFromList(List<dynamic> json) {
if (json == null) {
return null;
}
return LatLngBounds(
southwest: latLngFromJson(json[0]),
northeast: latLngFromJson(json[1]),
southwest: _latLngFromList(json[0]),
northeast: _latLngFromList(json[1]),
);
}

static LatLng latLngFromJson(dynamic json) {
static LatLng _latLngFromList(dynamic json) {
if (json == null) {
return null;
}
return LatLng(json[0], json[1]);
}


}

/// Description of a downloaded region including its identifier.
class OfflineRegion {
const OfflineRegion({
this.id,
this.definition,
this.metadata,
});

final int id;
final OfflineRegionDefinition definition;
final Map<String, dynamic> metadata;

factory OfflineRegion.fromMap(Map<String, dynamic> json) {
if (json == null) {
return null;
}

return OfflineRegion(
id: json['id'],
definition: OfflineRegionDefinition.fromMap(json['definition']),
metadata: json['metadata'],
);
}

@override
String toString() =>
"$runtimeType, id = $id, bounds = $bounds, metadata = $metadata, mapStyleUrl = $mapStyleUrl, minZoom = $minZoom, maxZoom = $maxZoom";
"$runtimeType, id = $id, definition = $definition, metadata = $metadata";
}

0 comments on commit 71186fb

Please sign in to comment.