:fire:GeoFlutterFire:fire: is an open-source library that allows you to store and query firestore documents based on their geographic location.

Overview

GeoFlutterFire 🌍

version MIT License PRs Welcome

GeoFlutterFire is an open-source library that allows you to store and query a set of keys based on their geographic location. At its heart, GeoFlutterFire simply stores locations with string keys. Its main benefit, however, is the possibility of retrieving only those keys within a given geographic area - all in realtime.

GeoFlutterFire uses the Firebase Firestore Database for data storage, allowing query results to be updated in realtime as they change. GeoFlutterFire selectively loads only the data near certain locations, keeping your applications light and responsive, even with extremely large datasets.

GeoFlutterFire is designed as a lightweight add-on to cloud_firestore plugin. To keep things simple, GeoFlutterFire stores data in its own format within your Firestore database. This allows your existing data format and Security Rules to remain unchanged while still providing you with an easy solution for geo queries.

Heavily influenced by GeoFireX πŸ”₯ πŸ”₯ from Jeff Delaney 😎

πŸ“Ί Checkout this amazing tutorial on fireship by Jeff, featuring the plugin!!

Getting Started

You should ensure that you add GeoFlutterFire as a dependency in your flutter project.

dependencies:
  geoflutterfire: <latest-version>

You can also reference the git repo directly if you want:

dependencies:
  geoflutterfire:
    git: git://github.com/DarshanGowda0/GeoFlutterFire.git

You should then run flutter packages get or update your packages in IntelliJ.

Example

There is a detailed example project in the example folder. Check that out or keep reading!

Initialize

You need a firebase project with Firestore setup.

import 'package:geoflutterfire/geoflutterfire.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

// Init firestore and geoFlutterFire
final geo = Geoflutterfire();
final _firestore = FirebaseFirestore.instance;

Writing Geo data

Add geo data to your firestore document using GeoFirePoint

GeoFirePoint myLocation = geo.point(latitude: 12.960632, longitude: 77.641603);

Next, add the GeoFirePoint to you document using Firestore's add method

 _firestore
        .collection('locations')
        .add({'name': 'random name', 'position': myLocation.data});

Calling geoFirePoint.data returns an object that contains a geohash string and a Firestore GeoPoint. It should look like this in your database. You can name the object whatever you want and even save multiple points on a single document.

Query Geo data

To query a collection of documents with 50kms from a point

// Create a geoFirePoint
GeoFirePoint center = geo.point(latitude: 12.960632, longitude: 77.641603);

// get the collection reference or query
var collectionReference = _firestore.collection('locations');

double radius = 50;
String field = 'position';

Stream<List<DocumentSnapshot>> stream = geo.collection(collectionRef: collectionReference)
                                        .within(center: center, radius: radius, field: field);

The within function returns a Stream of the list of DocumentSnapshot data, plus some useful metadata like distance from the centerpoint.

stream.listen((List<DocumentSnapshot> documentList) {
        // doSomething()
      });

You now have a realtime stream of data to visualize on a map.

πŸ““ API

collection(collectionRef: CollectionReference)

Creates a GeoCollectionRef which can be used to make geo queries, alternatively can also be used to write data just like firestore's add / set functionality.

Example:

// Collection ref
// var collectionReference = _firestore.collection('locations').where('city', isEqualTo: 'bangalore');
var collectionReference = _firestore.collection('locations');
var geoRef = geo.collection(collectionRef: collectionReference);

Note: collectionReference can be of type CollectionReference or Query

Performing Geo-Queries

geoRef.within(center: GeoFirePoint, radius: double, field: String, {strictMode: bool})

Query the parent Firestore collection by geographic distance. It will return documents that exist within X kilometers of the center-point. field supports nested objects in the firestore document.

Note: Use optional parameter strictMode = true to filter the documents strictly within the bound of given radius.

Example:

// For GeoFirePoint stored at the root of the firestore document
geoRef.within(center: centerGeoPoint, radius: 50, field: 'position', strictMode: true);

// For GeoFirePoint nested in other objects of the firestore document
geoRef.within(center: centerGeoPoint, radius: 50, field: 'address.location.position', strictMode: true);

Each documentSnapshot.data() also contains distance calculated on the query.

Returns: Stream<List<DocumentSnapshot>>

Write Data

Write data just like you would in Firestore

geoRef.add(data)

