Making a fully functional skype clone in flutter.

Last update: Jun 17, 2022

Skype Clone in

Making a Skype Clone in Flutter - In Progress Checkout the course here : THE CS GUY

Screenshots

Project Structure

This project is going to be divided in several different branches. As I release a new video, the content related to that video will be committed to the branch with the same name as that of the video.

  1. MASTER - Code

  2. Firebase Integration - Video - Code

  3. Google Sign In - Video - Code

  4. Getting Started With UI - Video - Code

  5. Making Chat Screen - Video - Code

  6. Search Screen And Functionality - Video - Code

  7. Chat Screen UI - Video - Code

  8. Exchaning Messages - Video - Code

  9. Cleanup And Rearrangements - Video - Code

  10. Emojis in Flutter - Video - Code

  11. Exchanging Images - Video - Code

  12. End to End Video Calling - Video - Code

12.5. [BREAKING - CHANGES] - Video - Code

  1. Populating Chat List and Presence Indicator - Video - Code

  2. User Profile and Logout - Video - Code

  3. Implementing local storage with Hive and Sqlite - Video - Code

  4. SQLite CRUD in Flutter - Video - Code

  5. CRUD Operations in HIVE - Flutter Tutorial - Video - Code

  6. Saving Call Logs Locally - Video - Code

GitHub

