diff --git a/example/assets/berlin.mbtiles b/example/assets/berlin.mbtiles deleted file mode 100644 index 84b18c60a..000000000 Binary files a/example/assets/berlin.mbtiles and /dev/null differ diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig index 592ceee85..e8efba114 100644 --- a/example/ios/Flutter/Debug.xcconfig +++ b/example/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig index 592ceee85..399e9340e 100644 --- a/example/ios/Flutter/Release.xcconfig +++ b/example/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/example/ios/Podfile b/example/ios/Podfile new file mode 100644 index 000000000..1e8c3c90a --- /dev/null +++ b/example/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock new file mode 100644 index 000000000..2ad23941e --- /dev/null +++ b/example/ios/Podfile.lock @@ -0,0 +1,43 @@ +PODS: + - Flutter (1.0.0) + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) + - location (0.0.1): + - Flutter + - path_provider (0.0.1): + - Flutter + - sqflite (0.0.2): + - Flutter + - FMDB (>= 2.7.5) + +DEPENDENCIES: + - Flutter (from `Flutter`) + - location (from `.symlinks/plugins/location/ios`) + - path_provider (from `.symlinks/plugins/path_provider/ios`) + - sqflite (from `.symlinks/plugins/sqflite/ios`) + +SPEC REPOS: + trunk: + - FMDB + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + location: + :path: ".symlinks/plugins/location/ios" + path_provider: + :path: ".symlinks/plugins/path_provider/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/ios" + +SPEC CHECKSUMS: + Flutter: 0e3d915762c693b495b44d77113d4970485de6ec + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740 + path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c + sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 + +PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c + +COCOAPODS: 1.10.0 diff --git a/example/lib/main.dart b/example/lib/main.dart index 7addcbea4..4a86ef8af 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -10,7 +10,6 @@ import './pages/map_controller.dart'; import './pages/marker_anchor.dart'; import './pages/moving_markers.dart'; import './pages/offline_map.dart'; -import './pages/offline_mbtiles_map.dart'; import './pages/on_tap.dart'; import './pages/overlay_image.dart'; import './pages/plugin_api.dart'; @@ -48,7 +47,6 @@ class MyApp extends StatelessWidget { PluginScaleBar.route: (context) => PluginScaleBar(), PluginZoomButtons.route: (context) => PluginZoomButtons(), OfflineMapPage.route: (context) => OfflineMapPage(), - OfflineMBTilesMapPage.route: (context) => OfflineMBTilesMapPage(), OnTapPage.route: (context) => OnTapPage(), MovingMarkersPage.route: (context) => MovingMarkersPage(), CirclePage.route: (context) => CirclePage(), diff --git a/example/lib/pages/offline_mbtiles_map.dart b/example/lib/pages/offline_mbtiles_map.dart deleted file mode 100644 index 7e62c4446..000000000 --- a/example/lib/pages/offline_mbtiles_map.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_map/flutter_map.dart'; -import 'package:latlong/latlong.dart'; - -import '../widgets/drawer.dart'; - -class OfflineMBTilesMapPage extends StatelessWidget { - static const String route = '/offline_mbtiles_map'; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text('Offline Map (using MBTiles)')), - drawer: buildDrawer(context, OfflineMBTilesMapPage.route), - body: Padding( - padding: EdgeInsets.all(8.0), - child: Column( - children: [ - Padding( - padding: EdgeInsets.only(top: 8.0, bottom: 8.0), - child: Text( - 'This is an offline map of Berlin, Germany using a single MBTiles file. The file was built from the Stamen toner map data (http://maps.stamen.com).\n\n' - '(Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL.)'), - ), - Flexible( - child: FlutterMap( - options: MapOptions( - center: LatLng( - 52.516144, - 13.404938, - ), - minZoom: 12.0, - maxZoom: 14.0, - zoom: 12.0, - swPanBoundary: LatLng(52.492205, 13.282081), - nePanBoundary: LatLng(52.540084, 13.527795), - ), - layers: [ - TileLayerOptions( - tileProvider: MBTilesImageProvider.fromAsset( - 'assets/berlin.mbtiles'), - maxZoom: 14.0, - backgroundColor: Colors.white, - tms: true), - ], - ), - ), - ], - ), - ), - ); - } -} diff --git a/example/lib/widgets/drawer.dart b/example/lib/widgets/drawer.dart index 02766fb63..f51a56ded 100644 --- a/example/lib/widgets/drawer.dart +++ b/example/lib/widgets/drawer.dart @@ -10,7 +10,6 @@ import '../pages/map_controller.dart'; import '../pages/marker_anchor.dart'; import '../pages/moving_markers.dart'; import '../pages/offline_map.dart'; -import '../pages/offline_mbtiles_map.dart'; import '../pages/on_tap.dart'; import '../pages/overlay_image.dart'; import '../pages/plugin_api.dart'; @@ -127,12 +126,6 @@ Drawer buildDrawer(BuildContext context, String currentRoute) { OfflineMapPage.route, currentRoute, ), - _buildMenuItem( - context, - const Text('Offline Map (using MBTiles)'), - OfflineMBTilesMapPage.route, - currentRoute, - ), _buildMenuItem( context, const Text('OnTap'), diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 3423937b1..1e5a4922f 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -19,7 +19,6 @@ dev_dependencies: flutter: uses-material-design: true assets: - - assets/berlin.mbtiles - assets/map/anholt_osmbright/12/2177/ - assets/map/anholt_osmbright/12/2178/ - assets/map/anholt_osmbright/12/2179/ diff --git a/lib/flutter_map.dart b/lib/flutter_map.dart index cc2254036..683e61065 100644 --- a/lib/flutter_map.dart +++ b/lib/flutter_map.dart @@ -22,7 +22,6 @@ export 'package:flutter_map/src/layer/overlay_image_layer.dart'; export 'package:flutter_map/src/layer/polygon_layer.dart'; export 'package:flutter_map/src/layer/polyline_layer.dart'; export 'package:flutter_map/src/layer/tile_layer.dart'; -export 'package:flutter_map/src/layer/tile_provider/mbtiles_image_provider.dart'; export 'package:flutter_map/src/layer/tile_provider/tile_provider.dart'; export 'package:flutter_map/src/plugins/plugin.dart'; diff --git a/lib/src/layer/tile_provider/mbtiles_image_provider.dart b/lib/src/layer/tile_provider/mbtiles_image_provider.dart deleted file mode 100644 index 79979914c..000000000 --- a/lib/src/layer/tile_provider/mbtiles_image_provider.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'dart:io'; -import 'dart:typed_data'; -import 'dart:ui'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_map/flutter_map.dart'; -import 'package:flutter_map/src/layer/tile_provider/tile_provider.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:sqflite/sqflite.dart'; - -class MBTilesImageProvider extends TileProvider { - final String asset; - final File mbtilesFile; - - Future database; - Database _loadedDb; - bool isDisposed = false; - - MBTilesImageProvider._({this.asset, this.mbtilesFile}) { - database = _loadMBTilesDatabase(); - } - - factory MBTilesImageProvider.fromAsset(String asset) => - MBTilesImageProvider._(asset: asset); - - factory MBTilesImageProvider.fromFile(File mbtilesFile) => - MBTilesImageProvider._(mbtilesFile: mbtilesFile); - - Future _loadMBTilesDatabase() async { - if (_loadedDb == null) { - var file = mbtilesFile ?? await copyFileFromAssets(); - - _loadedDb = await openDatabase(file.path); - - if (isDisposed) { - await _loadedDb.close(); - _loadedDb = null; - throw Exception('Tileprovider is already disposed'); - } - } - - return _loadedDb; - } - - @override - void dispose() { - if (_loadedDb != null) { - _loadedDb.close(); - _loadedDb = null; - } - isDisposed = true; - } - - Future copyFileFromAssets() async { - var tempDir = await getTemporaryDirectory(); - var filename = asset.split('/').last; - var file = File('${tempDir.path}/$filename'); - - var data = await rootBundle.load(asset); - file.writeAsBytesSync( - data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes), - flush: true); - return file; - } - - @override - ImageProvider getImage(Coords coords, TileLayerOptions options) { - var x = coords.x.round(); - var y = options.tms - ? invertY(coords.y.round(), coords.z.round()) - : coords.y.round(); - var z = coords.z.round(); - - return MBTileImage( - database, - Coords(x, y)..z = z, - mbtilesFile?.path ?? asset, - ); - } -} - -class MBTileImage extends ImageProvider { - final Future database; - final Coords coords; - final String filePath; - - MBTileImage(this.database, this.coords, this.filePath); - - @override - ImageStreamCompleter load(MBTileImage key, decode) { - return MultiFrameImageStreamCompleter( - codec: _loadAsync(key), - scale: 1, - informationCollector: () sync* { - yield DiagnosticsProperty('Image provider', this); - yield DiagnosticsProperty('Image key', key); - }); - } - - Future _loadAsync(MBTileImage key) async { - assert(key == this); - - final db = await key.database; - List result = await db.rawQuery('select tile_data from tiles ' - 'where zoom_level = ${coords.z} AND ' - 'tile_column = ${coords.x} AND ' - 'tile_row = ${coords.y} limit 1'); - final Uint8List bytes = - result.isNotEmpty ? result.first['tile_data'] : null; - - if (bytes == null) { - return Future.error('Failed to load tile for coords: $coords'); - } - return await PaintingBinding.instance.instantiateImageCodec(bytes); - } - - @override - Future obtainKey(ImageConfiguration configuration) { - return SynchronousFuture(this); - } - - @override - int get hashCode => coords.hashCode; - - @override - bool operator ==(other) { - return other is MBTileImage && - coords == other.coords && - filePath == other.filePath; - } -} diff --git a/lib/src/layer/tile_provider/tile_provider.dart b/lib/src/layer/tile_provider/tile_provider.dart index 5428d055d..be9bac443 100644 --- a/lib/src/layer/tile_provider/tile_provider.dart +++ b/lib/src/layer/tile_provider/tile_provider.dart @@ -6,8 +6,6 @@ import 'package:flutter_image/network.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:flutter_map/src/core/util.dart' as util; -export 'package:flutter_map/src/layer/tile_provider/mbtiles_image_provider.dart'; - abstract class TileProvider { const TileProvider(); diff --git a/pubspec.yaml b/pubspec.yaml index c7fd1b029..fa8335b10 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,7 +19,6 @@ dependencies: async: ^2.1.0 flutter_image: ^3.0.0 cached_network_image: ^2.0.0 - sqflite: ^1.1.5 path_provider: ^1.6.7 vector_math: ^2.0.0 proj4dart: ^1.0.4