Or use one of the client's conveniece methods

  • geoRef.setDoc(String id, var data, {bool merge}) - Set a document in the collection with an ID.
  • geoRef.setPoint(String id, String field, double latitude, double longitude)- Add a geohash to an existing doc

Read Data

In addition to Geo-Queries, you can also read the collection like you would normally in Firestore, but as an Observable

  • geoRef.data()- Stream of documentSnapshot
  • geoRef.snapshot()- Stream of Firestore QuerySnapshot

point(latitude: double, longitude: double)

Returns a GeoFirePoint allowing you to create geohashes, format data, and calculate relative distance.

Example: var point = geo.point(38, -119)

Getters

  • point.hash Returns a geohash string at precision 9
  • point.geoPoint Returns a Firestore GeoPoint
  • point.data Returns data object suitable for saving to the Firestore database

Geo Calculations

  • point.distance(latitude, longitude) Haversine distance to a point

⚑ Tips

Scale to Massive Collections

It's possible to build Firestore collections with billions of documents. One of the main motivations of this project was to make geoqueries possible on a queried subset of data. You can pass a Query instead of a CollectionReference into the collection(), then all geoqueries will be scoped with the constraints of that query.

Note: This query requires a composite index, which you will be prompted to create with an error from Firestore on the first request.

Example:

var queryRef = _firestore.collection('locations').where('city', isEqualTo: 'bangalore');
var stream = geo
              .collection(collectionRef: queryRef)
              .within(center: center, radius: rad, field: 'position');

Usage of strictMode

It's advisable to use strictMode = false for smaller radius to make use of documents from neighbouring hashes as well.

As the radius increases to a large number, the neighbouring hash precisions fetch documents which would be considerably far from the radius bounds, hence its advisable to use strictMode = true for larger radius.

Note: filtering for strictMode happens on client side, hence filtering at larger radius is at the expense of making unnecessary document reads.

Make Dynamic Queries the RxDart Way

var radius = BehaviorSubject<double>.seeded(1.0);
var collectionReference = _firestore.collection('locations');

stream = radius.switchMap((rad) {
      return geo
          .collection(collectionRef: collectionReference)
          .within(center: center, radius: rad, field: 'position');
    });

// Now update your query
radius.add(25);

Limitations

  • range queries on multiple fields is not supported by cloud_firestore at the moment, since this library already uses range query on geohash field, you cannot perform range queries with GeoFireCollectionRef.
  • limit() and orderBy() are not supported at the moment. limit() could be used to limit docs inside each hash individually which would result in running limit on all 9 hashes inside the specified radius. orderBy() is first run on geohashes in the library, hence appending orderBy() with another feild wouldn't produce expected results. Alternatively documents can be sorted on client side.
