a meme-based chat application

Overview

MemeChat

An example of a meme-enabled chat app on Flutter, using Firebase, Google Sign In, and device camera integration.

MemeChat contains platform-specific elements for Android and iOS.

Flutter and Firebase Setup

  1. Follow the installation instructions on www.flutter.io to install Flutter.
  2. You'll need to create a Firebase instance. Follow the instructions at https://console.firebase.google.com.
  3. Once your Firebase instance is created, you'll need to enable anonymous and Google authentication.
    • Go to the Firebase Console for your new instance.
    • Click "Authentication" in the left-hand menu
    • Click the "sign-in method" tab
    • Click "anonymous" and enable it
    • Click "Google" and enable it
  4. Next, click "Database" in the left-hand menu. Create a real-time database and start in test mode. Click "Enable".
  5. Finally, click "Storage" in the left-hand menu. Enable it.

Android Setup

  1. Create an app within your Firebase instance for Android, with package name com.yourcompany.memechat
  2. Follow instructions to download google-services.json, and place it into memechat/android/app/
  3. Run the following command to get your SHA-1 key:
keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
  1. In the Firebase console, in the settings of your Android app, add your SHA-1 key by clicking "Add Fingerprint".

iOS Setup

  1. Create an app within your Firebase instance for iOS, with package name com.yourcompany.memechat
  2. Follow instructions to download GoogleService-Info.plist, and place it into memechat/ios/Runner
  3. Open memechat/ios/Runner/Info.plist. Locate the CFBundleURLSchemes key. The second item in the array value of this key is specific to the Firebase instance. Replace it with the value for REVERSED_CLIENT_ID from GoogleService-Info.plist

Run the App

MemeChat can be run like any other Flutter app, either through the IntelliJ UI or through running the following command from within the MemeChat directory:

