matanshukry / flutter_google_places_sdk Goto Github PK
View Code? Open in Web Editor NEWFlutter plugin for google places native sdk
Flutter plugin for google places native sdk
Using flutter_google_places_sdk_web with --release or --profile throws errors about missing functions when calling fetchPlace. I tried looking into it a bit but I don't know a lot about the js/dart interop, but it seems to have something to do with the difference in dart2js and dartdevc output.
// this call works in debug, throws in the browser in --release or --profile
var placeDetails = await googlePlaces.fetchPlace(selectedPlace!.placeId!);
[✓] Flutter (Channel stable, 2.5.1, on Ubuntu 21.04 5.11.0-37-generic, locale en_US.UTF-8)
• Flutter version 2.5.1 at /home/doug/fvm/versions/2.5.1
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision ffb2ecea52 (10 days ago), 2021-09-17 15:26:33 -0400
• Engine revision b3af521a05
• Dart version 2.14.2
Setting up locale in FlutterGooglePlacesSdk doesn't work for Android and iOS because I always get response in English and not in set up locale. Also, updateSettings method doesn't work on mobile.
On the WEB everything works fine.
Anyone has the same issue with mobile?
Lately, when I try to build a deployable version of my iOS app depending on version 0.3.2+1 of this package, I get the following error:
Parse Issue (Xcode): Module 'flutter_google_places_sdk_ios' not found
/Users/sarbogast/dev/synkro/staff/ios/Runner/GeneratedPluginRegistrant.m:35:8
I have tried everything, to flutter clean my project, deleted Pods and Podfil.lock manually, archiving directly from Xcode, and I always get the same error.
Hello!
Any plans of supporting macOS, Windows, and Linux platforms in the future?
Thanks!
I've been looking for something exactly like this package. I've been using Firebase and Firestore authentication, and am looking now for an auto-suggesting address box.
The issue is on build I've gotten the following error:
Pubspec.yaml
firebase_core: ^1.10.6
firebase_analytics: ^9.0.4
firebase_auth: ^3.3.4
google_sign_in: ^5.2.1
cloud_firestore: ^3.1.5
uuid: ^3.0.5
google_fonts: ^2.1.1
flutter_google_places_sdk: ^0.3.0+1
Then this is what errors out on build:
What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
Duplicate class com.google.protobuf.AbstractMessageLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.AbstractMessageLite$Builder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.AbstractMessageLite$Builder$LimitedInputStream found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.AbstractParser found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.AbstractProtobufList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.BooleanArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteBufferWriter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteOutput found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$ArraysByteArrayCopier found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$BoundedByteString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$ByteArrayCopier found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$ByteIterator found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$CodedBuilder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$LeafByteString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$LiteralByteString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$Output found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ByteString$SystemByteArrayCopier found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedInputStream found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream$AbstractBufferedEncoder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream$ArrayEncoder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream$ByteOutputEncoder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream$OutOfSpaceException found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.CodedOutputStream$OutputStreamEncoder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.DoubleArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1) Duplicate class com.google.protobuf.ExperimentalApi found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1) Duplicate class com.google.protobuf.ExtensionLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ExtensionRegistryFactory found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ExtensionRegistryLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ExtensionRegistryLite$ObjectIntPair found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.FieldSet found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.FieldSet$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.FieldSet$FieldDescriptorLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.FloatArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$Builder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$DefaultInstanceBasedParser found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableBuilder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableMessage found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableMessage$ExtensionWriter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$ExtendableMessageOrBuilder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$ExtensionDescriptor found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$GeneratedExtension found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$MethodToInvoke found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.GeneratedMessageLite$SerializedForm found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.IntArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$BooleanList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$DoubleList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$EnumLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$EnumLiteMap found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$FloatList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$IntList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$ListAdapter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$ListAdapter$Converter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$LongList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$MapAdapter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$MapAdapter$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$MapAdapter$Converter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$MapAdapter$EntryAdapter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$MapAdapter$IteratorAdapter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$MapAdapter$SetAdapter found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Internal$ProtobufList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.InvalidProtocolBufferException found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyField found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyField$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyField$LazyEntry found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyField$LazyIterator found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyFieldLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyStringArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyStringArrayList$ByteArrayListView found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyStringArrayList$ByteStringListView found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LazyStringList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.LongArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MapEntryLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MapEntryLite$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MapEntryLite$Metadata found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MapFieldLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MessageLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MessageLite$Builder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MessageLiteOrBuilder found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MessageLiteToString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MutabilityOracle found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.MutabilityOracle$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.NioByteString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.NioByteString$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1) Duplicate class com.google.protobuf.Parser found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ProtobufArrayList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.ProtocolStringList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.RopeByteString found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.RopeByteString$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.RopeByteString$Balancer found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.RopeByteString$PieceIterator found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.RopeByteString$RopeInputStream found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$EmptySet found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$EmptySet$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$EmptySet$2 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$Entry found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$EntryIterator found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.SmallSortedMap$EntrySet found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.TextFormatEscaper found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.TextFormatEscaper$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.TextFormatEscaper$2 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.TextFormatEscaper$ByteSequence found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UninitializedMessageException found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnknownFieldSetLite found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnmodifiableLazyStringList found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnmodifiableLazyStringList$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnmodifiableLazyStringList$2 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnsafeByteOperations found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnsafeUtil found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.UnsafeUtil$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Utf8 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Utf8$Processor found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Utf8$SafeProcessor found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Utf8$UnpairedSurrogateException found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.Utf8$UnsafeProcessor found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$FieldType found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$FieldType$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$FieldType$2 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$FieldType$3 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$FieldType$4 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$JavaType found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$Utf8Validation found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$Utf8Validation$1 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$Utf8Validation$2 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)
Duplicate class com.google.protobuf.WireFormat$Utf8Validation$3 found in modules jetified-protobuf-javalite-3.17.2 (com.google.protobuf:protobuf-javalite:3.17.2) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)`
I can get past this error temporarily by adding the following to my build.gradle file:
configurations { implementation.exclude module:'protobuf-lite' }
When I use the textbox I created, the following error throws after around 15 seconds, crashing the app:
E/AndroidRuntime( 9636): FATAL EXCEPTION: pool-7-thread-1
E/AndroidRuntime( 9636): Process: PROCESS NAME, PID: 9636
E/AndroidRuntime( 9636): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 9636): at com.google.android.datatransport.cct.a.zze.zzb(com.google.android.datatransport:transport-backend-cct@@2.1.0:1)
E/AndroidRuntime( 9636): at com.google.android.datatransport.cct.zzc.send(com.google.android.datatransport:transport-backend-cct@@2.1.0:9)
E/AndroidRuntime( 9636): at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader.logAndUpdateState(com.google.android.datatransport:transport-runtime@@2.1.0:121)
E/AndroidRuntime( 9636): at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader.lambda$upload$1(com.google.android.datatransport:transport-runtime@@2.1.0:88)
E/AndroidRuntime( 9636): at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader$$Lambda$1.run(Unknown Source:8)
E/AndroidRuntime( 9636): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/AndroidRuntime( 9636): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/AndroidRuntime( 9636): at java.lang.Thread.run(Thread.java:919)
E/AndroidRuntime( 9636): Caused by: java.lang.RuntimeException: Unable to get message info for com.google.android.datatransport.cct.a.zze
E/AndroidRuntime( 9636): at com.google.protobuf.GeneratedMessageInfoFactory.messageInfoFor(GeneratedMessageInfoFactory.java:62)
E/AndroidRuntime( 9636): at com.google.protobuf.ManifestSchemaFactory$CompositeMessageInfoFactory.messageInfoFor(ManifestSchemaFactory.java:143)
E/AndroidRuntime( 9636): at com.google.protobuf.ManifestSchemaFactory.createSchema(ManifestSchemaFactory.java:55)
E/AndroidRuntime( 9636): at com.google.protobuf.Protobuf.schemaFor(Protobuf.java:90)
E/AndroidRuntime( 9636): at com.google.protobuf.Protobuf.schemaFor(Protobuf.java:104)
E/AndroidRuntime( 9636): at com.google.protobuf.GeneratedMessageLite.makeImmutable(GeneratedMessageLite.java:175)
E/AndroidRuntime( 9636): at com.google.android.datatransport.cct.a.zze.(com.google.android.datatransport:transport-backend-cct@@2.1.0:2)
E/AndroidRuntime( 9636): ... 8 more
E/AndroidRuntime( 9636): Caused by: java.lang.UnsupportedOperationException
E/AndroidRuntime( 9636): at com.google.android.datatransport.cct.a.zze.dynamicMethod(com.google.android.datatransport:transport-backend-cct@@2.1.0:2)
E/AndroidRuntime( 9636): at com.google.protobuf.GeneratedMessageLite.dynamicMethod(GeneratedMessageLite.java:256)
E/AndroidRuntime( 9636): at com.google.protobuf.GeneratedMessageLite.buildMessageInfo(GeneratedMessageLite.java:286)
E/AndroidRuntime( 9636): at com.google.protobuf.GeneratedMessageInfoFactory.messageInfoFor(GeneratedMessageInfoFactory.java:60)
E/AndroidRuntime( 9636): ... 14 more
I/Process ( 9636): Sending signal. PID: 9636 SIG: 9
Lost connection to device.`
I'm pretty sure it is due to some versioning issues.
Hi, and thank you for this package!
I have both places api and maps api enabled. I am on flutter 3.0.3.
After running the following line:
final response = await places.findAutocompletePredictions("place");
I get the error in the console. The error is the following:
FlutterGooglePlacesSdk::call error: Expected a value of type 'Object', but got one of type 'Null'
Error: Expected a value of type 'Object', but got one of type 'Null'
at Object.throw_ [as throw] (http://localhost:39703/dart_sdk.js:5080:11)
at Object.castError (http://localhost:39703/dart_sdk.js:5039:15)
at Object.cast [as as] (http://localhost:39703/dart_sdk.js:5356:17)
at Function.as (http://localhost:39703/dart_sdk.js:6603:31)
at Object.callMethod$ [as callMethod] (http://localhost:39703/dart_sdk.js:62331:14)
at Object.AutocompleteService$36Ext$124getPlacePredictions [as AutocompleteService$Ext|getPlacePredictions] (http://localhost:39703/packages/google_maps/src/generated/google_maps_places.js.g.dart.lib.js:782:107)
at flutter_google_places_sdk_web.FlutterGooglePlacesSdkWebPlugin.new.findAutocompletePredictions (http://localhost:39703/packages/flutter_google_places_sdk_web/flutter_google_places_sdk_web.dart.lib.js:337:94)
at findAutocompletePredictions.next ()
at http://localhost:39703/dart_sdk.js:40641:33
at _RootZone.runUnary (http://localhost:39703/dart_sdk.js:40511:59)
at _FutureListener.thenAwait.handleValue (http://localhost:39703/dart_sdk.js:35438:29)
at handleValueCallback (http://localhost:39703/dart_sdk.js:35999:49)
at Function._propagateToListeners (http://localhost:39703/dart_sdk.js:36037:17)
at async._AsyncCallbackEntry.new.callback (http://localhost:39703/dart_sdk.js:35753:27)
at Object._microtaskLoop (http://localhost:39703/dart_sdk.js:40778:13)
at _startMicrotaskLoop (http://localhost:39703/dart_sdk.js:40784:13)
at http://localhost:39703/dart_sdk.js:36261:9
Does anybody know why this is happening and the way to resolve it?
Hello @matanshukry ,
I loved the rational behind the package and believe this also solves the CORS issue on Flutter Web, right?
Anyway, my Flutter app is rolling out for Android, iOS and the web. Is there any chance iOS support will be added soon? I have no experience with iOS development nor Flutter platform channels so I'm afraid I wouldn't be able to help.
Hello, first of all, thanks for your outstanding contributions to the open source.
But I have a question / feature request.
Any reason why fetchPlace
is not implemented in flutter_google_places_sdk_http.dart
?
@override
Future<inter.FetchPlaceResponse> fetchPlace(
String placeId, {
List<inter.PlaceField>? fields,
bool? newSessionToken,
}) async {
throw UnimplementedError();
}
This is my current code:
final FlutterGooglePlacesSdk _places = FlutterGooglePlacesSdk(FlavorConfig().googlePlacesApiKey);
FindAutocompletePredictionsResponse res =
await _places.findAutocompletePredictions(_searchText);
print(res);
setState(() {
_predictions = res.predictions;
});```
When I type a text in the TextField to request the predictions, the package is returning this error:
`FlutterGooglePlacesSdk::call error: UnimplementedError: initialize() has not been implemented.`
When I define my <script src="https://maps.googleapis.com/maps/api/js?key=apiKey"></script> in web/index.html to show Google Map on screen and everything work as expect but when I call a function to search place that use your package it's will show "You have included the Google Maps JavaScript API multiple times on this page. This may cause unexpected errors." and then I can't use my moveCamera function at all (It's work before I calling findAutocompletePredictions function). But when I use hot reload in android studio everything works without an error but stop and run will make it happen again
Second error is when I call moveCamera Function after calling findAutocompletePredictions Function
Sorry for my bad English I hope you can help me.
Thank You.
This issue is only present on Android. My API key is restricted to my app's package name and SHA-1 certificate. I'm receiving this error:
FlutterGooglePlacesSdk::call error: PlatformException(API_ERROR_AUTOCOMPLETE, 9011: This IP, site or mobile application is not authorized to use this API key. Request received from IP address *********, with empty referer, {type: class com.google.android.gms.common.api.ApiException}, null)
Same problem here, but the user marked as completed without info on how it was fixed.
Hi
On android seems to have an issue. Used with physical phone
To reproduce
https://github.com/matanshukry/flutter_google_places_sdk/tree/master/flutter_google_places_sdk/example
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): Failed to handle method call
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at com.msh.flutter_google_places_sdk.FlutterGooglePlacesSdkPlugin.readLocale(FlutterGooglePlacesSdkPlugin.kt:406)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at com.msh.flutter_google_places_sdk.FlutterGooglePlacesSdkPlugin.onMethodCall(FlutterGooglePlacesSdkPlugin.kt:47)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at android.os.Handler.handleCallback(Handler.java:883)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at android.os.Handler.dispatchMessage(Handler.java:100)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at android.os.Looper.loop(Looper.java:214)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at android.app.ActivityThread.main(ActivityThread.java:7397)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/MethodChannel#plugins.msh.com/flutter_google_places_sdk(32468): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
When compiling for ARM64 simulator (used with m1 Mac), the pod install fails because this package, I think, relies on Google Places pod which doesn't support ARM64. As a workaround, I could change my iOS app project's architecture I think but that's more of a temporarily workaround instead of a solution.
Is this an issue that can be resolved or do we need to open/find a PR at Google Places iOS package?
Logs:
Error (Xcode): Building for iOS Simulator, but linking in object file built for iOS, file '<path_to_flutter_project>/ios/Pods/GooglePlaces/Frameworks/GooglePlaces.framework/GooglePlaces' for architecture arm64
Could not build the application for the simulator.
Error launching application on iPhone 12 Pro.
I've found this PR with a comment that explains what is happening with Google Places:
googlemaps/google-maps-ios-utils#355 (comment)
That comment basically says that its not possible when using Google Places plugin from Cocoapods, but there are 2 other ways to get a beta version of this Google Places plugin installed that supports ARM64 natively with XCFramework:
https://developers.google.com/maps/documentation/ios-sdk/config#download-sdk
I guess it has nothing to do with @matanshukry's package, more of a Google Places issue 👎 . Any thoughts?
Hi,
Users can change the locale of our app. When that happens, we make a new call to:
FlutterGooglePlacesSdk('keyXXX', locale: Get.locale)
The problem with flutter_google_places_sdk_web is that FlutterGooglePlacesSdkWebPlugin is a singleton and locale is only considered the first time locale is passed.
For subsequent instantiations of FlutterGooglePlacesSdk with different locales to the original one, those locales get ignored.
Thanks.
First of all, thank you very much for this package which actually works for Flutter Web, it should be ranked much higher when searching in pub.dev.
When using the parent plugin flutter_google_places_sdk
in a web platform (Flutter web project) it seems it is not possible to correctly catch errors/exceptions that are thrown at lower levels of the code. Although they are caught, the execution stops.
// The underlying Google Places API SDK using an invalid API key.
final FlutterGooglePlacesSdk googlePlacesApi = new FlutterGooglePlacesSdk("");
try {
// Get the query response.
print("Launching autocomplete query...");
final FindAutocompletePredictionsResponse response = await googlePlacesApi.findAutocompletePredictions(
input,
countries: ['it'],
placeTypeFilter: sdk.PlaceTypeFilter.ADDRESS,
);
} catch (e) {
print("Autocomplete query response FAILED");
final String error = e.toString();
if (error.contains('INVALID_REQUEST')) {
// Indicate the API request was malformed, generally due to the missing input.
print("Autocomplete API request was malformed");
} else if (error.contains('OVER_QUERY_LIMIT')) {
// Indicate exceeded the QPS limits or billing not enabled or a self-imposed usage cap exceeded, ...
print("Autocomplete API query limit exceeded");
} else if (error.contains('REQUEST_DENIED')) {
// Indicate the request has been denied because API key is invalid.
print("Autocomplete API key is invalid");
} else {
print("UNKNOWN error <$e>");
}
}
Launching the following error:
You must use an API key to authenticate each request to Google Maps Platform APIs. For additional information, please refer to http://g.co/dev/maps-no-account For more information on authentication and Google Maps JavaScript API services please see: https://developers.google.com/maps/documentation/javascript/get-api-key
FlutterGooglePlacesSdk::call error: MapsRequestError: PLACES_AUTOCOMPLETE: REQUEST_DENIED: The application is not allowed to use the Place Service.
Error: MapsRequestError: PLACES_AUTOCOMPLETE: REQUEST_DENIED: The application is not allowed to use the Place Service.
at Object.createErrorWithStack (http://localhost:45563/dart_sdk.js:5076:12)
at Object._rethrow (http://localhost:45563/dart_sdk.js:40477:16)
at async._AsyncCallbackEntry.new.callback (http://localhost:45563/dart_sdk.js:40473:13)
at Object._microtaskLoop (http://localhost:45563/dart_sdk.js:40330:13)
at _startMicrotaskLoop (http://localhost:45563/dart_sdk.js:40336:13)
at http://localhost:45563/dart_sdk.js:35811:9
While the equivalent code can be correctly executed when directly using the flutter_google_places_web
package. The error is caught and the code execution continuous normally.
// The underlying Google Places Web API SDK initialized using an invalid API key.
final FlutterGooglePlacesSdkWebPlugin googlePlacesWebApi = new FlutterGooglePlacesSdkWebPlugin();
googlePlacesApi.initialize("");
try {
// Get the query response.
print("Launching autocomplete query...");
final FindAutocompletePredictionsResponse response = await googlePlacesWebApi.findAutocompletePredictions(
input,
countries: ['it'],
placeTypeFilter: sdk.PlaceTypeFilter.ADDRESS,
);
} catch (e) {
print("Autocomplete query response FAILED");
final String error = e.toString();
if (error.contains('INVALID_REQUEST')) {
// Indicate the API request was malformed, generally due to the missing input.
print("Autocomplete API request was malformed");
} else if (error.contains('OVER_QUERY_LIMIT')) {
// Indicate exceeded the QPS limits or billing not enabled or a self-imposed usage cap exceeded, ...
print("Autocomplete API query limit exceeded");
} else if (error.contains('REQUEST_DENIED')) {
// Indicate the request has been denied because API key is invalid.
print("Autocomplete API key is invalid");
} else {
print("UNKNOWN error <$e>");
}
}
I make the following call, but the results I am getting are not only the REGIONS
. I am getting all the businesses as cafes as well.
_places.findAutocompletePredictions(
searchQuery.text,
countries: ['ch'],
placeTypesFilter: [PlaceTypeFilter.REGIONS],
)
Tested on iOS simulator. I tried putting GEOCODE
and CITIES
, but I got all the results regardless.
I saw that this enum is deprecated, but there is no alternative option in this Flutter package.
Hi,
Do you have any plan to migrate to the new Places API?
https://developers.google.com/maps/documentation/places/web-service/migrate-overview
I get the list of predictions successfully but when I try to fetch a place, I get an internal error.
Unhandled Exception: PlatformException(API_ERROR, The operation couldn’t be completed. An internal error occurred in the Places SDK library. If you believe this error represents a bug, please file a report using the instructions on our community and support page (https://developers.google.com/places/ios-sdk/support)., null, null)
Thanks
I've used this package on another project a few months ago and has been working perfectly fine. Now that I've started a new project and wanted to import the code I wrote on the older one, the app crashes on startup. I've tried starting brand new clear projects with just this package installed and I still get the same error. I've asked my colleague to do the same, and he gets the same error.
This is what I have inside the package:
Hello, thanks for your plugin!
Could you please add following constraints?
setLocationBias
setLocationRestriction
Thanks!
My flutter code:
static final FlutterGooglePlacesSdk googlePlacesSdk = FlutterGooglePlacesSdk('my-api-key');
final FindAutocompletePredictionsResponse response = await googlePlacesSdk.findAutocompletePredictions(
'query-string',
countries: <String>['de'],
placeTypeFilter: PlaceTypeFilter.ADDRESS,
);
The following exception occurs and the app crashes:
2023-06-13 14:25:20.651729+0200 Runner[82021:4159105] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFBoolean objectForKey:]: unrecognized selector sent to instance 0x1165005e0'
*** First throw call stack:
(
0 CoreFoundation 0x000000011610278b __exceptionPreprocess + 242
1 libobjc.A.dylib 0x00000001115cdb73 objc_exception_throw + 48
2 CoreFoundation 0x00000001161118c4 +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0
3 CoreFoundation 0x0000000116106c66 ___forwarding___ + 1443
4 CoreFoundation 0x0000000116108e08 _CF_forwarding_prep_0 + 120
5 Runner 0x0000000104e78298 __51+[GMPx_GTMSessionFetcher appAllowsInsecureRequests]_block_invoke + 97
6 libdispatch.dylib 0x0000000112af37ec _dispatch_client_callout + 8
7 libdispatch.dylib 0x0000000112af4e85 _dispatch_once_callout + 66
8 Runner 0x0000000104e78235 +[GMPx_GTMSessionFetcher appAllowsInsecureRequests] + 41
9 Runner 0x0000000104e78c14 -[GMPx_GTMSessionFetcher beginFetchMayDelay:mayAuthorize:mayDecorate:] + 751
10 Runner 0x0000000104dde8a9 -[GMSPabloClient fetchRequest:callback:] + 150
11 Runner 0x0000000104ddc28d -[GMSPabloClient fetchAutocompletePredictionsForQuery:filter:sessionToken:requestSource:callback:] + 175
12 Runner 0x0000000104de80e5 -[GMSPlacesClient fetchAutocompletePredictionsForQuery:filter:sessionToken:requestSource:callback:] + 346
13 Runner 0x0000000104de7f85 -[GMSPlacesClient findAutocompletePredictionsFromQuery:filter:sessionToken:callback:] + 32
14 Runner 0x0000000104f06707 $s29flutter_google_places_sdk_ios36SwiftFlutterGooglePlacesSdkIosPluginC6handle_6resultySo0G10MethodCallC_yypSgctF + 6183
15 Runner 0x0000000104f09296 $s29flutter_google_places_sdk_ios36SwiftFlutterGooglePlacesSdkIosPluginC6handle_6resultySo0G10MethodCallC_yypSgctFTo + 118
16 Flutter 0x000000011b725d3d __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 168
17 Flutter 0x000000011acb9748 ___ZN7flutter25PlatformMessageHandlerIos21HandlePlatformMessageENSt21_LIBCPP_ABI_NAMESPACE10unique_ptrINS_15PlatformMessageENS1_14default_deleteIS3_EEEE_block_invoke + 94
18 libdispatch.dylib 0x0000000112af254f _dispatch_call_block_and_release + 12
19 libdispatch.dylib 0x0000000112af37ec _dispatch_client_callout + 8
20 libdispatch.dylib 0x0000000112b046e2 _dispatch_main_queue_drain + 1462
21 libdispatch.dylib 0x0000000112b0411e _dispatch_main_queue_callback_4CF + 31
22 CoreFoundation 0x00000001160606cc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
23 CoreFoundation 0x000000011605afbe __CFRunLoopRun + 2429
24 CoreFoundation 0x000000011605a264 CFRunLoopRunSpecific + 560
25 GraphicsServices 0x000000011ac6524e GSEventRunModal + 139
26 UIKitCore 0x000000012fc9c7bf -[UIApplication _run] + 994
27 UIKitCore 0x000000012fca15de UIApplicationMain + 123
28 Runner 0x0000000104ace96f main + 63
29 dyld 0x000000010e09e384 start_sim + 10
30 ??? 0x0000000205d6041f 0x0 + 8687846431
)
libc++abi: terminating due to uncaught exception of type NSException
Message from debugger: Terminated due to signal 6
I have seen #7 and tried setting newSessionToken
to true or false, same error.
Been wrapping the APIs in try catch blocks but it doesn't seem to be caught properly
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(API_ERROR_AUTOCOMPLETE, 9011: This IP, site or mobile application is not authorized to use this API key. Request received from IP address *********, with empty referer, {type: class com.google.android.gms.common.api.ApiException}, null)
AutocompletionRequest is missing a few params, I added them in because I needed to restrict the search. I also modified findPlaces to pass these params down to the AutocompletionRequest.
I would do a pull request but I have no idea if it is the right way to fix the problem, I just know it works :).
@JS('google.maps.places')
library places;
import 'package:js/js.dart';
/// google.maps.places.AutocompletionRequest interface
///
/// Ref: https://developers.google.com/maps/documentation/javascript/reference/places-autocomplete-service#AutocompletionRequest
@JS()
@anonymous
class AutocompletionRequest {
/// Create an AutocompletionRequest
// added in types and componentRestrictions params
external factory AutocompletionRequest({String input,List<String> types, ComponentRestrictions componentRestrictions});
/// The user entered input string.
external String get input;
// I added these
external List<String> get types;
external ComponentRestrictions get componentRestrictions;
}
// Added component restrictions class.
@JS()
@anonymous
class ComponentRestrictions {
external factory ComponentRestrictions();
external Object get country;
external void set country(Object country);
}
Latest Flutter version demands an upgrade in the Gradle plugin version, otherwise the plugin will hold up the build process.
I have implemented a quick fix, but it requires a new release of the Android plugin and the core plugin.
Thanks a lot for this awesome plugin!
Sadly i get a crash on iOS when I try to get autocomplete predictions.
The app immediately shuts down. I made sure that the key works, this cannot be the problem.
Do you have any idea?
Thanks!
Output:
Could not cast value of type 'NSNull' (0x2013b71a8) to 'NSNumber' (0x2013b78b8).
__pthread_kill + 8 libsystem_kernel.dylib
__pthread_kill:Thank you for this package. The only issue currently is that the models used by the package are defined in the platform interface package, but since they are not exported in the main package they must be manually imported every time because the dart linter cannot find them. Thanks!
Warning when i run my app with this package on android:
/Users/******/.pub-cache/hosted/pub.dartlang.org/flutter_google_places_sdk_android-0.1.2+3/android/src/main/kotlin/com/msh/flutter_google_places_sdk/FlutterGooglePlacesSdkPlugin.kt:182:49: warning: 'toUpperCase(Locale): String' is deprecated. Use uppercase() instead.
val typeFilterStrUpper = typeFilterStr?.toUpperCase(Locale.getDefault())
thank you
Hello,
First of all, thank you for building this plugin, the only one I found working correctly for web.
I wonder if you would consider adding a language option in one of the next releases ?
I thought about contributing a PR, but I think one would be needed for each of the platforms, so it might be easier to add it with other planned changes.
Bests,
Sylvain
Hello,
I need some help. For me on iOS viewport is returning null. Am I doing something wrong?
final List fields = [
PlaceField.Viewport,
PlaceField.Location,
];
FetchPlaceResponse response = await _places.fetchPlace(placeId, fields: fields);
Thank you for your help!
Would like to avoid unnecessary billing.
On IOS side, locationBias and locationRestriction is not implemented yet.
I'm getting an invalid request whenever I use [PlacesTypesFilter.CITIES] as the filter on v0.3.6
Please check the error below
I/flutter (19910): FlutterGooglePlacesSdk._callMethod (package:flutter_google_places_sdk/flutter_google_places_sdk.dart:64:12)
findAutoCompletePredictions Exception: com.google.android.gms.common.api.ApiException: 9012: INVALID_REQUEST[OkHttp] sendRequest>>
Places SDK allows to provide of multiple type filters for autocomplete predictions. But current version of the package allows to provide only 1.
Also, the current method setTypeFilter marked as deprecated
updateSettings is an interface method that can be used to update the settings (api key & locale) after the 1st initialization.
I looked in the package and didn't find the current place, any scenario for implementation? My application implements search by address, but I need the current place for the address in user coordinates.
While using the flutter_google_places_sdk
plugin, I noticed that the PlaceField
enum lists an Id
option. However, the Place
object doesn't seem to have a corresponding ID
field.
The PlaceField
enum includes an Id
:
enum PlaceField {
Address,
AddressComponents,
BusinessStatus,
Id,
@JsonValue('LAT_LNG') Location,
// ... rest of the fields
}
The Place
object definition doesn't have a field for ID
:
@freezed
class Place with _$Place {
const factory Place({
required String? address,
required List<AddressComponent>? addressComponents,
// ... rest of the fields
}) = _Place;
}
To make the API consistent, it would be beneficial to include an ID
field in the Place
class. This would align with the options available in PlaceField
enum.
Description:
I'm encountering a type mismatch error when trying to parse the API response from the Google Places SDK using the FlutterGooglePlacesSdk package. The error message indicates that a type _Map<Object?, Object?> is not a subtype of Map<String, dynamic> in a type cast. This error occurs when i'm calling fetchPlace(placeId,fields: []) function.
Flutter Version: 3.10.2
FlutterGooglePlacesSdk Version: 0.3.5
Platform: iOS/Android/Web
Error Message:
flutter: FlutterGooglePlacesSdk::call error: type '_Map<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' in type cast
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: type '_Map<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' in type cast
#0 _$$_PlaceFromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.g.dart:21:44)
#1 new _$_Place.fromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.freezed.dart:391:7)
#2 _$PlaceFromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.freezed.dart:18:17)
#3 new Place.fromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.dart:45:7)
#4 FlutterGooglePlacesSdkMethodChannel._responseFromPlaceDetails (package:flutter_google_places_sdk_platform_interface/method_channel_flutter_google_places_sdk.dart:106:38)
#5 FlutterGooglePlacesSdk._callMethod (package:flutter_google_places_sdk/flutter_google_places_sdk.dart:88:12)
I was using 0.3.2+9 version and everything was working fine few days ago.
I looked in the plugin and found that the autocomplete response model has the places attribute commented out, while the native sdk in all platforms has this field in the model. Do you have any plans to implement this functionality?
Does this package populate session tokens automatically or do we need to provide one each time we make a request say to findAutocompletePredictions and fetchPlace?
On Android and iOS the place field Address
is mapped with Place.Field.ADDRESS
and formattedAddress
respectively.
On Web platform it is mapped with add_address
, why? The formattedAddress
is also available for this platform
Ref
It seems that the photo metadata are incomplete
var response = await this.googlePlace.fetchPlace(placeId, fields: [
PlaceField.PhotoMetadatas,
]);
for (var photo in resonce.place!.photoMetadatas!) {
print(photo);
}
// PhotoMetadata{attributions: <a href="https://maps.google.com/maps/contrib/104830505324877229444">Instinct Origine</a>, width: 2316, height: 2048}
// PhotoMetadata{attributions: <a href="https://maps.google.com/maps/contrib/104830505324877229444">Instinct Origine</a>, width: 4200, height: 3360}
// PhotoMetadata{attributions: <a href="https://maps.google.com/maps/contrib/104830505324877229444">Instinct Origine</a>, width: 2991, height: 3769}
The medata only contains the link to the contrib page.
I was expecting the url to the images. I am missing something ?
Thank you for your lib
It forces the application to search constantly. Having the ability to control when the search fires (e.g. debouncing, if the input has more than 3 characters) would be good to save on both token usage/rate limits as well as bandwidth to/from the application.
I noticed that the web implementation does not use the session token.
The _lastSessionToken
is declared optional but it is never used. Also there is no getSessionToken
method to check the whether the session should be reset (this method is included in the iOS and Android implementations).
I'm rather new to programming in Dart but I noticed that when I run the example I get an error along the lines of "Expected a value of type 'Object', but got one of type 'Null'".
I appear to have narrowed the issue down to not accounting for null safety (https://dart.dev/null-safety/understanding-null-safety). However I don't quite know how to rewrite the example just yet so I can't commit a direct change.
Experiencing this unhandled exception when requesting details of some places with plusCode
and the Places API doesn't provide plus code information:
E/flutter (28807): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Null' is not a subtype of type 'String' in type cast
E/flutter (28807): #0 _$$_PlusCodeFromJson (package:flutter_google_places_sdk_platform_interface/src/types/plus_code.g.dart:10:42)
E/flutter (28807): #1 new _$_PlusCode.fromJson (package:flutter_google_places_sdk_platform_interface/src/types/plus_code.freezed.dart:115:7)
E/flutter (28807): #2 _$PlusCodeFromJson (package:flutter_google_places_sdk_platform_interface/src/types/plus_code.freezed.dart:18:20)
E/flutter (28807): #3 new PlusCode.fromJson (package:flutter_google_places_sdk_platform_interface/src/types/plus_code.dart:22:7)
E/flutter (28807): #4 _$$_PlaceFromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.g.dart:37:22)
E/flutter (28807): #5 new _$_Place.fromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.freezed.dart:405:7)
E/flutter (28807): #6 _$PlaceFromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.freezed.dart:18:17)
E/flutter (28807): #7 new Place.fromJson (package:flutter_google_places_sdk_platform_interface/src/types/place.dart:46:7)
E/flutter (28807): #8 FlutterGooglePlacesSdkMethodChannel._responseFromPlaceDetails (package:flutter_google_places_sdk_platform_interface/method_channel_flutter_google_places_sdk.dart:106:38)
E/flutter (28807): <asynchronous suspension>
E/flutter (28807): #9 FlutterGooglePlacesSdk._callMethod (package:flutter_google_places_sdk/flutter_google_places_sdk.dart:64:12)
E/flutter (28807): <asynchronous suspension>
E/flutter (28807): ...
Re-produce example:
The error is on specific type casting:
compoundCode: json['compoundCode'] as String,
which is null sometimes.
Is there any particular reason why you return only the string value of photo attributions in metadata instead of the full link? Because according to Google Places rules, we are supposed to include a tappable link to those attributions when presenting the image.
Also, is there any particular reason why image is returned as an Image
widget instead of directly as a Uint8List? If is was possible to get the raw image data, we could do something else with it, store it somewhere (but maybe that's against the ToS, I don't know), or build our own memory image with custom parameters (especially for fit).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.