Comments
  • Can't build the project using GeoFlutter Fire

    Can't build the project using GeoFlutter Fire

    I just add GeoFlutter Fire to my pubspec and started throwing build erros:

    (...)
        [!] Unable to determine Swift version for the following pods:
        - `geoflutterfire` does not specify a Swift version and none of the targets (`Runner`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/lib/cocoapods/installer/xcode/target_validator.rb:115:in `verify_swift_pods_swift_version'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/lib/cocoapods/installer/xcode/target_validator.rb:37:in `validate!'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/lib/cocoapods/installer.rb:459:in `validate_targets'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/lib/cocoapods/installer.rb:138:in `install!'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/lib/cocoapods/command/install.rb:48:in `run'
        /Library/Ruby/Gems/2.3.0/gems/claide-1.0.2/lib/claide/command.rb:334:in `run'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/lib/cocoapods/command.rb:52:in `run'
        /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.6.0/bin/pod:55:in `<top (required)>'
        /usr/local/bin/pod:22:in `load'
        /usr/local/bin/pod:22:in `<main>'
    Error output from CocoaPods:
    ↳
        Ignoring bindex-0.5.0 because its extensions are not built.  Try: gem pristine bindex --version 0.5.0
        Ignoring bootsnap-1.3.0 because its extensions are not built.  Try: gem pristine bootsnap --version 1.3.0
        Ignoring byebug-10.0.2 because its extensions are not built.  Try: gem pristine byebug --version 10.0.2
            WARNING: CocoaPods requires your terminal to be using UTF-8 encoding.
            Consider adding the following to ~/.profile:
            export LANG=en_US.UTF-8
            
        Ignoring duktape-1.6.1.0 because its extensions are not built.  Try: gem pristine duktape --version 1.6.1.0
        Ignoring ffi-1.9.23 because its extensions are not built.  Try: gem pristine ffi --version 1.9.23
        Ignoring json-2.1.0 because its extensions are not built.  Try: gem pristine json --version 2.1.0
        Ignoring msgpack-1.2.4 because its extensions are not built.  Try: gem pristine msgpack --version 1.2.4
        Ignoring nio4r-2.3.1 because its extensions are not built.  Try: gem pristine nio4r --version 2.3.1
        Ignoring nokogiri-1.8.2 because its extensions are not built.  Try: gem pristine nokogiri --version 1.8.2
        Ignoring puma-3.11.4 because its extensions are not built.  Try: gem pristine puma --version 3.11.4
        Ignoring unf_ext-0.0.7.5 because its extensions are not built.  Try: gem pristine unf_ext --version 0.0.7.5
        Ignoring websocket-driver-0.7.0 because its extensions are not built.  Try: gem pristine websocket-driver --version 0.7.0
        [!] Automatically assigning platform `ios` with version `8.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
    Error running pod install
    Error launching application on iPhone XR.
    Exited (sigterm)
    

    flutter doctor:

    Doctor summary (to see all details, run flutter doctor -v):
    [βœ“] Flutter (Channel beta, v1.2.1, on Mac OS X 10.14.3 18D109, locale en-BR)
    [βœ“] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    [βœ“] iOS toolchain - develop for iOS devices (Xcode 10.1)
    [βœ“] Android Studio (version 3.1)
    [βœ“] VS Code (version 1.31.1)
    [βœ“] Connected device (1 available)
    

    I tried the versions 2.0.0 - 2.0.3. My pubspec related to firebase/geolocation packages:

    firebase_auth: ^0.8.1+1
    google_sign_in: ^4.0.1+1
    flutter_facebook_login: ^1.2.0
    cloud_firestore: ^0.9.0+2 #you have to run cd ios && pod update Firebase/Firestore
    firebase_storage: ^2.1.0+1
    geolocator: ^3.0.1
    geoflutterfire: ^2.0.3
    
    bug 
    opened by felpsio 24
  • update dependencies

    update dependencies

    Thank you for the great plugin! Can you please update?

    Because geoflutterfire 2.2.1 depends on cloud_firestore ^0.14.0+2 and no versions of geoflutterfire match >2.2.1 <3.0.0, geoflutterfire ^2.2.1 requires cloud_firestore ^0.14.0+2. So, because app depends on both cloud_firestore ^0.15.0 and geoflutterfire ^2.2.1, version solving failed. pub get failed (1; So, because app depends on both cloud_firestore ^0.15.0 and geoflutterfire ^2.2.1, version solving failed.)

    opened by awaik 19
  • Query don't works with where

    Query don't works with where

    I need to do a query, first I tried with group by and after with Where, I did a index in FireStore, but the query return all matches with position... (i read the issues here, but the last was since one year) With startAt

     var collectionReference = _firestore.collection('products').orderBy('nameFilter').startAt(listValue).endAt(listValue+ '\uf8ff');
        geo.collection(collectionRef: collectionReference.reference())
        .within(center: pointUser, radius: distance, field: 'companyPosition', strictMode: true);
    

    With Where

     var collectionReference = _firestore.collection('products').where('nameFilter', isEqualTo: listValue);
        geo.collection(collectionRef: collectionReference.reference())
        .within(center: pointUser, radius: distance, field: 'companyPosition', strictMode: true);
    

    I have the Inex in FireStore image

    opened by s3bok 18
  • Weird behavior with streambuilder

    Weird behavior with streambuilder

    I have a streambuilder that uses this as a stream: stream: geo .collection(collectionRef: collectionReference) .within( center: geoCenter.point( latitude: 5.437534332275391, longitude: 100.30948638916016), radius: 1000, field: field, strictMode: true)

    Issue: When i do that the streambuilder does not get the data. only when i press hot reload is get the data.

    What works: using this: geo .collection(collectionRef: collectionReference) .within( center: geoCenter.point( latitude: 5.437534332275391, longitude: 100.30948638916016), radius: 1000, field: field, strictMode: true) and attaching a listener to it there is no issue.

    bug 
    opened by momoDragon 17
  • The within method has broken.

    The within method has broken.

    Looks like with the new flutter update is not possible to set data on The documentSnapshot.data[]

    documentSnapshot.data['distance'] = center.distance(lat: geoPoint.latitude, lng: geoPoint.longitude);

    var distance = documentSnapshot.data['distance'] ; print(distance) // will be null

    opened by spiderion 8
  • GeoFlutterFire Failing on Run

    GeoFlutterFire Failing on Run

    I am trying to build an app using GeoFlutterFire and it keeps on failing on build.

    Output of flutter doctor -v

    [βœ“] Flutter (Channel stable, v1.2.1, on Mac OS X 10.14.4 18E226, locale en-US)
        β€’ Flutter version 1.2.1 at /Users/austin/flutter
        β€’ Framework revision 8661d8aecd (3 months ago), 2019-02-14 19:19:53 -0800
        β€’ Engine revision 3757390fa4
        β€’ Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)
    
    [βœ—] Android toolchain - develop for Android devices
        βœ— ANDROID_HOME = /usr/local/share/android-sdk
          but Android SDK not found at this location.
    
    [!] iOS toolchain - develop for iOS devices (Xcode 10.2)
        β€’ Xcode at /Applications/Xcode.app/Contents/Developer
        β€’ Xcode 10.2, Build version 10E125
        β€’ ios-deploy 1.9.4
        ! CocoaPods out of date (1.5.0 is recommended).
            CocoaPods is used to retrieve the iOS platform side's plugin code that responds to your plugin usage on the Dart side.
            Without resolving iOS dependencies with CocoaPods, plugins will not work on iOS.
            For more info, see https://flutter.io/platform-plugins
          To upgrade:
            brew upgrade cocoapods
            pod setup
    
    [!] Android Studio (not installed)
        β€’ Android Studio not found; download from https://developer.android.com/studio/index.html
          (or visit https://flutter.io/setup/#android-setup for detailed instructions).
    
    [βœ“] VS Code (version 1.33.1)
        β€’ VS Code at /Applications/Visual Studio Code.app/Contents
        β€’ Flutter extension version 2.26.1
    

    Pubspec.yaml Dependencies

    dependencies:
      flutter:
        sdk: flutter
      firebase_core: ^0.3.4
      cloud_firestore: ^0.9.13+1
      # firebase_analytics: ^2.1.1+3
      rxdart: ^0.21.0
    
      # geoflutterfire: ^2.0.3
      geoflutterfire:
        git: git://github.com/DarshanGowda0/GeoFlutterFire.git
      location: ^2.3.5
      google_maps_flutter: ^0.2.0
    

    Output of flutter build -v https://gist.github.com/Mr-Que/fcf2b1a3f67c5fa84ef05deec2009eed

    info-needed 
    opened by austinmccalley 8
  • hi, where not work

    hi, where not work

    hi, thank for your works!! do you like help me?

    -------- WORK PERFECT ---------------- var collectionReference = Firestore.instance.collection('userBasic').where('provider', isEqualTo: false).where('ispublic', isEqualTo: true); var acata = await collectionReference.getDocuments();

    --------WORK PERFECT---------------- stream = radius.switchMap((rad) { var collectionReference = Firestore.instance.collection('userBasic')

      print('rad');
      return geo.collection(collectionRef: collectionReference).within(
            center: center,
            radius: rad,
            //strictMode: true,
            field: 'geoFirePoint',
          );
    });
    

    --------NOT WORK , NOT RETURN ---------------- stream = radius.switchMap((rad) { var collectionReference = Firestore.instance.collection('userBasic').where('provider', isEqualTo: false).where('ispublic', isEqualTo: true);

      print('rad');
      return geo.collection(collectionRef: collectionReference).within(
            center: center,
            radius: rad,
            //strictMode: true,
            field: 'geoFirePoint',
          );
    });
    
    opened by gustavobrian 8
  • How to use GeoFlutterFire like a firestore stream?

    How to use GeoFlutterFire like a firestore stream?

    Hi @DarshanGowda0, first of all, thanks a lot for creating this awesome library!

    Unfortunately I have some trouble getting it working the same way like my basic firestore streams. So far I include my firestore queries directly as a stream in the StreamBuilder widget like this: StreamBuilder( stream: Firestore.instance.collection('events') .where("eventTime", isGreaterThanOrEqualTo: DateTime.now().millisecondsSinceEpoch) .where("eventStatus", isEqualTo: "created") .orderBy('eventTime').snapshots(), Here, .snapshots() returns a Stream<QuerySnapshot>, whereas your example returns a Stream<List<DocumentSnapshot>>.

    Maybe you could provide an example how to use GeoFlutterFire the same way like the firestore query? I don't really get the concept of the listener, and your readme says that I should be able to use geoRef.data() or geoRef.snapshot() to use it the same way like my other streams. I just can't figure out how :-)

    Also, if I follow your readme exactly and use the listener, I receive this error: com.google.firebase.firestore.FirebaseFirestoreException: INVALID_ARGUMENT: cursor position is outside the range of the original query

    Thanks a lot, Michael

    info-needed 
    opened by momsenmeister 8
  • NoSuchMethodError (NoSuchMethodError: The getter 'hash' was called on null. Receiver: null Tried calling: hash)

    NoSuchMethodError (NoSuchMethodError: The getter 'hash' was called on null. Receiver: null Tried calling: hash)

    I wrote the following function:

    Stream<List> getListOfHangoutsAround() { GeoFirePoint myLocation; Geolocator().getLastKnownPosition().then((userpos) => { myLocation = Geoflutterfire() .point(longitude: userpos.longitude, latitude: userpos.latitude) }); Query collectionReference = Firestore() .collection('hangouts') .where('IsActive', isEqualTo: true) .limit(10); double radius = 15; //Radius in km Stream<List> stream = Geoflutterfire() .collection(collectionRef: collectionReference) .within( center: myLocation, radius: radius, field: 'GeoLocation', strictMode: true);

    return stream; }

    When I debug, the GeoFirePoint myLocation is sucessfully initilized and has a geohash. As soon as the App is running the .within() method, it throws the exception "NoSuchMethodError (NoSuchMethodError: The getter 'hash' was called on null. Receiver: null Tried calling: hash)".

    What am I missing/doing wrong?

    Thanks in advance!

    opened by Xentraxx 7
  • cloud_firestore upgrade to 0.10.x?

    cloud_firestore upgrade to 0.10.x?

    I ran into a version solving failure because of my dependency: cloud_firestore: ^0.10.1

    Because geoflutterfire >=2.0.3 depends on cloud_firestore ^0.9.5+2 and MY_APP depends on cloud_firestore ^0.10.1, geoflutterfire >=2.0.3 is forbidden.

    So, because MY_APP depends on geoflutterfire ^2.0.3+2, version solving failed.

    Is it time to update dependencies and cut a new release? πŸ˜„

    enhancement 
    opened by awhitford 7
  • Flutter version solving failed.

    Flutter version solving failed.

    Hi, im getting

    Because flutter_google_places >=0.1.3 depends on rxdart ^0.19.0 and flutter_google_places <0.1.3 depends on rxdart ^0.18.1, every version of flutter_google_places requires rxdart ^0.18.1 or ^0.19.0.

    And because every version of geoflutterfire depends on rxdart ^0.20.0, flutter_google_places is incompatible with geoflutterfire.

    So, because XXXX depends on both geoflutterfire ^1.0.2 and flutter_google_places any, version solving failed. pub get failed (1) Process finished with exit code 1

    Here is my flutter doctor C:\src\flutter\bin\flutter.bat doctor --verbose [√] Flutter (Channel master, v1.1.10-pre.200, on Microsoft Windows [Versión 6.1.7601], locale es-AR) β€’ Flutter version 1.1.10-pre.200 at C:\src\flutter β€’ Framework revision 74ebdacad5 (5 hours ago), 2019-01-28 13:07:02 -0500 β€’ Engine revision 9b6d5031a3 β€’ Dart version 2.1.1 (build 2.1.1-dev.3.2 a5030ed92f)

    [√] Android toolchain - develop for Android devices (Android SDK version 28.0.3) β€’ Android SDK at C:\Users****\AppData\Local\Android\sdk β€’ Android NDK location not configured (optional; useful for native profiling support) β€’ Platform android-28, build-tools 28.0.3 β€’ Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java β€’ Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01) β€’ All Android licenses accepted.

    [√] Android Studio (version 3.3) β€’ Android Studio at C:\Program Files\Android\Android Studio β€’ Flutter plugin version 32.0.1 β€’ Dart plugin version 182.5124 β€’ Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

    [!] Connected device ! No devices available

    ! Doctor found issues in 1 category. Process finished with exit code 0

    Thanks you in advance

    bug 
    opened by gabilanbrc 7
  • Cloud Call Error when querying documents through GeoFlutterFire

    Cloud Call Error when querying documents through GeoFlutterFire

    When querying documents from GeoFlutterFire it returns the following error `I/flutter (20321): Cloud call error!

    I/flutter (20321): Code: internal

    I/flutter (20321): Details: null

    I/flutter (20321): Message: INTERNAL`

    I'm querying it through the following method StreamBuilder<List<PetAdsRecord>>( stream: queryLocationPetAdsRecord( location: currentUserLocationValue, queryBuilder: (petAdsRecord) => petAdsRecord .where( 'ad_status', isEqualTo: 'Active', ) .orderBy('create_date', descending: true), limit: 15, ), builder: (context, snapshot){ ......

    then Stream<List<PetAdsRecord>> queryLocationPetAdsRecord( {Query Function(Query)? queryBuilder, int limit = -1, bool singleRecord = false, LatLng? location}) => queryLocationCollection( location!, PetAdsRecord.collection, PetAdsRecord.serializer, queryBuilder: queryBuilder, limit: limit, singleRecord: singleRecord, ); here I use GeoFlutterFire to get snapshot of the documents Stream<List<T>> queryLocationCollection<T>( LatLng location, Query collection, Serializer<T> serializer, {Query Function(Query)? queryBuilder, int limit = -1, bool singleRecord = false}) { final builder = queryBuilder ?? (q) => q; var query = builder(collection); if (limit > 0 || singleRecord) { query = query.limit(singleRecord ? 1 : limit); } return geo .collection(collectionRef: query as Query<Map<String, dynamic>>) .within( center: GeoFirePoint( location.latitude, location.longitude, ), radius: FFAppState().userAdRadius.toDouble(), field: "location", ) .handleError((err) { print('Error querying $collection: $err'); }).map((s) => s .map( (d) => safeGet( () => serializers.deserializeWith(serializer, serializedData(d)), (e) => print('Error serializing doc ${d.reference.path}:\n$e'), ), ) .where((d) => d != null) .map((d) => d!) .toList()); } I've added the index on my firestore and checked the structure of all documents and it is correct. if you can help me point out the issue or error in my code do let me know. Thanks!

    opened by mashoodChishti 0
  • Please update flutter_lints pakage to new version or remove from geoflutterfire

    Please update flutter_lints pakage to new version or remove from geoflutterfire

    Because snapcar_user_app depends on geoflutterfire 3.0.3 which depends on flutter_lints ^1.0.0, flutter_lints ^1.0.0 is required. So, because snapcar_user_app depends on flutter_lints ^2.0.1, version solving failed.

    opened by sadaqatdev 3
  • Additional Maintainers

    Additional Maintainers

    Does GeoFlutterFire need additional maintainers? And if so, how does one "apply" to be a core contributor? I don't see a CONTRIBUTING.md file in the repo.

    I have a project that depends on this library, and I would like to help approve PRs, triage issues, and mature the library. I'm sure I'm not the only one.

    Greatly appreciate all the work you've put into this DarshanGowda0. Cheers!

    opened by bifrostyyy 4
  • Move flutter_lints to dev_dependencies

    Move flutter_lints to dev_dependencies

    Due to the flutter_lints package being in the dependencies many people will get version conflicts.

    flutter_lints is only used in development so doesn't need to be shipped with this package. This will solve conflicts for all versions going forward and can be updated internally at any stage to fit project needs.

    Moving to dev_dependencies: is also recommended by the flutter team when using flutter_lints as seen here.

    opened by jacksoncurrie 5