https://github.com/Ronak99/Skype-Clone
Comments
  • 1. Search screen not displaying anything when I search

    initially my code was working fine but after working more on the project , I got this error [NoSuchMethodError: The method 'where' was called on null. Receiver: null Tried calling: where(Closure: (User) => bool) See also: https://flutter.dev/docs/testing/errors]

    then I changed my a funtion and wrote this - ` buildSuggestions(String query) { final List suggestionList = query.isEmpty ? [] : userList != null ? userList.where((User user) { String _getUsername = user.username.toLowerCase(); String _query = query.toLowerCase(); String _getName = user.name.toLowerCase(); bool matchesUsername = _getUsername.contains(_query); bool matchesName = _getName.contains(_query);

      return (matchesUsername || matchesName);
    
      // (User user) => (user.username.toLowerCase().contains(query.toLowerCase()) ||
      //     (user.name.toLowerCase().contains(query.toLowerCase()))),
    }).toList()
        : [];`
    

    but still the search screen doesnt display the user it used to display intially

    Reviewed by sharmahal at 2020-07-21 18:08
  • 2. The following NoSuchMethodError was thrown during a scheduler callback:

    The getter 'uid' was called on null. Receiver: null Tried calling: uid

    When the exception was thrown, this was the stack: #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5) #1 _HomeScreenState.initState. (package:skypeclone/screens/home_screen.dart:33:38) #2 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1102:15) #3 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1049:9) #4 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:957:5) ...

    Reviewed by prakashssp077 at 2020-04-20 06:04
  • 3. After Final Build App not opening

    Below error message in mobile

    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.chatbee/com.example.chatbee.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.chatbee.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.chatbee-E19D9G7k3x6AXtBZL8pcrg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.chatbee-E19D9G7k3x6AXtBZL8pcrg==/lib/arm64, /data/app/com.example.chatbee-E19D9G7k3x6AXtBZL8pcrg==/base.apk!/lib/arm64-v8a, /system/lib64]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2876) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6823) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.chatbee.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.chatbee-E19D9G7k3x6AXtBZL8pcrg==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.chatbee-E19D9G7k3x6AXtBZL8pcrg==/lib/arm64, /data/app/com.example.chatbee-E19D9G7k3x6AXtBZL8pcrg==/base.apk!/lib/arm64-v8a, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:171) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69) at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43) at android.app.Instrumentation.newActivity(Instrumentation.java:1216) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864) ... 11 more

    Reviewed by pnirav996 at 2020-05-07 06:50
  • 4. Getting an error when tried to do search for user from database

    Recently, I cloned the Part - 6 - Search Screen UI and Functionality where I faced one error, that is occurring in the userList where the error says

    [NoSuchMethodError: The method 'toLowerCase' was called on null. Receiver: null Tried calling: toLowerCase() See also: https://flutter.dev/docs/testing/errors Below I have attached the screenshot of the error too... WhatsApp Image 2020-04-16 at 4 54 04 PM

    This error occurred after I changed the previous error issue code

    Reviewed by Jainish-shah at 2020-04-16 12:07
  • 5. Getting an error when tried searching for user list

    I'm studying Flutter through your videos on Youtube. Before asking many thanks for your effort to making those videos.

    Recently, I cloned the last part of yours of [Part - 10 - Emojis in Flutter | Skype Clone] and I've got an error saying that

    [NoSuchMethodError: The method 'where' was called on null. Receiver: null Tried calling: where(Closure: (User) => bool) See also: https://flutter.dev/docs/testing/errors]

    [Error message] image 1

    [User data in my Firebase cloud-store] image

    I tried to research for this error in a stack overflow case which seems to be similar with this error https://stackoverflow.com/questions/52046870/flutter-the-method-was-called-on-null It looks similar with this but I can't applicable this in my code, since I'm newbie in Flutter and Dart.

    Could you help me out this??

    Reviewed by PE-Jeon at 2020-02-13 02:07
  • 6. How to get call duration minutes between two users ?

    Hi,

    Thanks for this example project with agora sdk. I want some suggestions to solve my requirements.

    1. How to get call duration in minutes between two users? As you are saving timestamp that is call starting time.

    2. How to make voice call ? Already i tried by disable video. But it didn't work. AgoraRtcEngine.disableVideo();

    3. It would be great if provide pickup layout when app is in background mode/close/kill mode.

    4. Incoming ringtone while second user is receiving a call.

    Reviewed by MaheshPeri19 at 2020-09-02 19:43
  • 7. Pickup Screen only ends call for dialler(caller){only documents were deleted for caller not of receiver when call is being ended from receivers end **even from after picking the call**}

    Pickup Screen only ends call for dialler(caller){only documents were deleted for caller not of receiver when call is being ended from receivers end even from after picking the call} please help i need help for this o solve i followed your code but the issues are regarding recievers end as from pick up screen we can't end the call for recieiver himself also after picking and pressing the end call button call only ends for caller not for receiver [when call is being ended from receivers end]

    Reviewed by Manishmg3994 at 2022-01-28 16:32
  • 8. Did anyone implement the calling feature when app is closed or fone is locked ?

    Hi everyone Can anybody tell me how to implement the calling feature when the app is closed or fone is locked? I've tried many methods but couldn't implement it . Please share some code if you have done this. Thanks

    Reviewed by hasnainsaeed9692 at 2021-09-03 09:05
  • 9. Remove App ID from config,dart

    Consider removing your Agora App ID from the git repo and keeping it secret. It is always best to keep your app id confidential. This is just a friendly reminder.

    Reviewed by aloysiousBenoy at 2020-07-28 20:36
  • 10. Url not found error message

    type 'Future' is not a subtype of type 'FutureOr'

    That is the error message that is coming out in the terminal.

    Instead of showing a picture after I upload, it shows Url not found.

    Reviewed by jeremiahseun at 2020-06-09 14:40
  • 11. Call Map fails to Map see the log .

    I tried the exact same step as mentioned in the tutorial as well.

    Future makeCall({Call call}) async { try { print("line 1" + call.callerId); print("line 1" + call.receiverId);

      call.hasDialled = true;
      print("call.hasDialled set to true");
      Map<String, dynamic> hasDialledMap = call.toMap(call);
      print(hasDialledMap);
      call.hasDialled = false;
      print("call.hasDialled set to true");
      Map<String, dynamic> hasNotDialledMap = call.toMap(call);
      print(hasNotDialledMap);
    
      await Firestore.instance.collection(CALL_COLLECTION)
          .document(call.callerId)
          .setData(hasDialledMap);
      print("call object for caller has been set");
      await Firestore.instance.collection(CALL_COLLECTION)
          .document(call.receiverId)
          .setData(hasNotDialledMap);
      print("call object for receiver has been set");
    
      return true;
    } catch (e) {
      print("madarchod firestore mein kuch problemwa hai");
      return false;
    }
    

    The same way my call.dart is :

    class Call { String callerId; String callerName; String receiverId; String receiverName; String channelId; bool hasDialled;

    Call({ this.callerId, this.callerName, // this.callerPic, this.receiverId, this.receiverName, // this.receiverPic, this.channelId, this.hasDialled, });

    Map<String, dynamic> toMap(Call call) { Map<String, dynamic> callMap = Map(); callMap["caller_id"] = call.callerId; callMap["caller_name"] = call.callerName; // callMap["caller_pic"] = call.callerPic; callMap["receiver_id"] = call.receiverId; callMap["receiver_name"] = call.receiverName; // callMap["receiver_pic"] = call.receiverPic; callMap["channel_id"] = call.channelId; callMap["hasDialled"] = call.hasDialled; }

    Call.fromMap(Map callMap) { this.callerId = callMap["caller_id"]; this.callerName = callMap["caller_name"]; // this.callerPic = callMap["caller_pic"]; this.receiverId = callMap["receiver_id"]; this.receiverName = callMap["receiver_name"]; // this.receiverPic = callMap["receiver_pic"]; this.channelId = callMap["channel_id"]; this.hasDialled = callMap["hasDialled"]; } }

    Call_utilities file: import 'package:docapp/screens/callscreens/call_screen.dart'; import 'package:flutter/material.dart'; import 'package:docapp/resources/call_methods.dart'; import 'package:docapp/models/user.dart'; import 'package:docapp/models/call.dart'; import 'dart:math';

    class CallUtils { static final CallMethods callMethods = CallMethods();

    static dial({String senderName, User from, User to, context}) async { print("sender name is " + senderName); print("sender uid is " + from.uid); print("receiver uid is" + to.uid); print("receiver name is " + to.name);

    Call call = Call(
      callerId: from.uid,
      callerName: senderName,
    

    // callerPic: from.profilePhoto, receiverId: to.uid, receiverName: to.name, // receiverPic: to.profilePhoto, channelId: Random().nextInt(1000).toString(), );

    bool callMade = await callMethods.makeCall(call: call);
    if(callMade) {
      print("callMade tak gaya");
    } else {
      print("call utils mein atak gaya");
    }
    call.hasDialled = true;
    
    if(callMade) {
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => CallScreen(call:  call),
        ));
    }
    

    } }

    the error log : I/flutter ( 4548): sender name is abcdef I/flutter ( 4548): sender uid is eKsPXt5Nr4bkxYFW7SPaRXL4xh23 I/flutter ( 4548): receiver uid isaLSb7ebMfsfAxybrwq21kXjkcJM2 I/flutter ( 4548): receiver name is abhishek I/flutter ( 4548): line 1eKsPXt5Nr4bkxYFW7SPaRXL4xh23 I/flutter ( 4548): line 1aLSb7ebMfsfAxybrwq21kXjkcJM2 I/flutter ( 4548): line 1abcdef I/flutter ( 4548): line 1abhishek I/flutter ( 4548): call.hasDialled set to true I/flutter ( 4548): null I/flutter ( 4548): call.hasDialled set to true I/flutter ( 4548): null E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): Failed to handle method call E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): java.lang.NullPointerException: Provided data must not be null. E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at b.d.c.a.j.a(:906) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at com.google.firebase.firestore.h.a(:161) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at com.google.firebase.firestore.h.a(:146) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at io.flutter.plugins.firebase.cloudfirestore.a.onMethodCall(:872) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at c.a.b.a.j$a.a(:226) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at io.flutter.embedding.engine.e.b.a(:85) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(:631) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at android.os.MessageQueue.nativePollOnce(Native Method) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at android.os.MessageQueue.next(MessageQueue.java:325) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at android.os.Looper.loop(Looper.java:142) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at android.app.ActivityThread.main(ActivityThread.java:6541) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at java.lang.reflect.Method.invoke(Native Method) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) E/MethodChannel#plugins.flutter.io/cloud_firestore( 4548): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) I/flutter ( 4548): madarchod firestore mein kuch problemwa hai I/flutter ( 4548): call utils mein atak gaya

    Reviewed by rockfire1212 at 2020-05-28 13:54
  • 12. I built the app and the message so error like this: Receiver: null

    E/flutter (11754): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: NoSuchMethodError: The method '[]' was called on null. E/flutter (11754): Receiver: null E/flutter (11754): Tried calling: E/flutter (11754): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5) E/flutter (11754): #1 new Users.fromMap (package:skypeclone/models/users.dart:33:23) E/flutter (11754): #2 FirebaseMethods.getUserDetails (package:skypeclone/resources/firebasemethods.dart:31:18) E/flutter (11754): E/flutter (11754): #3 UserProvider.refreshUser (package:skypeclone/provider/userprovider.dart:12:19) E/flutter (11754): E/flutter (11754):

    Reviewed by Lorngdy68 at 2021-05-19 07:21
  • 13. Video Call is not initializing as Pickupscreen is showing at both screens but not dividing the screens for video call

    E/RtcEngine( 5714): onEvent: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference E/RtcEngine( 5714): onEvent: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference E/RtcEngine( 5714): onEvent: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference E/RtcEngine( 5714): onEvent: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference

    Reviewed by sangamsharma6 at 2020-12-08 12:43
  • 14. Chats not re-ordering on new message

    On the ChatListScreen, whenever there is a new message(received or sent), the chat that has the message does not automatically relocate to the top of the list

    Reviewed by Milimeter at 2020-11-15 22:08
  • 15. Issue faced in part 13 video

    Hi Ronak99,

    I have been facing these issues, which are "The getter 'name' was called on null. Receiver: null Tried calling: name" and same issue for the uid. The relevant widget causing this problem is the UserCircle.

    Reviewed by AndreLiu1225 at 2020-11-13 09:39

Related

Cloned Skype App using Flutter & Firebase
Cloned Skype App using Flutter & Firebase

Cloned Skype App using Flutter & Firebase

Jun 13, 2022
On making this project I learned using Getx to change between dark mode to light mode, learned about the time zone and schedule notification , That I have Integrated in this small app, This is the small section of making a todo app.
On making this project I learned using Getx to change between dark mode to light mode, learned about the time zone and schedule notification , That I have Integrated in this small app, This is the small section of making a todo app.

On making this project I learned using Getx to change between dark mode to light mode, learned about the time zone and schedule notification , That I have Integrated in this small app, This is the small section of making a todo app.

Oct 14, 2021
A Completed Functional Flutter App (BLoC + Json API + Unit Test + Azure Active Directory OAuth + Access Dynamic CRM Entitis)
 A Completed Functional Flutter App (BLoC + Json API + Unit Test + Azure Active Directory OAuth + Access Dynamic CRM Entitis)

A Completed Functional Flutter App (BLoC + Json API + Unit Test + Azure Active Directory OAuth + Access Dynamic CRM Entitis)A Completed Functional Flutter App (BLoC + Json API + Unit Test + Azure Active Directory OAuth + Access Dynamic CRM Entitis)

Jan 23, 2022
Whats-App-Clone-UI-using-Flutter - WhatsApp Clone UI using Flutter
Whats-App-Clone-UI-using-Flutter - WhatsApp Clone UI using Flutter

WhatsApp ?? Clone UI ?? using Flutter ?? Screenshots Links My Socials Youtube ch

Apr 28, 2022
Wordle-clone - A Wordle-clone built using Flutter

Wordle-clone The project consists of two applications : wordle_clone_api : Which

Jan 25, 2022
Whatapp clone UI - WhatApp UI clone in flutter
Whatapp clone UI - WhatApp UI clone in flutter

whatapp clone in flutter WhatApp UI clone in flutter Getting Started

Feb 6, 2022
Whatsapp-clone - A whatsapp clone with dart
Whatsapp-clone - A whatsapp clone with dart

whatsapp-clone Just a simple whatsapp clone with dart

Mar 28, 2022
Flutter - Making a Christmas Tree 🎄| Tween Animation | Tween Animation

flutter_christmas A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you starte

Dec 23, 2021
Shopping App developed using Flutter and Dart making use of Provider, Carousel Library, Google FireStore

Shopping App developed using Flutter and Dart making use of Provider, Carousel Library, Google FireStore. It's featuring standard modern shopping app UI

Jan 7, 2022
BMI App - The personal documentation while learning Multi Provider with Flutter by making BMI Calculator app
BMI App - The personal documentation while learning Multi Provider with Flutter by making BMI Calculator app

BMI App - The personal documentation while learning Multi Provider with Flutter by making BMI Calculator app

Feb 13, 2022
This app was designed with the idea of making Cryptocurrency a more widely known and a household name using Dart
This app was designed with the idea of making Cryptocurrency a more widely known and a household name using Dart

This app was designed with the idea of making Cryptocurrency a more widely known and a household name using Dart as the main programming language Flutter as the supporting framework and java as the Backend language. UI Done simply to let people buy and sell cryptocurrencies easily

Jun 14, 2022
A simple fully working weather app with state management build using flutter.
A simple fully working weather app with state management build using flutter.

A simple fully working weather app with state management build using flutter.

Apr 12, 2022
A fully responsive BMI calculator app made using flutter and dart with beautiful minimalistic user interface design and easy to use .
A fully responsive BMI calculator app made using flutter and dart with beautiful minimalistic user interface design and easy to use .

BMI_Calculator_Flutter A fully responsive BMI calculator app made using flutter and dart with beautiful minimalistic user interface design and easy to

Oct 9, 2021
Udacity UI Clone made with Flutter Web (Flutter 2.0).
Udacity UI Clone made with Flutter Web (Flutter 2.0).

Udacity UI Clone Flutter Web 2.0 Description: Udacity UI Clone made with Flutter Web (Flutter 2.0). ScreenShots: Tools & languages: Android studio (ID

Apr 28, 2022
TikTok Flutter - Clone of TikTok with Flutter and Firebase
TikTok Flutter - Clone of TikTok with Flutter and Firebase

TikTok Flutter - Clone of TikTok with Flutter and Firebase

Jan 22, 2022
Building a WhatsApp Clone in Flutter.
Building a WhatsApp Clone in Flutter.

Flutter WhatsAppClone Building a WhatsApp Clone in Flutter. Show some ❤️ and star the repo to support the project Screenshots Watch the video tutorial

Jun 29, 2022
A WhatsApp clone build using Flutter and AWS Amplify DataStore
A WhatsApp clone build using Flutter and AWS Amplify DataStore

Whatsapp Clone using Amplify DataStore in Flutter About The Project Built With Flutter AWS Amplify DataStore Getting Started To get a local copy up an

Jun 19, 2022
Flutter YouTube Clone
Flutter YouTube Clone

Flutter YouTube Clone Flutter YouTube Clone with MobX State Management, Dio for REST API requests Watch: Ekran.Kaydi.2021-08-25.15.28.50.mov Connect w

Jun 11, 2022
Mobile and Desktop whatsapp clone with Flutter UI tool kit
Mobile and Desktop whatsapp clone with Flutter UI tool kit

Mobile and Desktop whatsapp clone with Flutter UI tool kit

Apr 28, 2022