flutter run
Comments
  • Build errors with new flutter SDKs?

    Build errors with new flutter SDKs?

    I am having problems building this repo after cloning the github. You can reproduce this by trying to clone this repo and then build it.

    TLDR version:

    Getting build errors that I couldn't fix. I think it may be just a needing to update old pubspec.yaml and build.gradle files (mostly). However, my attempts so far have failed. I'll keep trying.

    Loved the memechat video from 2017. Want to try to study this code, but having problems with getting the firebase to run. (Yes, I checked google-services.json)

    Build.gradle missing or old

    The android/app level build.gradle is missing the firebase implementation documents. My guess: this is because firebase for flutter was different in 2017 vs today.

    One might need to add something like

        implementation 'com.google.firebase:firebase-analytics:17.3.0'
        implementation 'com.google.firebase:firebase-auth:19.3.0'
        implementation 'com.google.firebase:firebase-firestore:21.4.2'
        implementation 'com.google.firebase:firebase-storage:19.1.1'
        implementation 'com.google.firebase:firebase-database:19.2.1'
    

    The android level build.gradle has an older version of google services (from 2017).

        // classpath 'com.google.gms:google-services:3.2.1'
            classpath 'com.google.gms:google-services:4.3.3'
    

    AddListener type checks in 2020.

    The addListener method gives a type checking error. This can be fixed by declaring the type. This is the fix I implemented.

        if (imageUrl != null) {
          NetworkImage image = NetworkImage(imageUrl);
          ImageStreamListener isl = ImageStreamListener((_, __) {
            animationController?.forward();
          });
          image
              .resolve(createLocalImageConfiguration(context))
              .addListener(isl);
    

    Still can't build with Android Studio.

    I'm still getting build errors with Android Studio. I've tried a few different things and they don't work.

    If I don't include the implementation lines for firebase, I get Database can't connect errors. (makes sense... some files missing).

    If I do include them, I get other errors.

    I also tried starting a blank flutter repo and then copying in the code. Similar errors.

    Here is one set of the errors I am getting:

    Launching lib/main.dart on PH 1 in debug mode...
    [!] Your app isn't using AndroidX.
        To avoid potential build failures, you can quickly migrate your app by following the steps on https://goo.gl/CP92wY.
    Running Gradle task 'assembleDebug'...
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Build file '/Users/howardchong/Proj2019/flutterDev/memechathocho/android/app/build.gradle' line: 65
    
    * What went wrong:
    A problem occurred evaluating project ':app'.
    > Could not find method implementation() for arguments [com.google.firebase:firebase-analytics:17.3.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 18s
    Finished with error: Gradle task assembleDebug failed with exit code 1
    

    My flutter doctor in case it's helpful:

    Macs-MacBook-Air:~ howardchong$ flutter doctor -v
    [✓] Flutter (Channel stable, v1.12.13+hotfix.9, on Mac OS X 10.14.6 18G2022,
        locale en-US)
        • Flutter version 1.12.13+hotfix.9 at
          /Users/howardchong/Proj2019/flutterDev/flutter
        • Framework revision f139b11009 (10 days ago), 2020-03-30 13:57:30 -0700
        • Engine revision af51afceb8
        • Dart version 2.7.2
    
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
        • Android SDK at /Users/howardchong/Library/Android/sdk
        • Android NDK location not configured (optional; useful for native profiling
          support)
        • Platform android-29, build-tools 29.0.2
        • Java binary at: /Applications/Android
          Studio.app/Contents/jre/jdk/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build
          1.8.0_152-release-1343-b01)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 11.2)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Xcode 11.2, Build version 11B52
        • CocoaPods version 1.8.4
    
    [✓] Android Studio (version 3.4)
        • Android Studio at /Applications/Android Studio.app/Contents
        • Flutter plugin version 39.0.1
        • Dart plugin version 183.6270
        • Java version OpenJDK Runtime Environment (build
          1.8.0_152-release-1343-b01)
    
    [✓] VS Code (version 1.39.2)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.6.0
    
    [✓] Connected device (1 available)
        • PH 1 • PM1LHMA7B1300032 • android-arm64 • Android 10 (API 29)
    
    • No issues found!
    
    opened by chonghorizons 5
  • getting error while running, app gets installed but only a black screen is shown and then it shuts down.

    getting error while running, app gets installed but only a black screen is shown and then it shuts down.

    Here's the log

    Ghani@Ghani-PC MINGW64 /e/projects/flutter/memechat (master)
    $ flutter run
    Launching lib/main.dart on Redmi Note 4 in debug mode...
    Initializing gradle...
    Resolving dependencies...
    Running 'gradlew assembleDebug'...
    Built build\app\outputs\apk\app-debug.apk (24.7MB).
    Syncing files to device Redmi Note 4...
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzasl>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzasl is an interface (declaration of 'com.google.android.gms.internal.zzasl' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzasn>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzasl is an interface (declaration of 'com.google.android.gms.internal.zzasl' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzarm>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzarj>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzarm>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzark>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzarm>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzarg>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzarm>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    I/art     (10005): Rejecting re-init on previously-failed class java.lang.Class<com.google.android.gms.internal.zzari>: java.lang.IncompatibleClassChangeError: Superclass com.google.android.gms.internal.zzbax of com.google.android.gms.internal.zzarm is an interface (declaration of 'com.google.android.gms.internal.zzarm' appears in /data/app/com.yourcompany.memechat-1/base.apk)
    I/art     (10005):   at void com.google.android.gms.auth.api.Auth.<clinit>() ((null):-1)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.init(io.flutter.plugin.common.MethodChannel$Result, java.util.List, java.lang.String) (GoogleSignInPlugin.java:181)
    I/art     (10005):   at void io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(io.flutter.plugin.common.MethodCall, io.flutter.plugin.common.MethodChannel$Result) (GoogleSignInPlugin.java:121)
    I/art     (10005):   at void io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(java.nio.ByteBuffer, io.flutter.plugin.common.BinaryMessenger$BinaryReply) (MethodChannel.java:191)
    I/art     (10005):   at void io.flutter.view.FlutterView.handlePlatformMessage(java.lang.String, byte[], int) (FlutterView.java:690)
    I/art     (10005):   at void android.os.MessageQueue.nativePollOnce(long, int) (MessageQueue.java:-2)
    I/art     (10005):   at android.os.Message android.os.MessageQueue.next() (MessageQueue.java:323)
    I/art     (10005):   at void android.os.Looper.loop() (Looper.java:136)
    I/art     (10005):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6195)
    I/art     (10005):   at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:874)
    I/art     (10005):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:764)
    I/art     (10005):
    F/flutter (10005): [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(31)] Check failed: env->ExceptionCheck() == JNI_FALSE.
    F/libc    (10005): Fatal signal 6 (SIGABRT), code -6 in tid 10005 (ompany.memechat)
    
    opened by abdulghanitech 5
  • Error running Gradle

    Error running Gradle

    Hello, I cloned memechat and did everything as you mentioned in Usage. (with skipping IOS) But i'm gettin below error. Can you help me please?

    Regards, Ali

    • Error running Gradle: Exit code 1 from: /Users/alikopasa/Documents/FlutterProjects/memechat/android/gradlew app:properties: google-services plugin could not detect any version for com.google.android.gms or com.google.firebase, default version: 9.0.0 will be used. please apply google-services plugin at the bottom of the build file.

    FAILURE: Build failed with an exception.

    • Where: Build file '/Users/alikopasa/Documents/FlutterProjects/memechat/android/build.gradle' line: 22

    • What went wrong: A problem occurred evaluating root project 'android'.

    A problem occurred configuring project ':app'. Could not resolve all dependencies for configuration ':app:_debugApk'. > A problem occurred configuring project ':firebase_auth'. > Failed to notify project evaluation listener. > com.android.build.gradle.tasks.factory.AndroidJavaCompile.setDependencyCacheDir(Ljava/io/File;)V

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    • Get more help at https://help.gradle.org

    BUİLD FAILED in 1s

    Finished with error: Please review your Gradle project setup in the android/ folder.

    opened by alikopasa 4
  • Build for iOS fails

    Build for iOS fails

    build for iOS fails, complaining that it cannot perform CopyPlistFile with command line argument /memechat/build/ios/Release-iphonesimulator/Runner.app/GoogleService-Info.plist Runner/GoogleService-Info.plist In fact, if you look in package Runner.app located at Release-iphonesimulator/Runner.app you will find the files app.flx AppFrameworkInfo.plist Debug.xcconfig Generated.xcconfig Runner There is no file path GoogleService-Info.plist Runner/GoogleService-Info.plist in Runner.app

    How to fix this?

    Thanks. P.S. Building the Flutter gallery demo for iOS succeeds with no problems.

    opened by thinklog 3
  • Make meme dialog more generic

    Make meme dialog more generic

    The main thing I'm changing here is that I'm making the meme screen into a full-screen dialog that returns the text in its call to Navigator.pop(). This keeps all the Firebase uploading logic to one place in main.dart. I got rid of the ability to change the photo in the meme dialog; instead you have to dismiss the dialog to change the picture.

    To avoid the flash of unstyled content while the image upload happens, the dialog loads the image from file instead of the network (uploading happens in the background). We could also download the network image before adding it to the ListView, so that it will instantly lay out in the ListView correctly. It's not clear to me what the cleanest way to do that is, but I can look into it if you want.

    opened by collinjackson 3
  • Google sign in working!

    Google sign in working!

    I've been testing only on iOS so far, haven't yet added the code to make Google Sign In work on android. But it works on iOS!

    @collinjackson @efortuna

    opened by emshack 3
  • fix syntax for firebase storage

    fix syntax for firebase storage

    When running the app for the first time, I got errors regarding Firebase Storage. I learned that they updated their SDK commands. This PR will fix the build from failing. You can read about it in this Stack Overflow page.

    opened by kelseyhuse30 2
  • keytool password is missing in README.md

    keytool password is missing in README.md

    When following the instructions in readme.md at one point a password is required for the creation of the SHA-1 key. Since the code example is targeted at beginners (like myself) I thougt it might be nice to include the password (it's android BTW) Thanks!

    opened by Soundbytes 2
  • iOS Build fails with Firebase error

    iOS Build fails with Firebase error

    I get an error when building iOS even after I have the GoogleService-Info.plist under memechat/ios/Runner/

    [Firebase/Core][I-COR000003] The default Firebase app has not yet been configured. Add [FIRApp configure] to your application initialization. Read more: https://goo.gl/ctyzm8. [Firebase/Core][I-COR000012] Could not locate configuration file: 'GoogleService-Info.plist'.

    Note: I had to add the below into my Info.plist: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>com.blahblah.memechat</string> <string>[REAL REVERSED_CLIENT_ID]</string> </array> </dict> </array>

    opened by viju85 2
  • GoogleUserCircleAvatar breaking behaviour change

    GoogleUserCircleAvatar breaking behaviour change

    Hello, this does not work anymore: const GoogleUserCircleAvatar( String profileImageUrl, );

    source: https://groups.google.com/forum/#!topic/flutter-dev/7MRiSpxDeo0

    opened by gbaccetta 2
  • java.lang.Exception: Only one command is allowed: both -exportcert and -list were specified.

    java.lang.Exception: Only one command is allowed: both -exportcert and -list were specified.

    Hi, cool app! When trying to follow the Android Setup instructions, I get:

    keytool -exportcert -list -v \
    > -alias androiddebugkey -keystore ~/.android/debug.keystore
    keytool error: java.lang.Exception: Only one command is allowed: both -exportcert and -list were specified.
    
    opened by zephyo 1
  • README ONLY: Realtime Database no longer has

    README ONLY: Realtime Database no longer has "test mode"

    Fixed my bug report/issue #41.

    People who clone this great repo need to manually change the RealtimeDatabase Rules. This is a gotcha for newbies to the nomenclature of firebase. CloudFirestore != RealtimeDatabase.

    (console.firebase.google.com has changed and deprecated/stopped promoting realtimeDatabase)

    Also, small edit to the README.MD on the SHA1 key based on Issue #40.

    PS: (I might try to rewrite this to use cloud_firestore since I'll be doing that for my project today, anyway.)

    opened by chonghorizons 0
  • in Main File addListener((_, __) can't be assigned to the parameter type 'ImageStreamListener'

    in Main File addListener((_, __) can't be assigned to the parameter type 'ImageStreamListener'

    There is an error in main.dart file in line 80, can't be assigned to the parameter type 'ImageStreamListener', I am using the latest version of Flutter and Dart.

    would be nice if you can help me with the error, I tried to look answer on intenert and I couldnt find anything, I am new on this :(

    Thanks in advance

    opened by rjzg85 1
  • Firebase Token retrieval failed: AUTHENTICATION_FAILED

    Firebase Token retrieval failed: AUTHENTICATION_FAILED

    Hello there,

    I'm a Flutter newbie. I've followed the instructions and it works perfectly in iOS simulator but not my Pixel 2 API 28 simulator and the following error shows:

    Kitts-MacBook-Pro:memechat-master kittlee$ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.13.6 17G5019, locale en-MY) [✓] 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.3) [✓] Connected device (1 available)

    • No issues found! Kitts-MacBook-Pro:memechat-master kittlee$ flutter run Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider enabling software rendering with "--enable-software-rendering". Launching lib/main.dart on Android SDK built for x86 in debug mode... Initializing gradle... 1.1s Resolving dependencies... 2.8s registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) Running Gradle task 'assembleDebug'...
    Running Gradle task 'assembleDebug'... Done 2.8s Built build/app/outputs/apk/debug/app-debug.apk. E/FirebaseInstanceId( 6227): Token retrieval failed: AUTHENTICATION_FAILED I/FA ( 6227): Tag Manager is not found and thus will not be used
    W/ompany.memecha( 6227): Unsupported class loader
    W/DynamiteModule( 6227): Local module descriptor class for com.google.firebase.auth not found. W/BiChannelGoogleApi( 6227): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@b9a068f W/DynamiteModule( 6227): Local module descriptor class for com.google.firebase.auth not found. I/FirebaseAuth( 6227): [FirebaseAuth:] Loading module via FirebaseOptions. I/FirebaseAuth( 6227): [FirebaseAuth:] Preparing to create service connection to gms implementation D/ ( 6227): HostConnection::get() New Host Connection established 0xe71fc0c0, tid 6257 D/EGL_emulation( 6227): eglMakeCurrent: 0xe71b9360: ver 3 0 (tinfo 0xe6518f00) 2,198ms (!) 🔥 To hot reload changes while running, press "r". To hot restart (and rebuild state), press "R". An Observatory debugger and profiler on Android SDK built for x86 is available at: http://127.0.0.1:54646/ For a more detailed help message, press "h". To detach, press "d"; to quit, press "q". W/ActivityThread( 6227): handleWindowVisibility: no activity for token android.os.BinderProxy@fa1f8d9 D/EGL_emulation( 6227): eglMakeCurrent: 0xe9185c60: ver 3 0 (tinfo 0xd33e6050) W/IInputConnectionWrapper( 6227): endBatchEdit on inactive InputConnection W/IInputConnectionWrapper( 6227): beginBatchEdit on inactive InputConnection W/IInputConnectionWrapper( 6227): endBatchEdit on inactive InputConnection E/FirebaseInstanceId( 6227): Token retrieval failed: AUTHENTICATION_FAILED D/EGL_emulation( 6227): eglMakeCurrent: 0xe9185c60: ver 3 0 (tinfo 0xd33e6050)


    I then tried to use API 24 and the AUTHENTICATION_FAILED is gone but my google play service is outdated.

    Kitts-MacBook-Pro:memechat-master kittlee$ flutter run Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider enabling software rendering with "--enable-software-rendering". Launching lib/main.dart on Android SDK built for x86 in debug mode... Initializing gradle... 1.3s Resolving dependencies... 2.7s registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) Running Gradle task 'assembleDebug'...
    Running Gradle task 'assembleDebug'... Done 3.2s Built build/app/outputs/apk/debug/app-debug.apk. Installing build/app/outputs/apk/app.apk... 3.4s I/Choreographer( 4501): Skipped 39 frames! The application may be doing too much work on its main thread. D/EGL_emulation( 4501): eglMakeCurrent: 0xb1505d80: ver 2 0 (tinfo 0xb1503f20) I/FA ( 4501): This instance being marked as an uploader W/System ( 4501): ClassLoader referenced unknown path: /system/priv-app/PrebuiltGmsCore/lib/x86 W/GooglePlayServicesUtil( 4501): Google Play services out of date. Requires 12451000 but found 11743470 W/GooglePlayServicesUtil( 4501): Google Play services out of date. Requires 12451000 but found 11743470 W/DynamiteModule( 4501): Local module descriptor class for com.google.firebase.auth not found. W/BiChannelGoogleApi( 4501): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@1e95d54 W/DynamiteModule( 4501): Local module descriptor class for com.google.firebase.auth not found. W/GooglePlayServicesUtil( 4501): Google Play services out of date. Requires 12451000 but found 11743470 W/DynamiteModule( 4501): Local module descriptor class for com.google.firebase.auth not found. W/GooglePlayServicesUtil( 4501): Google Play services out of date. Requires 12451000 but found 11743470 D/EGL_emulation( 4501): eglMakeCurrent: 0xad8859a0: ver 2 0 (tinfo 0x9411b000) Syncing files to device Android SDK built for x86... 3,365ms (!) 🔥 To hot reload changes while running, press "r". To hot restart (and rebuild state), press "R". An Observatory debugger and profiler on Android SDK built for x86 is available at: http://127.0.0.1:54979/ For a more detailed help message, press "h". To detach, press "d"; to quit, press "q". W/IInputConnectionWrapper( 4501): getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper( 4501): getTextBeforeCursor on inactive InputConnection


    Does anyone encounter the same problem with Android simulator?

    opened by kittlsk 1
Owner
Emily Fortuna
Emily Fortuna
It is a simple group chat application made with flutter back-end by Firebase. People can chat like a community chat.

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

Moideen Rafih P A 4 Aug 7, 2022
A powerful Flutter chat UI component library and business logic for Tencent Cloud Chat, creating seamless in-app chat modules for delightful user experiences.

<style> .button-9 { appearance: button; backface-visibility: hidden; background-color: #1d52d9; border-radius: 6px; border-width: 0; box-shadow: rgba(

Tencent Cloud 63 Aug 11, 2023
Chat-application - Build Chat Application using Flutter and Firebase

Build Chat Application using Flutter & Firebase Source Code - Enjoy ! Social Med

Muhammad Irvan 0 Jan 3, 2022
Amir Khan 47 Jan 8, 2023
The most complete Chat UI for flutter highly customizable and helps developing chat UI faster.

⚠️ Dashchat v2 is available in v2 branch ⚠️ You can open issues for the v2 to indicate things we need to implement/fix. Also the API can change until

Fayeed Pawaskar 432 Dec 11, 2022
Chat-App - A Chat App with flutter and Firebase and Video Calling using WebRTC

chat_app A chat app with flutter and firebase with image message support and vid

Reza Hosseinypour 10 Nov 23, 2022
Social Media Chat application based on mail and made with flutter

gossip_box A Social Media Chat app Based on mail built with flutter, dart and firebase. Here you can see the demo video: PS: This is created with fire

V Nagasai 5 Jun 22, 2022
A proximity based chat room

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

Devan Kavalchek 1 Sep 1, 2022
:rocket: This application using flutter for develop a realtime chat app

Flutter Chat Socket Description: ?? This application using Flutter for develop a realtime chat app How I can run it? ?? Clone this repository ?? Run b

Dao Hong Vinh 17 Dec 31, 2022
A sophisticated Chat Application [NestJs+Flutter].

Hornbill Key features Used sockets for messaging and loading registered contacts Sqflite to store chats on device Repository pattern Tech Stack [Flutt

Nikhil Nayak 18 Dec 26, 2022
Microsoft Teams Clone is a Video conference application with a rich integrated chat experience, to connect with friends,family & colleagues. Developed as a redesign of Microsoft Teams during my menteeship at Microsoft Engage 2021

Microsoft Teams Clone by Karanjot Singh About Microsoft Teams Clone is a Video conference application with a rich integrated chat experience, to conne

Karanjot Singh 60 Dec 28, 2022
Cross-platform Twitch Chat application with 3rd-party addon support!

Chatsen Chatsen is a cross-platform application that allows you to chat on Twitch with support for 3rd-party services such as 7TV, BTTV and FFZ. It al

Chatsen 172 Dec 31, 2022
Chat Application

CONNECT Chat Application With over 4000 lines of code and many days of struggle, I have built my Chat Application named "Connect" right from scratch u

mohitmundra 7 Jan 31, 2022
Chatify Flutter & Firebase Powered Chat Application

Chatify Flutter Application Chatify Flutter & Firebase Powered Chat Application Flutter Flutter allows you to build beautiful native apps on iOS and A

null 13 Oct 18, 2022
Developed a Group chat application using Flutter and Firebase, where users can register and create groups or join already existing groups and start conversing with each other.

GroupChatApp About Developed a Group chat application using Flutter and Firebase, where users can register and create groups or join already existing

Ahmed Gulab Khan 221 Dec 1, 2022
A modern voice chat application. The project has been written solely in Dart Language.

VChat A modern voice chat application. The application welcomes the user with the login screen. After a simple registration process, an empty "Home" s

Bulent Baris Kilic 6 Aug 18, 2022
Andriod online chat application using flutter.

hi i am Bubai das make this andriod online chat application using flutter. requirement A Functional Requirement (FR) is a description of the service t

null 0 Nov 24, 2021
let's build a mobile chat application using flutter and firebase

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

azzouz abdelhakim 2 Oct 7, 2022
A fully functional chat application built with Flutter and Stream

?? SpikeChat A fully functional chat application built with Flutter and Stream! ✅ Join the chat room (If you have the secret passcode hehe) ✅ Send tex

Ashton Jones 20 Apr 30, 2022