Giter Club home page Giter Club logo

messio's Introduction

Messio

Messio

An open source messenger app built using flutter.

Part of Medium Series 60 days of Flutter written by Aditya Gurjar

Posts In This Series

60 Days Of Flutter : Building a Messenger from Scratch

60 Days of Flutter : Day 1 : Creating the App

60 Days of Flutter : Day 2 : Setting Up A CI With Flutter

60 Days of Flutter : Day 3–4 : Building a Chat Screen in Flutter

60 Days of Flutter : Day 4–5 : Widget Testing With Flutter

60 Days of Flutter : Day 6–7 : Implementing a Slideable Widget Using Bottomsheet in Flutter

60 Days of Flutter : Day 8 : Changing The Launcher Icon and Implementing GestureDetector

60 Days of Flutter : Day 9–10–11 : Creating Awesome Register Screen in Flutter

60 Days of Flutter : Day 12–14 : Understanding BLoC Pattern in Flutter

60 Days of Flutter : Day 15–17 : Implementing Registration Screen using ‘flutter_bloc’

60 Days of Flutter : Day 18–19 : Unit Testing in Flutter using ‘ mockito’

60 Days of Flutter : Day 20–21 : Unit Testing a Bloc in Flutter

60 Days of Flutter : Day 22–23 : Building a Modern Contacts Page in Flutter

60 Days of Flutter : Day 24–26 : Building a Animated Progress Fab and the Contacts Bloc in Flutter

60 Days of Flutter : Day 27–29 : Sending and Retrieving Messages from Firebase using BLOC

60 Days of Flutter : Day 30–32 : Firebase Chat UI using Stream and Bloc

60 Days of Flutter : Day 33–35 : Paginating data from Firestore using Firebase Queries

60 Days of Flutter : Day 36–38 : Seamlessly Upload Files to Firebase Storage

60 Days of Flutter : Day 39–41 : One UI Inspired Attachments Showcase Page

60 Days of Flutter : Day 42–44 : Creating the Home Page & Quick Peek BottomSheet for Messages

Happy learning. 👍

Show some ❤️ and star the repo to support the project

GitHub stars GitHub forks GitHub watchers GitHub followers Twitter Follow

❤️ Found this project useful?

If you found this project useful, then please consider giving it a ⭐ on Github and sharing it with your friends via social media.

Project Created & Maintained By

Aditya Gurjar

Donate

If you found this project helpful or you learned something from the source code and want to thank me, consider buying me a cup of ☕

messio's People

Contributors

adityadroid avatar basarozcan avatar dependabot[bot] avatar gursheeshsingh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

messio's Issues

NumberPickerwidget and CircleAvtaar issues

I am having two issues on register page. The number picker widget only works if I select an image from gallery first. The background image only gets updated when the image is selected for the first time, it does not work when we select a new image.

ChatRowWidget not displaying in HomePage and ConversationBottomSheet

Hello, Mr. Aditya Gurjar, and thank you for this project.

I am unable to see my chat messages in the home screen and messages bottom sheet, after sending/receiving messages to/from my contacts.

When I am in the home screen, I no longer see the CircularProgressIndicator() spinning, which to me is an indicator that the chat messages have been fetched, but then I see no chat messages listed.

I am running a clone of this project, and I have done the Firebase setup. I have also created the composite index, as instructed by Firebase.

Here is the log from my Debug Console.

Launching lib\main.dart on Infinix X572 in debug mode...
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
Built build\app\outputs\apk\debug\app-debug.apk.
W/DynamiteModule(22933): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(22933): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(22933): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/asset   (22933): Asset path /system/framework/OSIcon/OSIcon.apk is neither a directory nor file (type=1).
W/asset   (22933): AssetManager-->addDefaultAssets isok4 is false
I/zygote64(22933): The ClassLoaderContext is a special shared library.
I/zygote64(22933): The ClassLoaderContext is a special shared library.
V/NativeCrypto(22933): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 284 native methods...
D/NetworkSecurityConfig(22933): No Network Security Config specified, using platform default
I/ProviderInstaller(22933): Installed default security provider GmsCore_OpenSSL
I/flutter (22933): AppLaunched
D/HWUIExtension(22933): MTKProgramCache.generateProgram: 562984313159681
D/HWUIExtension(22933): createProgram 0x0002000800000001, binary 0x74e07faf78, length 5252, format 36705 within 5445ns
I/zygote64(22933): Do partial code cache collection, code=61KB, data=40KB
I/zygote64(22933): After code cache collection, code=61KB, data=40KB
I/zygote64(22933): Increasing code cache capacity to 256KB
I/System.out(22933): port:443
I/flutter (22933): true
I/flutter (22933): FetchChatListEvent
I/flutter (22933): FetchHomeChatsEvent
I/flutter (22933): ReceivedChatsEvent
I/flutter (22933): ReceivedChatsEvent