Owner
Darshan N
Flutter & Angular Developer. Machine Learning Enthusiast
Darshan N
Stream-based strongly typed GraphQL client for Dart

A simple, powerful GraphQL Client for Flutter and Dart Documentation ?? Features βœ… Fully Typed: work faster and safer with compile time checks and IDE

GQL Dart 484 Jan 9, 2023
Moor is an easy to use, reactive, typesafe persistence library for Dart & Flutter

Moor is an easy to use, reactive, typesafe persistence library for Dart & Flutter

Simon Binder 1.8k Dec 30, 2022
Create a DataTable with Flutter to display data in columns, rows, and cells and also learn how to sort the data within the table.

Flutter Tutorial - Sortable DataTable Create a DataTable with Flutter to display data in columns, rows, and cells and also learn how to sort the data

Johannes Milke 22 Oct 9, 2022
his package provides a Clock class which encapsulates the notion of the "current time" and provides easy access to points relative to the current time.

This package provides a Clock class which encapsulates the notion of the "current time" and provides easy access to points relative to the current tim

Dart 34 Dec 15, 2022
Shared SQLite DB across mobile, web and desktop

moor_shared An example project to demonstrate how moor can be used on multiple platforms (Web, android, iOS, macOS, Windows and Linux). Note: You need

Rody Davis 143 Nov 28, 2022
Hive is a lightweight and blazing fast key-value database

