Plugin for 'flutter_map' providing advanced caching functionality, with ability to download map regions for offline use. Also includes useful prebuilt widgets.

Overview

flutter_map_tile_caching

A plugin for the flutter_map library to provide an easy way to cache tiles and download map regions for offline use.

Pub likes pub points GitHub stars GitHub issues GitHub PRs

ko-fi

Installation

It is now recommended to use the v4 development version instead of the latest main version, due to significant developments/improvements and breaking changes.
Where possible (ie. except in production ready versions of your app), use the pre-releases of v4.

To install this plugin, use the normal installation method:

   > flutter pub add flutter_map_tile_caching

If you urgently need the most recent version of this package that hasn't been published to pub.dev yet, use this code snippet instead in your pubspec.yaml (please note that this method is not recommended):

    flutter_map_tile_caching:
        git:
            url: https://github.com/JaffaKetchup/flutter_map_tile_caching

After installing the package, import it into the neccessary files in your project:

import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart';

Android

A few more steps are required on Android due to the background download functionality, unfortunately even if you do not intend to use the functionality. This is due to the way the dependency used to perform background downloading works. For these steps please go here: background_fetch Installation Instructions For Android.

iOS

A few more steps are required on iOS due to the background download functionality, even though this functionality is unfortunately currently blocked on iOS. This is due to the way the dependency used to perform background downloading works. For these steps please go here: background_fetch Installation Instructions For iOS. You should not need to follow the instructions for BackgroundFetch.scheduleTask, but do so if you recieve build errors - the custom task identifiers asked for in the last step is exactly 'backgroundTileDownload'. Please note that this library has not been tested on iOS devices, so issues may arize. Please leave an issue if they do, and I'll try my best to debug and solve them.

Example

To view the example project, create a new project and copy/replace the existing 'main.dart' file with the 'main.dart' file from this project's example folder. Then add this library to the 'pubspec.yaml' file. Finally, follow the platform-specific installation instructions above to get your app to build successfully.

Alternatively, if you just want to see how it works quickly, you can run the example app on an Android device by installing the APK file found in the 'example' directory. Note, however, that this file may be a few versions old.

Functionality

This library provides 3 main functionalities and 4 main APIs:

  • Automatic Tile Caching (TileProvider API & Caches API)
  • Region Downloading (TileProvider API, Regions API, Downloading API & Caches API)
    • Easy Shape Chooser (Regions API)

These all work together to give you all you need to implement fully offline maps in your Flutter app.

API Details

You can see every class, method, extension and enumerable in the Dart auto generated docs (dartdoc). This contains everything available and a description on how to use them. You can also check the example for how all of these things fit together. However, for simplicity for new users to this project, the main/most useful/most common parts are below, and these can be looked up in the docs using the search functionality:

StorageCachingTileProvider()

Use this as the tile provider for your FlutterMap() to automatically cache tiles as your users pan (aka. browse) over them. Use the same 'instance' throughout your script to avoid duplicate conflicts. Read more about the caching behaviour below.

downloadRegion() and it's background counterpart

Use this to download large areas of a map before the user visits somewhere (for example before a hike in the wilderness). A region can currently be a rectangular region or a circular region. More types are planned for the future. Read more about the caching behaviour below.

Easy Shape Chooser

Use this as a 'layer' on your map to allow the user an easy way to select an area for downloading. Use the same 'instance' throughout your script to avoid duplicate conflicts. A region can currently be a rectangular region or a circular region. More types are planned for the future. This will be worked on in the future to bring better functionality.

Migrate to v3 from v2

Unfortunately, because so much has changed, the best way to migrate is to rewrite the appropriate areas of your project with the new features. I've tried to make v3 super easy to understand and use, even with all the new functionality, so I hope you don't find this too hard. Unfortunatley, the next major release may also require a large migration, as this library 'fully matures'.

Offline/Caching Behaviour

Because this is an offline first package, it may act a little differently to how you expect. Both areas that interact with caching are detailed below:

Whilst Browsing

'Browsing' in this library means panning, zooming and rotating through the map.