Any help will be greatly appreciated. Thank you.

Feature suggestion: real-time chat

The one feature that I miss from ICQ was the ability to see the other person typing in real time. To improve on this, you can add a condition such that both parties need to have this option enabled in order to see each other's responses in real time.

AuthenticationEvent build error with Equatable

seems that Equatable API had changed and the code at the events part do not build any longer, i have the following code:

import 'dart:io';
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

@immutable
abstract class AuthenticationEvent extends Equatable {
const AuthenticationEvent([List props = const []]) : super();
}

class ScreenEntered extends AuthenticationEvent {
@OverRide
String toSring() => "ScreenEntered";
}

and getting an error that i am missing a getter for Equatable.props, i think this is related to API change

BLOC Building Issue

I'm having a problem while creating blocs. Every time I create a package named blocs and add another package with name authentication, it automatically turns to blocs.authentication and try to add blocs using the plugin you suggested it forms lowercase lettered blocs with underscores
messenger_app  F__FLUTTER_messenger_app  -  _lib_pages_RegisterPage dart  messenger_app  - Android Studio 18-Oct-19 1_07_19 AM
messenger_app  F__FLUTTER_messenger_app  -  _lib_pages_RegisterPage dart  messenger_app  - Android Studio 18-Oct-19 1_07_19 AM

and the RegisterPage.dart is also not recognizing that.

User not found

When I try to add a user that is in the database and I have the correct username but I keep getting user not found here is the rules for the db. I am wondering if this is related to the code or the rules? Also code here https://github.com/Jukez17/WeChat

service cloud.firestore {
  match /databases/{database}/documents {
  match /users/{document=**} {
   
   function isSignedIn() {
   return request.auth.uid != null;
   }
//Allow creating a new user to anyone who is authenticated
   allow create: if isSignedIn();
//Allow read if signed in 
   allow read: if isSignedIn();
// Allow update only if the uid matches (same user)
   allow update: if isSignedIn();// && request.auth.uid == resource.data.uid;
// Allow delete only if the uid matches (same user)
   allow delete: if isSignedIn();// && request.auth.uid == resource.data.uid;
  match /contacts/{contacts} {
   
   allow create, read, update, delete: if isSignedIn();
   
   }
  }
  match /username_uid_map/{document=**}  {
  
      function isSignedIn() {
        return request.auth.uid != null;
      }

      allow create, read, update, delete : if isSignedIn();
  }
  match /chats/{document=**}  {

		function isSignedIn() {
			rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
  match /users/{document=**} {
   
   function isSignedIn() {
   return request.auth.uid != null;
   }
//Allow creating a new user to anyone who is authenticated
   allow create: if isSignedIn();
//Allow read if signed in 
   allow read: if isSignedIn();
// Allow update only if the uid matches (same user)
   allow update: if isSignedIn();// && request.auth.uid == resource.data.uid;
// Allow delete only if the uid matches (same user)
   allow delete: if isSignedIn();// && request.auth.uid == resource.data.uid;
  match /contacts/{contacts} {
   
   allow create, read, update, delete: if isSignedIn();
   
   }
  }
  match /username_uid_map/{document=**}  {
  
      function isSignedIn() {
        return request.auth.uid != null;
      }

      allow create, read, update, delete : if isSignedIn();
  }
  match /chats/{document=**}  {

		function isSignedIn() {
			return request.auth.uid != null;
		}

		allow create, read, update, delete : if isSignedIn();
	}
}
}return request.auth.uid != null;
		}

		allow create, read, update, delete : if isSignedIn();
	}
}