Hive Manager Hive is a lightweight and blazing fast key-value database Features Cross platform -> mobile, desktop Performance Strong encryption built

Okan 2 Feb 24, 2022
Automatically generate profile picture with random first name and background color. But you can still provide pictures if you have them. As the default color, based on the name of the first letter. :fire: :fire: :fire:

FLUTTER PROFILE PICTURE Automatically generate profile picture with random first name and background color. But you can still provide pictures if you

Aditya Dharmawan Saputra 10 Dec 20, 2022
A mobile image uploader in which you can upload image to your personal gallery from either your camera or mobile gallery and it can detect your current geographic location and address using firebase firestore and storage.

Image Uploader In Flutter About It is an Image Uploader gallery which tracks your address from which you're uploading using Flutter and Image picker.

Prahen parija 6 Dec 20, 2022
Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

Harsh Joshi 38 Dec 16, 2022
A Flutter plugin for fetching Firestore documents with read from cache first then server.

Firestore Cache A Flutter plugin for fetching Firestore documents with read from cache first then server. This plugin is mainly designed for applicati

null 22 Nov 24, 2022
Academic master is E-learning app where students can share their doubts wiith their peers they can chat and also they can find their notes

Academic Master is E-learning App. Features:- 1) You can post real Post query in Images and video formates. 2) We will Provide notes,books and previou

