gitextract_ue6w1k4a/ ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android/ │ ├── .gitignore │ ├── app/ │ │ ├── build.gradle │ │ ├── google-services.json │ │ └── src/ │ │ ├── debug/ │ │ │ └── AndroidManifest.xml │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin/ │ │ │ │ └── mogohary99/ │ │ │ │ └── whatsapp_flutter_clone/ │ │ │ │ └── MainActivity.kt │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── launch_background.xml │ │ │ ├── drawable-v21/ │ │ │ │ └── launch_background.xml │ │ │ ├── values/ │ │ │ │ └── styles.xml │ │ │ └── values-night/ │ │ │ └── styles.xml │ │ └── profile/ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ └── settings.gradle ├── ios/ │ ├── .gitignore │ ├── Flutter/ │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Runner/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── LaunchImage.imageset/ │ │ │ ├── Contents.json │ │ │ └── README.md │ │ ├── Base.lproj/ │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ ├── Runner.xcodeproj/ │ │ ├── project.pbxproj │ │ ├── project.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ └── Runner.xcscheme │ └── Runner.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ ├── IDEWorkspaceChecks.plist │ └── WorkspaceSettings.xcsettings ├── lib/ │ ├── config/ │ │ └── agora_config.dart │ ├── core/ │ │ ├── enums/ │ │ │ └── messge_type.dart │ │ ├── error/ │ │ │ ├── exceptions.dart │ │ │ └── failure.dart │ │ ├── extensions/ │ │ │ ├── extensions.dart │ │ │ └── time_extension.dart │ │ ├── functions/ │ │ │ ├── app_dialogs.dart │ │ │ ├── date_converter.dart │ │ │ └── navigator.dart │ │ ├── network/ │ │ │ └── cache_helper.dart │ │ ├── services/ │ │ │ └── services_locator.dart │ │ ├── shared/ │ │ │ ├── bloc_observer.dart │ │ │ ├── commen.dart │ │ │ ├── message_replay.dart │ │ │ └── pop_up_menu_item_model.dart │ │ ├── usecase/ │ │ │ └── base_use_case.dart │ │ └── utils/ │ │ ├── constants/ │ │ │ ├── assets_manager.dart │ │ │ ├── font_manager.dart │ │ │ ├── strings_manager.dart │ │ │ └── values_manager.dart │ │ ├── routes/ │ │ │ └── routes_manager.dart │ │ └── thems/ │ │ ├── my_colors.dart │ │ ├── styles_manager.dart │ │ └── theme_manager.dart │ ├── features/ │ │ ├── data/ │ │ │ ├── data_source/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── local/ │ │ │ │ │ │ └── auth_local_data_source.dart │ │ │ │ │ └── remote/ │ │ │ │ │ └── auth_remote_data_source.dart │ │ │ │ ├── call/ │ │ │ │ │ └── call_data_source.dart │ │ │ │ ├── chat/ │ │ │ │ │ ├── local/ │ │ │ │ │ │ └── chat_local_data_source.dart │ │ │ │ │ └── remote/ │ │ │ │ │ └── chat_remote_data_source.dart │ │ │ │ ├── firebase_storage_remote_data_source.dart │ │ │ │ └── select_contact/ │ │ │ │ ├── local/ │ │ │ │ │ └── get_contacts_local_data_source.dart │ │ │ │ └── remote/ │ │ │ │ └── select_contact_remote_data_source.dart │ │ │ ├── models/ │ │ │ │ ├── call_model.dart │ │ │ │ ├── contact_chat_model.dart │ │ │ │ ├── message_model.dart │ │ │ │ └── user_model.dart │ │ │ └── repository/ │ │ │ ├── auth_repository.dart │ │ │ ├── call_repository.dart │ │ │ ├── chat_repository.dart │ │ │ └── select_contact_Repository.dart │ │ ├── domain/ │ │ │ ├── entities/ │ │ │ │ ├── call.dart │ │ │ │ ├── contact_chat.dart │ │ │ │ ├── message.dart │ │ │ │ └── user.dart │ │ │ ├── repository/ │ │ │ │ ├── base_auth_repository.dart │ │ │ │ ├── base_call_repository.dart │ │ │ │ ├── base_chat_repository.dart │ │ │ │ └── base_select_contact_repository.dart │ │ │ └── usecases/ │ │ │ ├── auth/ │ │ │ │ ├── get_cached_local_current_uid_usecase.dart │ │ │ │ ├── get_current_uid_usecase.dart │ │ │ │ ├── get_current_user_usecase.dart │ │ │ │ ├── get_user_by_id_usecase.dart │ │ │ │ ├── save_userdata_to_firebase_usecase.dart │ │ │ │ ├── set_user_state_usecase.dart │ │ │ │ ├── sign_in_with_phone_number_usecase.dart │ │ │ │ ├── signout_usecase.dart │ │ │ │ ├── update_profile_pic_usecase.dart │ │ │ │ └── verify_otp_usecase.dart │ │ │ ├── call/ │ │ │ │ ├── call_stream_usecase.dart │ │ │ │ ├── end_call_usecase.dart │ │ │ │ └── make_call_usecase.dart │ │ │ ├── chat/ │ │ │ │ ├── get_chat_messages_usecase.dart │ │ │ │ ├── get_contacts_chat_usecase.dart │ │ │ │ ├── get_num_of_message_not_seen_usecase.dart │ │ │ │ ├── send_file_message_usecase.dart │ │ │ │ ├── send_gif_message_usecase.dart │ │ │ │ ├── send_text_message_usecase.dart │ │ │ │ └── set_chat_message_seen_usecase.dart │ │ │ └── select_contact/ │ │ │ ├── get_all_contacts_usecase.dart │ │ │ ├── get_contact_name_usecase.dart │ │ │ ├── get_contacts_not_on_whats_usecase.dart │ │ │ └── get_contacts_on_whats_usecase.dart │ │ └── presentation/ │ │ ├── components/ │ │ │ ├── contact_profile_pic_dialog.dart │ │ │ ├── custom_list_tile.dart │ │ │ ├── custom_network_image.dart │ │ │ ├── custom_pop_up_menu_button.dart │ │ │ ├── custom_text.dart │ │ │ ├── default_button.dart │ │ │ ├── loader.dart │ │ │ ├── my_cached_net_image.dart │ │ │ └── update_profile_pic_model_bottom_sheet.dart │ │ ├── controllers/ │ │ │ ├── auth_cubit/ │ │ │ │ ├── auth_cubit.dart │ │ │ │ └── auth_state.dart │ │ │ ├── bottom_chat_cubit/ │ │ │ │ ├── bottom_chat_cubit.dart │ │ │ │ └── bottom_chat_state.dart │ │ │ ├── call_cubit/ │ │ │ │ ├── call_cubit.dart │ │ │ │ └── call_state.dart │ │ │ ├── chat_background_cubit/ │ │ │ │ ├── chat_background_cubit.dart │ │ │ │ └── chat_background_state.dart │ │ │ ├── chat_cubit/ │ │ │ │ ├── chat_cubit.dart │ │ │ │ └── chat_state.dart │ │ │ └── select_contact_cubit/ │ │ │ ├── select_contact_cubit.dart │ │ │ └── select_contact_state.dart │ │ └── views/ │ │ ├── calls/ │ │ │ ├── call_pickup_screen.dart │ │ │ ├── call_screen.dart │ │ │ └── calls_page.dart │ │ ├── camera/ │ │ │ ├── camera_screen.dart │ │ │ ├── components/ │ │ │ │ ├── camera_appbar.dart │ │ │ │ ├── image_view_top_row_icons.dart │ │ │ │ ├── select_image_from_gallery_button.dart │ │ │ │ ├── sending_image_video_bottom_roww_widget.dart │ │ │ │ └── video_view_top_row_widget.dart │ │ │ ├── sending_image_view_page.dart │ │ │ └── sending_video_view_page.dart │ │ ├── chat/ │ │ │ ├── chat_screen.dart │ │ │ └── components/ │ │ │ ├── bottom_field/ │ │ │ │ ├── attchment_pop_up.dart │ │ │ │ ├── bottom_chat_field.dart │ │ │ │ ├── bottom_chat_with_icon.dart │ │ │ │ ├── emoji_picker_widget.dart │ │ │ │ ├── recording_mic.dart │ │ │ │ ├── recording_mic_widget.dart │ │ │ │ └── timer.dart │ │ │ ├── chat_appbar.dart │ │ │ ├── message/ │ │ │ │ ├── first_message_small_curved_bubble.dart │ │ │ │ ├── message_replay_card.dart │ │ │ │ ├── message_replay_preview.dart │ │ │ │ ├── messages_list.dart │ │ │ │ ├── my_message_card.dart │ │ │ │ └── sender_message_card.dart │ │ │ └── message_content/ │ │ │ ├── audio_player_widget.dart │ │ │ ├── image_widget.dart │ │ │ ├── message_content.dart │ │ │ ├── text_widget.dart │ │ │ ├── time_sent_widget.dart │ │ │ └── video_palyer_widget.dart │ │ ├── contacts_chat/ │ │ │ ├── components/ │ │ │ │ └── chat_contact_card.dart │ │ │ └── contacts_chat_page.dart │ │ ├── login/ │ │ │ ├── components/ │ │ │ │ ├── landing_image.dart │ │ │ │ ├── login_appbar.dart │ │ │ │ ├── login_profile_pic.dart │ │ │ │ ├── privacy_policy_link_and_terms_of_service.dart │ │ │ │ └── sign_out_button.dart │ │ │ ├── login_landing_screen.dart │ │ │ ├── login_loading_screen.dart │ │ │ ├── login_otp_screen.dart │ │ │ ├── login_profile_info_screen.dart │ │ │ └── login_screen.dart │ │ ├── main_layout/ │ │ │ ├── components/ │ │ │ │ ├── fab.dart │ │ │ │ └── sliver_appbar_actions.dart │ │ │ └── main_layout_screen.dart │ │ ├── select_contact/ │ │ │ ├── components/ │ │ │ │ ├── contacts_not_on_whatsapp_list.dart │ │ │ │ ├── contacts_on_whatsapp_list.dart │ │ │ │ ├── new_group_contact_community_buttons_List.dart │ │ │ │ └── select_contact_appbar.dart │ │ │ └── select_contact_screen.dart │ │ ├── sender_profile/ │ │ │ ├── components/ │ │ │ │ ├── body.dart │ │ │ │ ├── encryption_container.dart │ │ │ │ ├── notification_container.dart │ │ │ │ ├── phone_and_name.dart │ │ │ │ ├── sender_profile_icons.dart │ │ │ │ ├── sender_user_profile_appbar.dart │ │ │ │ └── status_container.dart │ │ │ └── sender_profile_page.dart │ │ ├── settings/ │ │ │ ├── components/ │ │ │ │ ├── about_card.dart │ │ │ │ ├── name_card.dart │ │ │ │ ├── phone_card.dart │ │ │ │ ├── profile_card.dart │ │ │ │ ├── profile_pic_circle_card.dart │ │ │ │ ├── setting_bottom_text.dart │ │ │ │ └── settings_item_card.dart │ │ │ ├── profile_screen.dart │ │ │ └── settings_screen.dart │ │ ├── splash/ │ │ │ ├── components/ │ │ │ │ ├── bottom_text.dart │ │ │ │ └── splash_icon.dart │ │ │ └── splash_screen.dart │ │ ├── status/ │ │ │ └── status_page.dart │ │ └── wallpaper/ │ │ └── wallpaper_screen.dart │ ├── info.dart │ └── main.dart ├── pubspec.yaml └── test/ └── widget_test.dart