Chat Item Widget Issue

The chat item widget is showing errors after implementing the slide down gesture to collapse the conversation list.
The errors are

Incorrect use of Parentdatawidget.
Flexible widgets must be placed directly
inside Flex widgets.
Flexible (no depth, flex: 1, dirty has a
Flex ancestor, but there are other widgets
between them:

  • Decorated Box(bg: BoxDecoration(color:
    Color (Fafafa )
    Expanded(flex: 11
    These widgets cannot come between a
    Flexible and its Flex
    The ownership chain for the parent of the
    offending Flexible was:
    Chat qListWidget + Decorated Box
    Container
    Expanded
    Column
    Conversation Page - RepaintBoundary
    Indexed Semantics +
    Notification Listener<Keep Alive Notification

KeepAlive

Kotlin

How does this work with MainActivity.kt Also the images arent loading in the attachments page.

import android.media.MediaMetadataRetriever;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
  private static String TAG = "Android Platform";
  private static final int HIGH_QUALITY_MIN_VAL = 70;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
    new MethodChannel(getFlutterView(), "app.messio.channel").setMethodCallHandler(
            (call, result) -> {
              final Map<String, Object> args = call.arguments();

              try {
                final String video = (String) args.get("video");
                final int format = (int) args.get("format");
                final int maxhow = (int) args.get("maxhow");
                final int quality = (int) args.get("quality");
                new Thread(() -> {
                  if (call.method.equals("file")) {
                    final String path = (String) args.get("path");
                    String data = buildThumbnailFile(video, path, format, maxhow, quality);
                    runOnUiThread(()-> result.success(data));
                  } else if (call.method.equals("data")) {
                    byte[] data = buildThumbnailData(video, format, maxhow, quality);
                    runOnUiThread(()-> result.success(data));
                  } else {
                    runOnUiThread(result::notImplemented);
                  }
                }).start();

              } catch (Exception e) {
                e.printStackTrace();
                result.error("exception", e.getMessage(), null);
              }
            });
  }

  private static Bitmap.CompressFormat intToFormat(int format) {
    switch (format) {
      default:
      case 0:
        return Bitmap.CompressFormat.JPEG;
      case 1:
        return Bitmap.CompressFormat.PNG;
      case 2:
        return Bitmap.CompressFormat.WEBP;
    }
  }

  private static String formatExt(int format) {
    switch (format) {
      default:
      case 0:
        return "jpg";
      case 1:
        return "png";
      case 2:
        return "webp";
    }
  }

  private byte[] buildThumbnailData(String vidPath, int format, int maxhow, int quality) {
    Log.d(TAG, String.format("buildThumbnailData( format:%d, maxhow:%d, quality:%d )", format, maxhow, quality));
    Bitmap bitmap = createVideoThumbnail(vidPath, maxhow);
    if (bitmap == null)
      throw new NullPointerException();

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(intToFormat(format), quality, stream);
    bitmap.recycle();
    if (bitmap == null)
      throw new NullPointerException();
    return stream.toByteArray();
  }

  private String buildThumbnailFile(String vidPath, String path, int format, int maxhow, int quality) {
    Log.d(TAG, String.format("buildThumbnailFile( format:%d, maxhow:%d, quality:%d )", format, maxhow, quality));
    final byte bytes[] = buildThumbnailData(vidPath, format, maxhow, quality);
    final String ext = formatExt(format);
    final int i = vidPath.lastIndexOf(".");
    String fullpath = vidPath.substring(0, i + 1) + ext;

    if (path != null) {
      if (path.endsWith(ext)) {
        fullpath = path;
      } else {
        // try to save to same folder as the vidPath
        final int j = fullpath.lastIndexOf("/");

        if (path.endsWith("/")) {
          fullpath = path + fullpath.substring(j + 1);
        } else {
          fullpath = path + fullpath.substring(j);
        }
      }
    }

    try {
      FileOutputStream f = new FileOutputStream(fullpath);
      f.write(bytes);
      f.close();
      Log.d(TAG, String.format("buildThumbnailFile( written:%d )", bytes.length));
    } catch (java.io.IOException e) {
      e.getStackTrace();
      throw new RuntimeException(e);
    }
    return fullpath;
  }

  /**
   * Create a video thumbnail for a video. May return null if the video is corrupt
   * or the format is not supported.
   *
   * @param video      the URI of video
   * @param targetSize max width or height of the thumbnail
   */
  public static Bitmap createVideoThumbnail(String video, int targetSize) {
    Bitmap bitmap = null;
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
      Log.d(TAG, String.format("setDataSource: %s )", video));
      if (video.startsWith("file://") || video.startsWith("/")) {
        retriever.setDataSource(video);
      } else {
        retriever.setDataSource(video, new HashMap<String, String>());
      }
      bitmap = retriever.getFrameAtTime(-1);
    } catch (IllegalArgumentException ex) {
      ex.printStackTrace();
    } catch (RuntimeException ex) {
      ex.printStackTrace();
    } finally {
      try {
        retriever.release();
      } catch (RuntimeException ex) {
        ex.printStackTrace();
      }
    }

    if (bitmap == null)
      return null;

    if (targetSize != 0) {
      int width = bitmap.getWidth();
      int height = bitmap.getHeight();
      int max = Math.max(width, height);
      float scale = (float) targetSize / max;
      int w = Math.round(scale * width);
      int h = Math.round(scale * height);
      Log.d(TAG, String.format("original w:%d, h:%d, scale:%6.4f => %d, %d", width, height, scale, w, h));
      bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
    }
    return bitmap;
  }
}```

kotlin one is 

```import android.os.Bundle

import io.flutter.app.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)
  }
}