amit singh 25 Dec 14, 2022
[Flutter package] An easy and quick way to check if the local app is updated with the same version in their respective stores (Play Store / Apple Store ).

Retrieve version and url for local app update against store app Android and iOS Features Using as reference packages like in_app_update , version_chec

KauΓͺ Murakami 11 Nov 9, 2022
A Flutter plugin to select, open, choose, pick and create documents, images videos

file_picker_cross The only Flutter plugin to select, open, choose, pick and create documents, images videos or other files on Android, iOS, the deskto

null 0 Oct 30, 2021
DinoRide allows you to book a trip and have dinosaurs deliver you to your desired location!

DinoRide ?? Inspiration We wanted to reimagine a modern app in a prehistoric context. We thought a taxi service but with dinosaurs would have been fun

Westdale Software Dev Club 1 Jun 30, 2022
Flutter ShopApp, you can see products and their prices, categories and their products, search for a product, add to favorite, add to cart, sign in and sign up.

shop_app_2 A new Flutter application. Getting Started This project is a starting point for a Flutter application. A few resources to get you started i

Muhammed Rezk Rajab 10 Aug 7, 2022
Portarius is a free, open-source, cross-platform mobile application that allows you to manage your Portainer sessions.

Portarius [Latin: Porta/Door Arius/Keeper] Features User management See running/stopped containers (and also start/stop and restart them) See containe

Zbe 54 Jan 7, 2023
Flutter package to enable clustering of location markers on Google Maps using widgets specific to each location.

flutter_google_maps_widget_cluster_markers This widget implements a very specific adaptation of google_maps_cluster_manager, allowing different ,marke

Kek Tech 2 Jan 6, 2023
The prime objective of this app is to store the real time information of the user using firebase cloud firestore and also can delete, remove and update the customer information

crud_firestore A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started i

Muhammad Zakariya 0 Mar 15, 2022
At its core, Mah-Event lets end-users initiate and find events corresponding to their interests and location

Mah-Event Application At its core, Mah-Event lets end-users initiate and find events corresponding to their interests and location. It allows people t

Palm Jumnongrat 4 Oct 23, 2022
This is a flutter package that parses pdf documents to strings

read_pdf_text This package parses text out of PDF document and returns it as a string. Android On Android the plugin uses PDFbox open source library m

null 13 Jul 24, 2022