Skip to content

Commit 87b55de

Browse files
committed
Use OPG Tiles / Use correct OTP Endpoint
1 parent 4e484ca commit 87b55de

File tree

5 files changed

+160
-9
lines changed

5 files changed

+160
-9
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import 'package:hive/hive.dart';
2+
3+
class MapTileLocalStorage {
4+
static const String customLayersStorage = "map_tile_layers_storage";
5+
6+
late Box _box;
7+
8+
MapTileLocalStorage() {
9+
_box = Hive.box(customLayersStorage);
10+
}
11+
12+
Future<void> save(String mapLayerId) async {
13+
await _box.put(customLayersStorage, mapLayerId);
14+
}
15+
16+
Future<String?> load() async {
17+
return _box.get(customLayersStorage);
18+
}
19+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:cached_network_image/cached_network_image.dart';
3+
import 'package:flutter_map/flutter_map.dart';
4+
import 'package:trufi_core/base/blocs/map_tile_provider/map_tile_provider.dart';
5+
6+
class OpenPlaceGuideMapTile extends MapTileProvider {
7+
@override
8+
List<LayerOptions> buildTileLayerOptions() {
9+
return [
10+
TileLayerOptions(
11+
urlTemplate: "https://africa.tiles.openplaceguide.org/styles/bright/{z}/{x}/{y}.png",
12+
tileProvider: const DefaultMapTileCaching(),
13+
),
14+
];
15+
}
16+
17+
@override
18+
String get id => "OpenPlaceGuideMapTile";
19+
20+
@override
21+
WidgetBuilder get imageBuilder => (context) => Image.asset(
22+
"assets/images/OpenMapTiles.png",
23+
package: "trufi_core",
24+
fit: BoxFit.cover,
25+
);
26+
27+
@override
28+
String name(BuildContext context) {
29+
return id;
30+
}
31+
}
32+
33+
class OSMMapLayer extends MapTileProvider {
34+
final String? mapTilesUrl;
35+
36+
OSMMapLayer({
37+
required this.mapTilesUrl,
38+
}) : super();
39+
40+
@override
41+
List<LayerOptions> buildTileLayerOptions() {
42+
return [
43+
TileLayerOptions(
44+
urlTemplate: mapTilesUrl,
45+
subdomains: ['a', 'b', 'c'],
46+
tileProvider: const DefaultMapTileCaching(),
47+
),
48+
];
49+
}
50+
51+
@override
52+
String get id => "OpenPlaceGuideMapTile";
53+
54+
@override
55+
WidgetBuilder get imageBuilder => (context) => Image.asset(
56+
"assets/images/OpenMapTiles.png",
57+
fit: BoxFit.cover,
58+
);
59+
60+
@override
61+
String name(BuildContext context) {
62+
return id;
63+
}
64+
}
65+
66+
class DefaultMapTileCaching extends TileProvider {
67+
const DefaultMapTileCaching();
68+
69+
@override
70+
ImageProvider getImage(Coords coords, TileLayerOptions options) {
71+
return CachedNetworkImageProvider(getTileUrl(coords, options));
72+
}
73+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import 'package:bloc/bloc.dart';
2+
import 'package:collection/collection.dart';
3+
import 'package:equatable/equatable.dart';
4+
import 'package:meta/meta.dart';
5+
import 'package:trufi_core/base/blocs/map_tile_provider/map_tile_provider.dart';
6+
7+
import 'map_tile_local_storage.dart';
8+
9+
part 'map_tile_provider_state.dart';
10+
11+
class MapTileProviderCubit extends Cubit<MapTileProviderState> {
12+
final MapTileLocalStorage _localStorage = MapTileLocalStorage();
13+
final List<MapTileProvider> mapTileProviders;
14+
15+
MapTileProviderCubit({
16+
required this.mapTileProviders,
17+
}) : super(
18+
MapTileProviderState(currentMapTileProvider: mapTileProviders.first),
19+
) {
20+
_loadSavedStatus();
21+
}
22+
23+
Future<void> _loadSavedStatus() async {
24+
final mapTileSavedId = await _localStorage.load();
25+
final MapTileProvider? mapTileProvider = mapTileProviders.firstWhereOrNull(
26+
(element) => element.id == mapTileSavedId,
27+
);
28+
emit(state.copyWith(currentMapTileProvider: mapTileProvider));
29+
}
30+
31+
void changeMapTileProvider(MapTileProvider mapTileProvider) {
32+
emit(state.copyWith(currentMapTileProvider: mapTileProvider));
33+
_localStorage.save(mapTileProvider.id);
34+
}
35+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
part of 'map_tile_provider_cubit.dart';
2+
3+
@immutable
4+
class MapTileProviderState extends Equatable {
5+
final MapTileProvider currentMapTileProvider;
6+
7+
const MapTileProviderState({
8+
required this.currentMapTileProvider,
9+
});
10+
11+
MapTileProviderState copyWith({
12+
MapTileProvider? currentMapTileProvider,
13+
}) {
14+
return MapTileProviderState(
15+
currentMapTileProvider:
16+
currentMapTileProvider ?? this.currentMapTileProvider,
17+
);
18+
}
19+
20+
@override
21+
List<Object> get props => [currentMapTileProvider];
22+
}

lib/main.dart

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,31 @@ import 'package:trufi_core/base/widgets/drawer/menu/social_media_item.dart';
66
import 'package:trufi_core/default_values.dart';
77
import 'package:trufi_core/trufi_core.dart';
88
import 'package:trufi_core/trufi_router.dart';
9+
import 'package:addismaptransit_app/base/blocks/map_tile_provider/map_tile_provider.dart';
910

1011
void main() async {
1112
WidgetsFlutterBinding.ensureInitialized();
1213
await initHiveForFlutter();
1314
runApp(
1415
TrufiApp(
15-
appNameTitle: 'ExampleApp',
16+
appNameTitle: 'AddisMapTransit',
1617
blocProviders: [
1718
...DefaultValues.blocProviders(
18-
otpEndpoint: "https://cbba.trufi.app/otp",
19-
otpGraphqlEndpoint: "https://cbba.trufi.app/otp/index/graphql",
19+
otpEndpoint: "https://pt.addismap.com/otp/routers/default",
20+
otpGraphqlEndpoint: "https://pt.addismap.com/otp/routers/default/index/graphql",
2021
mapConfiguration: MapConfiguration(
21-
center: const TrufiLatLng(-17.392600, -66.158787),
22+
center: const TrufiLatLng(9.005401, 38.763611),
2223
),
23-
searchAssetPath: "assets/data/search.json",
24-
photonUrl: "https://cbba.trufi.app/photon",
24+
searchAssetPath: "",
25+
photonUrl: "https://photon.komoot.io",
26+
mapTileProviders: [OpenPlaceGuideMapTile()]
2527
),
2628
],
2729
trufiRouter: TrufiRouter(
2830
routerDelegate: DefaultValues.routerDelegate(
29-
appName: 'ExampleApp',
30-
cityName: 'City',
31-
countryName: 'Country',
31+
appName: 'AddisMapTransit',
32+
cityName: 'Addis Ababa',
33+
countryName: 'Ethiopia',
3234
backgroundImageBuilder: (_) {
3335
return Image.asset(
3436
'assets/images/drawer-bg.jpg',

0 commit comments

Comments
 (0)