Application wont proceed further

Hi, I have created my own package and followed all your steps. On application start after pressing Sign in with google I get a dialog box with account selection However when I select my gmail , application, there will be a quick flicker on
the screen then application shows me the start page where it asks me to "Sign In with google". I get following error:

W/ActivityThread(29757): handleWindowVisibility: no activity for token android.os.BinderProxy@81c22e0
I/flutter (29757): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
I/flutter (29757): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:316:33)
I/flutter (29757): <asynchronous suspension>
I/flutter (29757): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:344:48)
I/flutter (29757): <asynchronous suspension>
I/flutter (29757): #3      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:218:23)
I/flutter (29757): <asynchronous suspension>
I/flutter (29757): #4      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:257:20)
I/flutter (29757): #5      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:324:48)
I/flutter (29757): #6      AuthenticationProvider.signInWithGoogle (package:blabla/providers/AuthenticationProvider.dart:18:28)
I/flutter (29757): <asynchronous suspension>
I/flutter (29757): #7      AuthenticationRepository.signInWithGoogle (package:blabla/repositories/AuthenticationRepository.dart:11:30)
I/flutter (29757): #8      AuthenticationBloc.mapClickedGoogleLoginToState (package:blabla/blocs/authentication/AuthenticationBloc.dart:77:42)
I/flutter (29757): <asynchronous suspension

Stories

Hey Aditya congrats on almost reaching the end of you 60 day challenge, do you plan to implement stories as well?

Execution failed for task ':app:processDebugGoogleServices'.

File google-services.json is missing. The Google Services Plugin cannot function without it.
Searched Location:
/Users/rahulrawat/tymoffproject/Messio/android/app/src/nullnull/google-services.json
/Users/rahulrawat/tymoffproject/Messio/android/app/src/debug/google-services.json
/Users/rahulrawat/tymoffproject/Messio/android/app/src/nullnullDebug/google-services.json
/Users/rahulrawat/tymoffproject/Messio/android/app/src/nullnull/debug/google-services.json
/Users/rahulrawat/tymoffproject/Messio/android/app/src/debug/nullnull/google-services.json
/Users/rahulrawat/tymoffproject/Messio/android/app/google-services.json

Notifications

Would it be an possibility to see notifications feature that u can see some form of indication of new messages.

Can the app be developed using WebRTC?

Your "60 Days of Flutter" tutorial is awesome. I see that you have used Firebase for database, authentication and storage. Just wanted to have a quick check if you can publish one similar tutorial using WebRTC.

Tag Manager is not found

Tag Manager is not found and thus will not be used E/FirebaseInstanceId( 3452): Failed to resolve target intent service, skipping classname enforcement E/FirebaseInstanceId( 3452): Error while delivering the message: ServiceIntent not found. I/flutter ( 3452):