When a new tile is browsed, and the user is online, the tile will be fetched from the server and cached with a record of when it's expiry date is (dictated by the cachedValidDuration on the tile provider). If this tile is browsed again, and the user is online, the tile will still be taken from cache, even if the user is online, unless the tile has expired, in which case it will be refetched and cached again. This is known as 'cache-first' caching. If this tile is browsed again, but the user is not online, the tile will be taken from cache, even if the tile has expired. The network request will still be made, however, and it will fail silently. If the user is not online, and the tile has not been cached yet, the request will fail with an error to the console, but the app will carry on working as normal.

When Downloading Regions

Whilst using the downloadRegion() function (or it's background counterpart (see below)), every tile in the region will always be cached, even if the tile has been cached before but it hasn't expired. Every tile downloaded will then act like it has been browsed (see above).

Background Region Downloading

Instead of downloading in the foreground (on the main thread), there is an option on Android to start a download in the background.

This has several major advantages including better core app performace, ability to continue whilst the user is interacting with other app components, and (potential) ability to continue even whilst the user is in other apps or the device is locked.

The background download functionality is buggy and does not function as expected all the time on platforms other than Android, so that functionality has been disabled on all platforms except Android. This might change in the future, but there is no gurantee.

To have full background functionality including not being throttled by the system and being guaranteed to run even if the app is 'minimized', request the ignore battery optimizations permission by calling requestIgnoreBatteryOptimizations() before starting a background task. This will display a system interruption prompt to the user to allow or deny the permission. The background task will still run if the permission is denied, but only if the user is in the app - elsewhere, downloading is not guaranteed to be running.

Limitations, Known Bugs & Testing

  • This package does not support the web platform (due to the usage of dart:io and the sqflite package). A fix for this may appear in the future.

  • Support may be buggy for custom tile sizes (other than 256x256) or custom CRSs (other than Epsg3857()), but attempts have been made at making this library compatible with those using inbuilt functionality from flutter_map. Further testing for compatibility will continue in the v4.0.0 release.

  • Using TileStorageCachingManager.changeMaxTileAmount() will unfortunately not change the assertions in the tile provider/downloader. Until v4.0.0, the maximum number of downloadable tiles at once is 20000. This will be fixed by v4.0.0, as this release will include other refactorings.

  • The circle region functions get less accurate the larger the radius of the circle. To prevent interruptive errors, the values of the calculation have been clamped to a valid minimum and maximum, but this causes side effects. To prevent these side effects, only use circles smaller than the average size of a European country, and be cautious when using circles around extremes (the equator, the longitudes of 180 or -180, and the latiudes of -90 or 90). If selecting a large region or working around the aformentioned extremes, use rectangular regions instead. A fix for this may appear in the future.

This package has only been tested on Android devices (one real Android 8, one Android 8 emulator, and one Android 11 emulator). However, due to the large amounts of functionality, each with many different variations, it is nearly impossible to find many bugs. Therefore, if you find a bug, please do file an Issue on GitHub, and I will do my very best to get it fixed quickly.

Supporting Me

A donation through my Ko-Fi page would be infinitly appriciated: ko-fi

but, if you can't or won't, a star on GitHub and a like on pub.dev would also go a long way!

Every donation gives me fuel to continue my open-source projects and lets me know that I'm doing a good job.

Credits

The basis of this library was originally coded by bugDim88, and improved upon by multiple people. You can see the original pull request here: pull request #564 on fleaflet/flutter_map.

Since v2 here, other contributors have also been involved, who can be seen in GitHub. The only old part remaining that that coder coded is the database manager script (with all the SQL in it), but the aforementioned main coder still inspired the rest of this project and is therefore the 'founder'. Thanks to you, bugDim88!

Comments
  • Implement Caching

    Implement Caching

    Hello, I have a project in a very advanced stage already, and I wanted to implement caching in it, so I can use your api, will I need to redo all of it? Or do you have one that you don't need? I saw that your api is for Flutter_map, and I'm using flutter_map. Do I need to redo it all to be able to use your api?

    bug invalid question/help 
    opened by AlysonTrizotto 43
  • [BUG] `checkTileCached` method appears broken

    [BUG] `checkTileCached` method appears broken

    What do you want implemented?

    Download cached map tiles as image file permanently, so that i can use map when offline.

    What other alternatives are available?

    No response

    Can you provide any other information?

    No response

    Platforms Affected

    Android

    Severity

    Annoying: Currently have to use workarounds

    Requirements

    • [X] I agree to follow this project's Code of Conduct
    • [X] I am using the latest stable version of this package
    • [X] I have checked for similar feature requests which may be duplicates
    bug invalid 
    opened by caini1213 34
  • [BUG] Example app on Windows desktop throws when starting download

    [BUG] Example app on Windows desktop throws when starting download

    Describe The Bug When running the example app on Windows desktop, an exception is thrown when clicking the arrow to start the download. No window appears to set the download settings and choosing to download in foreground.

    PlatformException (PlatformException(notAndroid, The background download feature is only available on Android due to internal limitations., null, null))

    Expected Behaviour I would expect the download settings page to appear and being able to download in foreground.

    Screenshots & Recordings If possible, add screenshots or recordings to help explain your problem. This can quickly improve diagnosis of the issue.

    Additional Information Add any other context about the problem here, or remove this section.


    Doctors Report

    Paste your report from `flutter doctor` inside here
    

    To Reproduce Steps to reproduce the behaviour:

    1. Open app in Windows desktop
    2. Open download
    3. Select region
    4. Hit arrow button to open download page
    5. Exception thrown...

    Severity This will help us to label the issue quicker and decide what needs attention first. Only choose fatal if the entire app crashes, otherwise choose non-fatal.

    • [ ] Non-Fatal
    • [ x] Fatal / App Crashes

    Frequency/Rarity This will help us to label the issue quicker and decide what needs attention first.

    • [ ] Once
    • [ ] Uncommon
    • [ ] Common
    • [ x] Always

    Applicable Platforms Only select those that you've tested on - one or more. If possible, test on a variety of platforms.

    • [ ] Android
    • [ ] iOS
    • [ ] Web
    • [ x] Windows
    • [ ] Others (beta platforms)
    bug 
    opened by pamtbaau 31
  • Version 5

    Version 5

    Currently completed tasks:

    • [x] Remove artefacts and deprecated APIs from v3 to v4 migration
    • [x] Use a simpler, shorter API to use most functionality (see below)
    • [x] Separate tile storage from other storage, such as metadata and stat caching - allowing for...
      • [x] Cache expensive statistics in the filesystem, thus greatly increasing performance
      • [x] Add of more complex statistics, such as suggested in a comment (https://github.com/JaffaKetchup/flutter_map_tile_caching/pull/44#issuecomment-1160825205)
    • [x] Allow more than one download recovery per store
    • [x] Add metadata - simple key/value pair filesystem based - storage
    • [x] Add filesystem migration detection and methods for v4 stores

    Other planned tasks such as:

    • Archiving of stores and exporting to external storage and/or sharing
    • Methods to conveniently use 'flutter_osrm' (currently in unstable alpha)

    ... will now be implemented at a later stage, potentially as part of v5.1.0


    There will be major breaking changes as part of this. Apologies for any inconvenience caused by this.

    • v4 stores will be incompatible with v5 (this may be fixed by a built-in detector and fixer)
    • v4 syntax will be mostly incompatible with v5

    There is currently no due date. In fact, at present, there is no guarantee that this will be implemented, due to external limitations. I have not pre-tested anything, so all is subject to change.

    enhancement 
    opened by JaffaKetchup 29
  • [BUG] Cannot reset map tiles

    [BUG] Cannot reset map tiles

    What is the bug? As of v4.0.0-dev.7, resetting the map after changing the templateURL no longer works to reset all displayed tiles and use the new source. Since v4.0.0-dev.7, some jank still occurs when loading new tiles in a map, although this is greatly reduced by running on a physical device in release mode.

    What do you expect to happen? The map should briefly show blank, then load tiles from a new store/source; as seen in v4.0.0-dev.6.

    Reproduction Steps to reproduce the behaviour:

    1. Define two template URLs and initiate two cache stores.
    2. At the same time of changing the template URL, change the cache store.
    3. Call a reset method on the map
    4. Tiles do not reset

    Additional context Due to latest performance improvements in v4.0.0-dev.7, likely because of the custom ImageProvider caching images too heavily.

    bug 
    opened by JaffaKetchup 29
  • Version 4

    Version 4

    See below comment for finalised to-do list. This list will still be updated, but the aforementioned list has less items and gives a better time frame indication.
    In order of priority (note that this list is subject to change, and not all of the below may actually be completed):

    • [x] Support Flutter 2.5 (closes #26)
    • [x] Update to a filesystem solution instead of sqflite
    • [x] Implement automated tests
    • [x] Improve DownloadProgress with more statistics
    • [x] Add a way to recover downloads that have been incorrectly stopped
    • [x] Allow better selection of caching behaviour
    • [x] Remove 'network-to-file-image' dependency if necessary
    • [x] Increase bulk download speeds through simultaneous download threads (merges #25)
    • [x] Add option to prevent redownloading existing tiles (closes #23)
    • [x] Add option to prevent downloading tiles made of sea to save space.
    • [x] Use https://github.com/fleaflet/flutter_map/pull/667 in example app
    • [x] Add line region type

    Unfortunately, these remaining features are taking a long time to develop, and therefore will likely be part of the next version.

    • Add functionality to preload surroundings (closes #12)
    • Add widget to automatically handle source switching?
    • More prebuilt solutions including a ready-to-go user-friendly cache manager screen
    • Support for a potentially upcoming library (https://github.com/JaffaKetchup/flutter_osrm (currently in experimental alpha, should not be used))
    documentation enhancement high priority 
    opened by JaffaKetchup 21
  • Ability to pre-load surrounding tiles when browsing

    Ability to pre-load surrounding tiles when browsing

    Hi, thank you for the effort in making this plugin.

    I would like to get some clarification:

    • Do I need to explicitly call downloadRegion to download a new Area, it does not cache automatically when a tile is downloaded when the map is moved?
    • If I call downloadRegion on every map move, do tiles get downloaded again regardless if they are already downloaded and cached?
    enhancement blocked 
    opened by JankoLancer 19
  • [BUG] Missing Additional Setup Instructions

    [BUG] Missing Additional Setup Instructions

    What is the bug?

    Library affects uploading to Testflight. I hope it's happened because of the permission handler or file picker, maybe.

    Predication:

    1. Apple for me now doesn't send emails with warnings and doesn't display builds with warnings for me (Apple side issue).

    I think flutter_map_tile_caching provoke some warning on Apple side.

    What is the expected behaviour?

    The project appears on Testflight without warnings.

    How can we reproduce this issue?

    1. Add [flutter_map_tile_caching](https://github.com/JaffaKetchup/flutter_map_tile_caching) to project
    2. Projects don't appear on Testflight. (for me, for others I think it will be a warning)
    

    Do you have a potential solution?

    Maybe we need to document that we need to annotate something in Info.plist according to the permission handler.

    Can you provide any other information?

    No response

    Platforms Affected

    iOS

    Severity

    Obtrusive: Prevents normal functioning but causes no errors in the console

    Frequency

    Consistently: Always occurs at the same time and location

    Requirements

    • [X] I agree to follow this project's Code of Conduct
    • [X] My Flutter/Dart installation is unaltered, and flutter doctor finds no relevant issues
    • [X] I am using the latest stable version of this package
    • [X] I have checked the FAQs section on the documentation website
    • [X] I have checked for similar issues which may be duplicates
    documentation 
    opened by yaroslav13 15
  • Ability to cache multiple tile sets (same coordinates but different style)

    Ability to cache multiple tile sets (same coordinates but different style)

    I have a button for toggling between two distinct map styles (street and satellite). However, because of the (awesome) map caching when I switch styles the map layer will stay the same because it's already been cached (which is the correct and expected behaviour). Would it be possible to add a parameter to the TileLayerOptions that allowed for additional caches (like a subfolder) so if there was a value passed in it would store/retrieve the tiles to/from that "sub cache". And if you didn't need this functionality the parameter could just be left empty and it would default to the main cache.

    My current solution is to use the NonCachingNetworkTileProvider whenever the user toggles for the second style (satellite in my case) which works fine but obviously if they end up using that style primarily they lose out on the tile caching benefits.

    I suspect I won't be the only person with this issue and if there is a better way of doing this then please suggest it!

    enhancement high priority 
    opened by bmason8 14
  • More region selection options

    More region selection options

    Describe the solution you'd like Cache tiles for a specific area given map center and radius in kilometers.

    Is your feature request related to a problem? Please describe. I am trying to apply some caching to a map so it would not have to load all the tiles, let's say, for a specific small city. The goal is to have the map pre-cached for an area of around 10km.

    Describe alternatives you've considered So far what I have thought of doing was to get the 4 corners of the current area and cache tiles surrounding those NW, SE, SW and SW points but it seems like too much work and error prone for something it seems to me it would be a very common use case.

    Is there any better way of achieving this with the current state of the plugin? Am I missing something?

    Thanks a lot for the plugin and all the good work.

    enhancement 
    opened by danielocampo2 14
  • Migration to null-safety

    Migration to null-safety

    This should be fully working. As soon as the branch gets released as official release, I will update this PR appropriately and you can merge this PR right after that.

    Alternatively, you can merge this right now and I will create another PR at a later point or you change it yourself then :)

    Closes #1

    enhancement high priority 
    opened by ThexXTURBOXx 11
  • [BUG] 'flutter_background' blocking build

    [BUG] 'flutter_background' blocking build

    What is the bug?

    Due to outdated gradle version in currentrly published flutter_background plugin, this plugin cannot be built. There's an issuefor this.

    That was fixed in fcce0d57525802b6f720dee0a080a10a0feaca4b, but published version of that plugin does not contain this commit.

    > Could not resolve com.google.jimfs:jimfs:1.1. Required by: project :flutter_background > com.android.tools.build:gradle:3.5.0 > com.android.tools.build:builder:3.5.0 > com.android.tools:sdklib:26.5.0 > com.android.tools:repository:26.5.0 > Could not resolve com.google.jimfs:jimfs:1.1. > Could not get resource 'https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom'. > Could not HEAD 'https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom'. > The server may not support the client's requested TLS protocol versions: (TLSv1.2, TLSv1.3). You may need to configure the client to allow other protocols to be used. See: https://docs.gradle.org/7.5.1/userguide/build_environment.html#gradle_system_properties > PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed

    What is the expected behaviour?

    Build successful

    How can we reproduce this issue?

    No response

    Do you have a potential solution?

    No response

    Can you provide any other information?

    No response

    Platforms Affected

    Android

    Severity

    Fatal: Causes the application to crash

    Frequency

    Consistently: Always occurs at the same time and location

    Requirements

    • [X] I agree to follow this project's Code of Conduct
    • [X] My Flutter/Dart installation is unaltered, and flutter doctor finds no relevant issues
    • [X] I am using the latest stable version of this package
    • [X] I have checked the FAQs section on the documentation website
    • [X] I have checked for similar issues which may be duplicates
    bug high priority blocked 
    opened by andreystavitsky 11
  • [FEATURE] Add method to catch tile retrieval error

    [FEATURE] Add method to catch tile retrieval error

    What is the bug?

    I sometimes see this error in Crashlytics. I have added exception handling, but the error somehow still slips through to Crashlytics. What is the proper way to catch this, so it is not reported to Crashlytics?

    Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: FMTCBrowsingError: Failed to load the tile from the cache or the network because it was missing from the cache and the server responded with a HTTP code other than 200 OK.. Error thrown Instance of 'ErrorDescription'. at FMTCImageProvider._loadAsync.finish(image_provider.dart:106) at FMTCImageProvider._loadAsync(image_provider.dart:166)

    What is the expected behaviour?

    I think the error is expected, but I should be able to catch it, so it is not reported to Crashlytics. I am using the errorTileCallback on the TileLayer:

                    tileBuilder:
                        (BuildContext context, Widget tileWidget, Tile tile) {
                      if (tile.loadError) {
                        // apply red colorFilter or wrap widget with another custom Widget
                        return Container(color: AppColors.mapBadTile);
                      }
                      return ColorFiltered(
                          colorFilter: notifier.isMapDarkModeEnabled
                              ? MapUtils.colorFilterDark
                              : MapUtils.colorFilterNone,
                          child: tileWidget);
                    },
                    evictErrorTileStrategy: EvictErrorTileStrategy.dispose,
                    errorTileCallback: (Tile tile, error) {
                      if (error != null) {
                        debugPrint(error.toString());
                      }
                    },
    

    How can we reproduce this issue?

    Seems to happen sometimes when there is no internet connection, but I do not know how to reliably force the error.
    

    Do you have a potential solution?

    No response

    Can you provide any other information?

    No response

    Platforms Affected

    Android

    Severity

    Minimum: Allows normal functioning

    Frequency

    Rarely: Occurs every so often

    Requirements

    • [X] I agree to follow this project's Code of Conduct
    • [X] My Flutter/Dart installation is unaltered, and flutter doctor finds no relevant issues
    • [X] I am using the latest stable version of this package
    • [X] I have checked the FAQs section on the documentation website
    • [X] I have checked for similar issues which may be duplicates
    enhancement in progress 
    opened by ozzy1873 2
  • [BUG] Cannot delete statistic cache file

    [BUG] Cannot delete statistic cache file

    What is the bug?

    Exception occurs when deleting attempting to delete a file. This happened after upgrading Flutter to 3.3.7 and running in debug mode.

    I/flutter (22291): ----------------FIREBASE CRASHLYTICS---------------- I/flutter (22291): FileSystemException: Cannot delete file, path = '/data/user/0/com.mycompany.myapp/app_flutter/fmtc/stores/OsmStoreDirectory/stats/length.cache' (OS Error: No such file or directory, errno = 2) I/flutter (22291): I/flutter (22291): #0 _File._delete. (dart:io/file_impl.dart:283:9) I/flutter (22291): #1 _rootRunUnary (dart:async/zone.dart:1399:47) I/flutter (22291): #2 _CustomZone.runUnary (dart:async/zone.dart:1300:19) I/flutter (22291): I/flutter (22291): #3 Future.wait. (dart:async/future.dart:522:21) I/flutter (22291): I/flutter (22291): ----------------------------------------------------

    What is the expected behaviour?

    No exception should happen. I can catch the error in my root zone and log it, so this is not a showstopper for me.

    How can we reproduce this issue?

    This happened after upgrading Flutter from 3.3.6 to 3.3.7, and then running my app in debug mode. I saw this also after the previous update but did not report it then.
    

    Do you have a potential solution?

    Don't know, maybe check for the file/directory existence before attempting to delete?

    Can you provide any other information?

    No response

    Platforms Affected

    Android

    Severity

    Minimum: Allows normal functioning

    Frequency

    Rarely: Occurs every so often

    Requirements

    • [X] I agree to follow this project's Code of Conduct
    • [X] My Flutter/Dart installation is unaltered, and flutter doctor finds no relevant issues
    • [X] I am using the latest stable version of this package
    • [X] I have checked the FAQs section on the documentation website
    • [X] I have checked for similar issues which may be duplicates
    bug in progress 
    opened by ozzy1873 14
Releases(v6.2.0)
Provides beautiful animated marker clustering functionality for flutter_map. Inspired by Leaflet.markercluster

Flutter Map Marker Cluster A Dart implementation of Leaflet.markercluster for Flutter apps. This is a plugin for flutter_map package Usage Add flutter

Lorenzo Pongetti 177 Jan 2, 2023
Flutter_map plugin to display geojson, vector tiles, clusters using sliced vectors

geojson_vector_slicer A flutter_map plugin to display fast geojson by slicing into tiles. Slicing based off https://github.com/mapbox/geojson-vt IMPOR

Ian 4 Oct 18, 2022
Stateful map controller for Flutter Map

Map controller Stateful map controller for Flutter Map. Manage markers, lines and polygons. View the web demo Usage import 'dart:async'; import 'packa

null 55 Sep 15, 2022
A map tour guide mobile app based on Flutter, an AI travel notes product integrating map tour guide and UGC.

A map tour guide mobile app based on Flutter, an AI travel notes product integrating map tour guide and UGC. Through the combination of 5g + AI, colle

null 24 Jan 14, 2022
Custom map markers - Custom Map Markers Using Flutter

Custom Map Markers Not only "Everything is a widget" also "Everywhere is a widge

null 8 Oct 19, 2022
A new flutter plugin for mapbox. You can use it for your map backgrounds inside flutter applications

A new flutter plugin for mapbox. You can use it for your map backgrounds inside flutter applications

Boris Gautier 5 Sep 14, 2022
An offline library app of creeds, confessions and catechisms of the protestant reformed churches.

Sound Doctrine | | An iOS/Android app created in Flutter to provide local access to the tested creeds, confessions and articles of the historical prot

Jesse 6 Jul 9, 2022
Devtoolbox - Collection of offline utilities for developers

DevTools Online utilities for formatting, encoding/decoding etc are dangerous to

Nilesh 83 Aug 22, 2022
Devtoolbox - Collection of offline utilities for developers

DevTools Online utilities for formatting, encoding/decoding etc are dangerous to

Polyglot Network 83 Aug 22, 2022
Flutter plugin to display a simple flat world map with animated points in real time

Flutter Simple Map Flutter plugin to display a simple flat world map with animated points in real time. Can be used as a presentation of online users,

Vladyslav Korniienko 7 Dec 8, 2022
Download, cache and show images in a flutter app

Cached network image A flutter library to show images from the internet and keep them in the cache directory. Sponsors Try the Flutter Chat Tutorial ?

Baseflow 2.1k Jan 1, 2023
A Flutter example to use Google Maps in iOS and Android apps via the embedded Google Maps plugin Google Maps Plugin

maps_demo A Flutter example to use Google Maps in iOS and Android apps via the embedded Google Maps plugin Google Maps Plugin Getting Started Get an A

Gerry High 41 Feb 14, 2022
A flutter package for select a city from svg map.

City Picker From Map A flutter package for select a city from svg map. Supported countries (+150) are here. Screenshots Getting Started In the pubspec

Ahmet ÇELİK 49 Nov 17, 2022
Flutter Tutorial - Google Map with Live Location Tracking

Flutter Tutorial - Google Map with Live Location Tracking Build Google Map app with Live Location Tracking in Flutter. ✌   App Preview Android Preview

Samuel Adekunle 10 Dec 22, 2022
Map Picker for Flutter

Map Pin Picker A Vendor-free map Library for Easy and Quick Usage. Follow the steps to integrate Google Maps (https://pub.dev/packages/google_maps_flu

Akbar 16 Jul 15, 2022
Flutter Google Map Example - Day 41

Flutter Google Map Example - Day 41 class Afgprogrammer extends Flutter100DaysOfCode { video() { return { "title": "Flutter Google Map Exa

Mohammad Rahmani 74 Jan 3, 2023
A Flutter map widget inspired by Leaflet

flutter_map A Dart implementation of Leaflet for Flutter apps. Installation Add flutter_map to your pubspec: dependencies: flutter_map: any # or the

null 2.2k Dec 28, 2022
🌍 Map location picker component for flutter Based on google_maps_flutter

google_map_location_picker Location picker using the official google_maps_flutter. I made This plugin because google deprecated Place Picker. Using Pu

Ibrahim Eid 189 Dec 5, 2022
A map widget with live position updates for Flutter

Livemap A map widget with live position updates. Based on Flutter map and Geolocator. Provides a controller api to handle map state changes. Example i

null 45 Sep 28, 2022