Feature Suggestion: group chat

I would love to be able to have more than one person in a chat room. Instead of picking a contact, you could pick a chat and join. i'm currently trying to do this myself using messio as a guide, but I get stuck with some of the database tricks, and providers.

AndroidManifest.xml

I get this error at compile time.
"Missing an android \AndroidManifest.xml"

unable to pass sign in with google page

after pressing sign in with google button, i logged in with my google account and after logging also i am unable to proceed ahead,nothing is proceeding after logging in

support needed - add Contact failed - no contact added in firebase

Hi,

first great job !!

I'm stuck on #day-24-26 ; I cannot understand the "add contact" workflow.

Why did the method addContact(String username) calls on first line getUser(username); ??

And from the the list getContacts, we should read contacts from firebase
but I don't see where they are inserted in firebase.

At line 99, app crashes because contact never exists as user in db...

for (String username in contacts) {
            print(username);
// This failed =>
//            String uid = await getUidByUsername(username);
//            DocumentSnapshot contactSnapshot = await userRef.document(uid).get();
//            contactList.add(Contact.fromFirestore(contactSnapshot));

// bad workaround =>
            contactList.add(Contact(uid, username, username));
          }

Thanks to help me to understand this part !

update failed

Could you help me on this stage :

Update failed when i try to update 'latestMessage' fields.

ChatProvider Line72

    await chatDocRef.updateData({'latestMessage': message.toMap()});

I tried with your project (pull 22 and 23) as well, and I have the same behavior.

Comment this line, has not a big effect too, because UI is strange : no ChatAppBar, no messages list in UI
Screenshot_1572691913

sendMessage works because data is stored, but that's all.

Any idea ? thanks in advance

Dart source code: new and type inference

Hello,

thank you really much for this, i would really like to enjoy your ride 💯

There are some inconsitences using new or variable declaration (type inferences).

I would like to request to omit new overall and to omit type assignment where ever useful to shorten the code:

class _ConversationPageState extends State<ConversationPage> {
  // final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  final _scaffoldKey = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {

Good time to you ☺️

Attachments not loading

Why does the attachments won't load and there is infite loading icon. @adityadroid

and the errors:

``I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): Received InitialAttachmentsState
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
I/flutter ( 6782): Received InitialAttachmentsState in ui
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.ANY }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 3
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 3 order by -timeStamp) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.ANY }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 3
I/flutter ( 6782): Received InitialAttachmentsState
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 3 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
I/flutter ( 6782): Received InitialAttachmentsState
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 1 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): Received InitialAttachmentsState
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.VIDEO }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 2
W/Firestore( 6782): (19.0.0) [Firestore]: Listen for Query(chats/JrSA0KXWo9xg85WY3tkU/messages where type == 2 order by -timeStamp, -name) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/wechat-e63c1/firestore/indexes?create_composite=Ck1wcm9qZWN0cy93ZWNoYXQtZTYzYzEvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzL21lc3NhZ2VzL2luZGV4ZXMvXxABGggKBHR5cGUQARoNCgl0aW1lU3RhbXAQAhoMCghfX25hbWVfXxAC, cause=null}
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
W/.example.wecha( 6782): Accessing hidden method Ldalvik/system/CloseGuard;->close()V (light greylist, linking)

logs:

I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): Received InitialAttachmentsState
I/flutter ( 6782): FetchAttachmentsEvent { chatId : JrSA0KXWo9xg85WY3tkU fileType : FileType.IMAGE }
I/flutter ( 6782): for chat id JrSA0KXWo9xg85WY3tkU 1
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState
I/flutter ( 6782): FetchChatListEvent
I/flutter ( 6782): ReceivedChatsEvent
I/flutter ( 6782): ChatList [{ username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}]
I/flutter ( 6782): build of { username= luizella, chatId = JrSA0KXWo9xg85WY3tkU}
I/flutter ( 6782): chatlist
I/flutter ( 6782): FetchedChatListState

Feature suggestion

Hi, I was thinking and it might be a nice idea that instead of automatically adding in contact in both ends the u should get an accept or ignore on upcoming contact request to avoid random people adding you.

Error when running code on master channel.

I get the following errors when I run the latest code base on the latest Master Channel.

/Users/jeremywhiteley/flutter/bin/flutter doctor --verbose
[✓] Flutter (Channel master, v1.10.15-pre.199, on Mac OS X 10.15 19A602, locale en-US)
• Flutter version 1.10.15-pre.199 at /Users/jeremywhiteley/flutter
• Framework revision 22f0bf87e4 (68 minutes ago), 2019-10-21 16:54:02 -0700
• Engine revision 8882bf3c73
• Dart version 2.6.0 (build 2.6.0-dev.8.0 a61c775db8)

Running Gradle task 'assembleDebug'...

Compiler message:
../../../flutter/.pub-cache/hosted/pub.dartlang.org/cached_network_image-1.1.2+1/lib/src/cached_network_image_provider.dart:53:24: Error: The method 'CachedNetworkImageProvider.load' has fewer positional arguments than those of overridden method 'ImageProvider.load'.
ImageStreamCompleter load(CachedNetworkImageProvider key) {
^
../../../flutter/packages/flutter/lib/src/painting/image_provider.dart:403:24: Context: This is the overridden method ('load').
ImageStreamCompleter load(T key, DecoderCallback decode);
^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/cached_network_image-1.1.2+1/lib/src/scaled_file_image.dart:45:24: Error: The method 'ScaledFileImage.load' has fewer positional arguments than those of overridden method 'ImageProvider.load'.
ImageStreamCompleter load(ScaledFileImage key) {
^
../../../flutter/packages/flutter/lib/src/painting/image_provider.dart:403:24: Context: This is the overridden method ('load').
ImageStreamCompleter load(T key, DecoderCallback decode);
^
Exception: Errors during snapshot creation: null
#0 KernelSnapshot.build (package:flutter_tools/src/build_system/targets/dart.dart:230:7)

#1 _BuildInstance._invokeInternal (package:flutter_tools/src/build_system/build_system.dart:526:25)

#2 _BuildInstance.invokeTarget. (package:flutter_tools/src/build_system/build_system.dart:481:35)
#3 new Future.sync (dart:async/future.dart:224:31)
#4 AsyncMemoizer.runOnce (package:async/src/async_memoizer.dart:43:45)
#5 _BuildInstance.invokeTarget (package:flutter_tools/src/build_system/build_system.dart:481:21)


#6 BuildSystem.build (package:flutter_tools/src/build_system/build_system.dart:419:36)
#7 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
#8 BuildSystem.build (package:flutter_tools/src/build_system/build_system.dart:400:28)
#9 buildWithAssemble (package:flutter_tools/src/bundle.dart:125:48)
#10 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
#11 buildWithAssemble (package:flutter_tools/src/bundle.dart:99:31)
#12 BundleBuilder.build (package:flutter_tools/src/bundle.dart:75:11)
#13 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
#14 BundleBuilder.build (package:flutter_tools/src/bundle.dart:52:21)
#15 BuildBundleCommand.runCommand (package:flutter_tools/src/commands/build_bundle.dart:126:25)
#16 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
#17 BuildBundleCommand.runCommand (package:flutter_tools/src/commands/build_bundle.dart:97:42)
#18 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:557:18)
#19 _asyncThenWrapperHelper. (dart:async-patch/async_patch.dart:71:64)
#20 _rootRunUnary (dart:async/zone.dart:1132:38)
#21 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#22 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#23 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#24 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#25 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#26 Future._asyncComplete. (dart:async/future_impl.dart:552:7)
#27 _rootRun (dart:async/zone.dart:1124:13)
#28 _CustomZone.run (dart:async/zone.dart:1021:19)
#29 _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#30 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:963:23)
#31 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#32 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#33 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:116:13)
#34 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:173:5)

Failed to build bundle.

FAILURE: Build failed with an exception.

  • Where:
    Script '/Users/jeremywhiteley/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 794

  • What went wrong:
    Execution failed for task ':app:compileFlutterBuildDebugX86'.

Process 'command '/Users/jeremywhiteley/flutter/bin/flutter'' finished with non-zero exit value 1

  • 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 42s
Finished with error: Gradle task assembleDebug failed with exit code 1

Google Sign In

I am the 27-29 days mark and my login is not working like it should. I'm not sure if my authentication block or the registration page has the problem. Logs are below. Here is also the link to the repository.

https://github.com/Jukez17/WeChat

I/flutter (10482): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:316:33)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:344:48)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #3      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:218:23)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #4      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:257:20)
I/flutter (10482): #5      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:324:48)
I/flutter (10482): #6      AuthenticationProvider.signInWithGoogle (package:wechat/providers/AuthenticationProvider.dart:18:28)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #7      AuthenticationRepository.signInWithGoogle (package:wechat/repositories/AuthenticationRepository.dart:9:30)
I/flutter (10482): #8      AuthenticationBloc.mapClickedGoogleLoginToState (package:wechat/blocs/authentication/authentication_bloc.dart:77:42)
I/flutter (10482): <asynchronous suspension
I/flutter (10482): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
I/flutter (10482): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:316:33)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:344:48)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #3      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:218:23)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #4      GoogleSignIn._addMethodCall.<anonymous closure> (package:google_sign_in/google_sign_in.dart:270:28)
I/flutter (10482): #5      _rootRun (dart:async/zone.dart:1120:38)
I/flutter (10482): #6      _CustomZone.run (dart:async/zone.dart:1021:19)
I/flutter (10482): #7      _FutureListener.handleWhenComplete (dart:async/future_impl.dart:161:18)
I/flutter (10482): #8      Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:648:39)
I/flutter (10482): #9      Future._propagateToListeners (dart:async/future_impl.dart:704:37)
I/flutter (10482): #10     Future._addListener.<anonymous closure> (dart:async/future_impl.dart:387:9)
I/flutter (10482): #11     _rootRun
I/flutter (10482): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
I/flutter (10482): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:316:33)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:344:48)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #3      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:218:23)
I/flutter (10482): <asynchronous suspension>
I/flutter (10482): #4      GoogleSignIn._addMethodCall.<anonymous closure> (package:google_sign_in/google_sign_in.dart:270:28)
I/flutter (10482): #5      _rootRun (dart:async/zone.dart:1120:38)
I/flutter (10482): #6      _CustomZone.run (dart:async/zone.dart:1021:19)
I/flutter (10482): #7      _FutureListener.handleWhenComplete (dart:async/future_impl.dart:161:18)
I/flutter (10482): #8      Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:648:39)
I/flutter (10482): #9      Future._propagateToListeners (dart:async/future_impl.dart:704:37)
I/flutter (10482): #10     Future._addListener.<anonymous closure> (dart:async/future_impl.dart:387:9)
I/flutter (10482): #11     _rootRun```

Repo won't build/compile

Here's the error messages:

n)

Compiler message:
/d:/flutter/.pub-cache/hosted/pub.dartlang.org/cached_network_image-1.1.1/lib/src/cached_network_image_provider.dart:42:24: Error: The method 'CachedNetworkImageProvider.load' has fewer positional arguments than those of overridden method 'ImageProvider.load'.
ImageStreamCompleter load(CachedNetworkImageProvider key) {
^
/d:/flutter/packages/flutter/lib/src/painting/image_provider.dart:403:24: Context: This is the overridden method ('load').
ImageStreamCompleter load(T key, DecoderCallback decode);
^
Target kernel_snapshot failed: Exception: Errors during snapshot creation: null
build failed.

FAILURE: Build failed with an exception.

Here are my flutter details:

Flutter 1.12.13+hotfix.9 • channel stable • https://github.com/flutter/flutter.git
Framework • revision f139b11009 (4 weeks ago) • 2020-03-30 13:57:30 -0700
Engine • revision af51afceb8
Tools • Dart 2.7.2

Issue with Flexible

Hi first great tutorial :)

but on day https://medium.com/@adityadroid/60-days-of-flutter-day-3-4-building-a-chat-screen-in-flutter-e2ed36388dc7, I had an issue around Flexible.

Screenshot_1568581444

I tried to wrap Flexible from ChatListWidget with Column. It works but input is above list, not under.

// A Flexible widget must be a descendant of a Row, Column, or Flex,
// https://api.flutter.dev/flutter/widgets/Flexible-class.html

Tried with your code, same issue. May be an issue around flutter upgrade ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.