From bd6bb66279cc72b248aced19c7e847e5e6a02dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Vel=C3=A1squez=20L=C3=B3pez?= Date: Wed, 10 Mar 2021 13:53:20 -0500 Subject: [PATCH] Stream Chatty added as example (#21) * app updated * readme updated * rename base folder * update chatty's readme Co-authored-by: Neevash Ramdial --- chatty/.gitignore | 43 ++ chatty/.metadata | 10 + chatty/LICENSE | 29 + chatty/README.md | 41 ++ chatty/android/.gitignore | 11 + chatty/android/app/build.gradle | 69 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 48 ++ .../com/diegoveloper/fluchat/MainActivity.kt | 6 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + chatty/android/build.gradle | 32 + chatty/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + chatty/android/settings.gradle | 11 + chatty/android/settings_aar.gradle | 1 + chatty/art/fluchat.png | Bin 0 -> 228492 bytes chatty/assets/icon-bottom-right.png | Bin 0 -> 16840 bytes chatty/assets/icon-google.png | Bin 0 -> 12002 bytes chatty/assets/icon-top-right.png | Bin 0 -> 9509 bytes chatty/assets/logo.png | Bin 0 -> 5880 bytes chatty/ios/.gitignore | 32 + chatty/ios/Flutter/AppFrameworkInfo.plist | 26 + chatty/ios/Flutter/Debug.xcconfig | 2 + chatty/ios/Flutter/Release.xcconfig | 2 + chatty/ios/Runner.xcodeproj/project.pbxproj | 609 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + chatty/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ chatty/ios/Runner/Base.lproj/Main.storyboard | 26 + chatty/ios/Runner/Info.plist | 62 ++ chatty/ios/Runner/Runner-Bridging-Header.h | 1 + chatty/lib/data/auth_repository.dart | 7 + chatty/lib/data/image_picker_repository.dart | 5 + chatty/lib/data/local/auth_local_impl.dart | 21 + chatty/lib/data/local/image_picker_impl.dart | 12 + .../local/persistent_storage_local_impl.dart | 15 + .../lib/data/local/stream_api_local_impl.dart | 86 +++ .../data/local/upload_storage_local_impl.dart | 10 + .../data/persistent_storage_repository.dart | 4 + chatty/lib/data/prod/auth_impl.dart | 41 ++ .../data/prod/persistent_storage_impl.dart | 18 + chatty/lib/data/prod/stream_api_impl.dart | 102 +++ chatty/lib/data/prod/upload_storage_impl.dart | 13 + chatty/lib/data/stream_api_repository.dart | 12 + .../lib/data/upload_storage_repository.dart | 5 + chatty/lib/dependencies.dart | 56 ++ .../lib/domain/exceptions/auth_exception.dart | 10 + chatty/lib/domain/models/auth_user.dart | 4 + chatty/lib/domain/models/chat_user.dart | 6 + .../domain/usecases/create_group_usecase.dart | 38 ++ chatty/lib/domain/usecases/login_usecase.dart | 30 + .../lib/domain/usecases/logout_usecase.dart | 13 + .../usecases/profile_sign_in_usecase.dart | 34 + chatty/lib/main.dart | 50 ++ chatty/lib/navigator_utils.dart | 22 + chatty/lib/ui/app_theme_cubit.dart | 21 + chatty/lib/ui/common/avatar_image_view.dart | 45 ++ .../ui/common/initial_background_view.dart | 27 + chatty/lib/ui/common/loading_view.dart | 30 + chatty/lib/ui/common/my_channel_preview.dart | 326 ++++++++++ chatty/lib/ui/home/chat/chat_view.dart | 160 +++++ .../selection/friends_selection_cubit.dart | 38 ++ .../selection/friends_selection_view.dart | 190 ++++++ .../chat/selection/group_selection_cubit.dart | 47 ++ .../chat/selection/group_selection_view.dart | 117 ++++ chatty/lib/ui/home/home_cubit.dart | 7 + chatty/lib/ui/home/home_view.dart | 139 ++++ .../lib/ui/home/settings/settings_cubit.dart | 19 + .../lib/ui/home/settings/settings_view.dart | 119 ++++ .../profile_verify/profile_verify_cubit.dart | 44 ++ .../profile_verify/profile_verify_view.dart | 108 ++++ chatty/lib/ui/sign_in/sign_in_cubit.dart | 30 + chatty/lib/ui/sign_in/sign_in_view.dart | 100 +++ chatty/lib/ui/splash/splash_cubit.dart | 32 + chatty/lib/ui/splash/splash_view.dart | 44 ++ chatty/lib/ui/themes.dart | 54 ++ chatty/pubspec.yaml | 40 ++ 111 files changed, 3806 insertions(+) create mode 100644 chatty/.gitignore create mode 100644 chatty/.metadata create mode 100644 chatty/LICENSE create mode 100644 chatty/README.md create mode 100644 chatty/android/.gitignore create mode 100644 chatty/android/app/build.gradle create mode 100644 chatty/android/app/src/debug/AndroidManifest.xml create mode 100644 chatty/android/app/src/main/AndroidManifest.xml create mode 100644 chatty/android/app/src/main/kotlin/com/diegoveloper/fluchat/MainActivity.kt create mode 100644 chatty/android/app/src/main/res/drawable/launch_background.xml create mode 100644 chatty/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 chatty/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 chatty/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 chatty/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 chatty/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 chatty/android/app/src/main/res/values/styles.xml create mode 100644 chatty/android/app/src/profile/AndroidManifest.xml create mode 100644 chatty/android/build.gradle create mode 100644 chatty/android/gradle.properties create mode 100644 chatty/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 chatty/android/settings.gradle create mode 100644 chatty/android/settings_aar.gradle create mode 100644 chatty/art/fluchat.png create mode 100644 chatty/assets/icon-bottom-right.png create mode 100644 chatty/assets/icon-google.png create mode 100644 chatty/assets/icon-top-right.png create mode 100644 chatty/assets/logo.png create mode 100644 chatty/ios/.gitignore create mode 100644 chatty/ios/Flutter/AppFrameworkInfo.plist create mode 100644 chatty/ios/Flutter/Debug.xcconfig create mode 100644 chatty/ios/Flutter/Release.xcconfig create mode 100644 chatty/ios/Runner.xcodeproj/project.pbxproj create mode 100644 chatty/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 chatty/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 chatty/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 chatty/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 chatty/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 chatty/ios/Runner/AppDelegate.swift create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 chatty/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 chatty/ios/Runner/Base.lproj/Main.storyboard create mode 100644 chatty/ios/Runner/Info.plist create mode 100644 chatty/ios/Runner/Runner-Bridging-Header.h create mode 100644 chatty/lib/data/auth_repository.dart create mode 100644 chatty/lib/data/image_picker_repository.dart create mode 100644 chatty/lib/data/local/auth_local_impl.dart create mode 100644 chatty/lib/data/local/image_picker_impl.dart create mode 100644 chatty/lib/data/local/persistent_storage_local_impl.dart create mode 100644 chatty/lib/data/local/stream_api_local_impl.dart create mode 100644 chatty/lib/data/local/upload_storage_local_impl.dart create mode 100644 chatty/lib/data/persistent_storage_repository.dart create mode 100644 chatty/lib/data/prod/auth_impl.dart create mode 100644 chatty/lib/data/prod/persistent_storage_impl.dart create mode 100644 chatty/lib/data/prod/stream_api_impl.dart create mode 100644 chatty/lib/data/prod/upload_storage_impl.dart create mode 100644 chatty/lib/data/stream_api_repository.dart create mode 100644 chatty/lib/data/upload_storage_repository.dart create mode 100644 chatty/lib/dependencies.dart create mode 100644 chatty/lib/domain/exceptions/auth_exception.dart create mode 100644 chatty/lib/domain/models/auth_user.dart create mode 100644 chatty/lib/domain/models/chat_user.dart create mode 100644 chatty/lib/domain/usecases/create_group_usecase.dart create mode 100644 chatty/lib/domain/usecases/login_usecase.dart create mode 100644 chatty/lib/domain/usecases/logout_usecase.dart create mode 100644 chatty/lib/domain/usecases/profile_sign_in_usecase.dart create mode 100644 chatty/lib/main.dart create mode 100644 chatty/lib/navigator_utils.dart create mode 100644 chatty/lib/ui/app_theme_cubit.dart create mode 100644 chatty/lib/ui/common/avatar_image_view.dart create mode 100644 chatty/lib/ui/common/initial_background_view.dart create mode 100644 chatty/lib/ui/common/loading_view.dart create mode 100644 chatty/lib/ui/common/my_channel_preview.dart create mode 100644 chatty/lib/ui/home/chat/chat_view.dart create mode 100644 chatty/lib/ui/home/chat/selection/friends_selection_cubit.dart create mode 100644 chatty/lib/ui/home/chat/selection/friends_selection_view.dart create mode 100644 chatty/lib/ui/home/chat/selection/group_selection_cubit.dart create mode 100644 chatty/lib/ui/home/chat/selection/group_selection_view.dart create mode 100644 chatty/lib/ui/home/home_cubit.dart create mode 100644 chatty/lib/ui/home/home_view.dart create mode 100644 chatty/lib/ui/home/settings/settings_cubit.dart create mode 100644 chatty/lib/ui/home/settings/settings_view.dart create mode 100644 chatty/lib/ui/profile_verify/profile_verify_cubit.dart create mode 100644 chatty/lib/ui/profile_verify/profile_verify_view.dart create mode 100644 chatty/lib/ui/sign_in/sign_in_cubit.dart create mode 100644 chatty/lib/ui/sign_in/sign_in_view.dart create mode 100644 chatty/lib/ui/splash/splash_cubit.dart create mode 100644 chatty/lib/ui/splash/splash_view.dart create mode 100644 chatty/lib/ui/themes.dart create mode 100644 chatty/pubspec.yaml diff --git a/chatty/.gitignore b/chatty/.gitignore new file mode 100644 index 0000000..80fbb56 --- /dev/null +++ b/chatty/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json +ios/Runner/GoogleService-Info.plist +android/app/google-services.json diff --git a/chatty/.metadata b/chatty/.metadata new file mode 100644 index 0000000..cd984dd --- /dev/null +++ b/chatty/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 + channel: stable + +project_type: app diff --git a/chatty/LICENSE b/chatty/LICENSE new file mode 100644 index 0000000..61b67e2 --- /dev/null +++ b/chatty/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2021, Diego Velásquez López +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/chatty/README.md b/chatty/README.md new file mode 100644 index 0000000..0c17de7 --- /dev/null +++ b/chatty/README.md @@ -0,0 +1,41 @@ +# Stream Chatty + +Stream Chatty is a sample chat app made in Flutter using [Stream Chat](https://getstream.io/chat/sdk/flutter/), [Firebase](https://firebase.google.com/), and [flutter_bloc](https://bloclibrary.dev/#/). It has full light and dark mode support, real-time chat, and full authentication using Firebase auth. + +Stream Chatty was created by [Diego Velasquez](http://www.twitter.com/diegoveloper) as part of a Youtube series. A step by step guide to building Stream Chatty from scratch can be found here: + +- Part 1 - https://www.youtube.com/watch?v=H7FjCWHmP9Y => Project Structure, StreamChat, flutter_bloc +- Part 2 - https://www.youtube.com/watch?v=xGXvgrA_vNY => Clean Architecture, dependency injection, auth, storage, chat +- Part 3 - https://www.youtube.com/watch?v=EVvGdFc4SvQ => UI/UX, customizing StreamChat and demo + +> Activate English subtitles + +# Image + +![design](art/fluchat.png?raw=true "Stream Chatty") + + +# Design + +- https://dribbble.com/shots/15263978-Fluchat +- https://projects.invisionapp.com/prototype/Chat-App-cklk8tiia002tqz01u0q1u3cl/play/9ef3ca44 + +# Diego's Networks + +- www.twitter.com/diegoveloper +- www.youtube.com/diegoveloper + +## Features + +- Login using Firebase Auth and Google Sign In +- Upload pictures using Firebase Storage +- Realtime chat using StreamChat package +- Dark mode/Light mode +- State Management using flutter_bloc and cubits + +## Installation + +- Clone project +- Configure Firebase (google-services.json and Google-Service.info.plist files) +- Configure Google Sign In +- Configure your Stream project diff --git a/chatty/android/.gitignore b/chatty/android/.gitignore new file mode 100644 index 0000000..0a741cb --- /dev/null +++ b/chatty/android/.gitignore @@ -0,0 +1,11 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/chatty/android/app/build.gradle b/chatty/android/app/build.gradle new file mode 100644 index 0000000..d2aab44 --- /dev/null +++ b/chatty/android/app/build.gradle @@ -0,0 +1,69 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 29 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + checkReleaseBuilds false + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.diegoveloper.fluchat" + minSdkVersion 26 + targetSdkVersion 29 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + minifyEnabled false + useProguard false + shrinkResources false + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} + +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/chatty/android/app/src/debug/AndroidManifest.xml b/chatty/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..bda6c33 --- /dev/null +++ b/chatty/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/chatty/android/app/src/main/AndroidManifest.xml b/chatty/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a8a09e4 --- /dev/null +++ b/chatty/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + diff --git a/chatty/android/app/src/main/kotlin/com/diegoveloper/fluchat/MainActivity.kt b/chatty/android/app/src/main/kotlin/com/diegoveloper/fluchat/MainActivity.kt new file mode 100644 index 0000000..51930b7 --- /dev/null +++ b/chatty/android/app/src/main/kotlin/com/diegoveloper/fluchat/MainActivity.kt @@ -0,0 +1,6 @@ +package com.diegoveloper.fluchat + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/chatty/android/app/src/main/res/drawable/launch_background.xml b/chatty/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/chatty/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/chatty/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/chatty/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/chatty/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/chatty/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/chatty/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/chatty/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/chatty/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/chatty/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/chatty/android/app/src/main/res/values/styles.xml b/chatty/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..1f83a33 --- /dev/null +++ b/chatty/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/chatty/android/app/src/profile/AndroidManifest.xml b/chatty/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..bda6c33 --- /dev/null +++ b/chatty/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/chatty/android/build.gradle b/chatty/android/build.gradle new file mode 100644 index 0000000..7372192 --- /dev/null +++ b/chatty/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:4.0.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.3' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/chatty/android/gradle.properties b/chatty/android/gradle.properties new file mode 100644 index 0000000..a673820 --- /dev/null +++ b/chatty/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/chatty/android/gradle/wrapper/gradle-wrapper.properties b/chatty/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..493072b --- /dev/null +++ b/chatty/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/chatty/android/settings.gradle b/chatty/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/chatty/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/chatty/android/settings_aar.gradle b/chatty/android/settings_aar.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/chatty/android/settings_aar.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/chatty/art/fluchat.png b/chatty/art/fluchat.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7b2e23460a3775cf92c35c93368f01bb1d0e6b GIT binary patch literal 228492 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

Jy64M8YcLoojS~`eiP^f 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 a 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

>Sutybt6|!M-hO!e@4?`Q_ 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


Nq)eJnpj;8tKNWP@ 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 literal 0 HcmV?d00001 diff --git a/chatty/assets/icon-bottom-right.png b/chatty/assets/icon-bottom-right.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec92820859c878ace1441b73942d0ffd265910f GIT binary patch literal 16840 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 literal 0 HcmV?d00001 diff --git a/chatty/assets/icon-google.png b/chatty/assets/icon-google.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d47fc1441fa4f66838d7cbd96d0a8f59749e6d GIT binary patch literal 12002 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®`0s_SG`cX|@mM-w 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 literal 0 HcmV?d00001 diff --git a/chatty/assets/icon-top-right.png b/chatty/assets/icon-top-right.png new file mode 100644 index 0000000000000000000000000000000000000000..0034db3705f39035dd5642a510a1d52aa6a0e1aa GIT binary patch literal 9509 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 literal 0 HcmV?d00001 diff --git a/chatty/assets/logo.png b/chatty/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..296f9b5ba06c031b2a9c7f31436ff2148a34f807 GIT binary patch literal 5880 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 + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/chatty/ios/Flutter/Debug.xcconfig b/chatty/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..e8efba1 --- /dev/null +++ b/chatty/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/chatty/ios/Flutter/Release.xcconfig b/chatty/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..399e934 --- /dev/null +++ b/chatty/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/chatty/ios/Runner.xcodeproj/project.pbxproj b/chatty/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3e47d59 --- /dev/null +++ b/chatty/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,609 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + F5CFF8E625F08BBE00C304A9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F5CFF8E525F08BBE00C304A9 /* GoogleService-Info.plist */; }; + FB7765FF5CC347F9C712FA62 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40B0FCA72C62C135629B3D83 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 40B0FCA72C62C135629B3D83 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7430D861790AE1F50B4E922F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7D7209A1F031C39E3DC3421F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A8573CD2B6898A29F5C8B294 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F5CFF8E525F08BBE00C304A9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FB7765FF5CC347F9C712FA62 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + DF144A162B77171986C53884 /* Pods */, + E16EDD54509B5CAB32FBDFC1 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + F5CFF8E525F08BBE00C304A9 /* GoogleService-Info.plist */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + DF144A162B77171986C53884 /* Pods */ = { + isa = PBXGroup; + children = ( + 7D7209A1F031C39E3DC3421F /* Pods-Runner.debug.xcconfig */, + 7430D861790AE1F50B4E922F /* Pods-Runner.release.xcconfig */, + A8573CD2B6898A29F5C8B294 /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + E16EDD54509B5CAB32FBDFC1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 40B0FCA72C62C135629B3D83 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 794C749773D7932A43B8BD34 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + C3991DF06AD2C2FF0E1CACF7 /* [CP] Embed Pods Frameworks */, + 50CF9F5875290FEF1EABAC13 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + F5CFF8E625F08BBE00C304A9 /* GoogleService-Info.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 50CF9F5875290FEF1EABAC13 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 794C749773D7932A43B8BD34 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + C3991DF06AD2C2FF0E1CACF7 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YPGH95V8AL; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.teamgo.fluchat; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YPGH95V8AL; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.teamgo.fluchat; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YPGH95V8AL; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.teamgo.fluchat; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/chatty/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/chatty/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/chatty/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/chatty/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/chatty/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/chatty/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/chatty/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chatty/ios/Runner.xcworkspace/contents.xcworkspacedata b/chatty/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/chatty/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/chatty/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/chatty/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/chatty/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/chatty/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/chatty/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/chatty/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/chatty/ios/Runner/AppDelegate.swift b/chatty/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/chatty/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/chatty/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/chatty/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/chatty/ios/Runner/Base.lproj/LaunchScreen.storyboard b/chatty/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/chatty/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chatty/ios/Runner/Base.lproj/Main.storyboard b/chatty/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/chatty/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chatty/ios/Runner/Info.plist b/chatty/ios/Runner/Info.plist new file mode 100644 index 0000000..aff3c30 --- /dev/null +++ b/chatty/ios/Runner/Info.plist @@ -0,0 +1,62 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Chatty + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.880353337418-6ogtdb83ub9sjfovcv2k98dte87fmpnv + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + NSCameraUsageDescription + Used to demonstrate image picker plugin + NSMicrophoneUsageDescription + Used to capture audio for image picker plugin + NSPhotoLibraryUsageDescription + Used to demonstrate image picker plugin + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/chatty/ios/Runner/Runner-Bridging-Header.h b/chatty/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/chatty/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/chatty/lib/data/auth_repository.dart b/chatty/lib/data/auth_repository.dart new file mode 100644 index 0000000..2ac77e8 --- /dev/null +++ b/chatty/lib/data/auth_repository.dart @@ -0,0 +1,7 @@ +import 'package:stream_chatter/domain/models/auth_user.dart'; + +abstract class AuthRepository { + Future getAuthUser(); + Future signIn(); + Future logout(); +} diff --git a/chatty/lib/data/image_picker_repository.dart b/chatty/lib/data/image_picker_repository.dart new file mode 100644 index 0000000..f5632f0 --- /dev/null +++ b/chatty/lib/data/image_picker_repository.dart @@ -0,0 +1,5 @@ +import 'dart:io'; + +abstract class ImagePickerRepository { + Future pickImage(); +} diff --git a/chatty/lib/data/local/auth_local_impl.dart b/chatty/lib/data/local/auth_local_impl.dart new file mode 100644 index 0000000..c3d4d72 --- /dev/null +++ b/chatty/lib/data/local/auth_local_impl.dart @@ -0,0 +1,21 @@ +import 'package:stream_chatter/data/auth_repository.dart'; +import 'package:stream_chatter/domain/models/auth_user.dart'; + +class AuthLocalImpl extends AuthRepository { + @override + Future getAuthUser() async { + await Future.delayed(const Duration(seconds: 2)); + return AuthUser('diego'); + } + + @override + Future signIn() async { + await Future.delayed(const Duration(seconds: 2)); + return AuthUser('diego'); + } + + @override + Future logout() async { + return; + } +} diff --git a/chatty/lib/data/local/image_picker_impl.dart b/chatty/lib/data/local/image_picker_impl.dart new file mode 100644 index 0000000..21a1b15 --- /dev/null +++ b/chatty/lib/data/local/image_picker_impl.dart @@ -0,0 +1,12 @@ +import 'dart:io'; +import 'package:image_picker/image_picker.dart'; +import 'package:stream_chatter/data/image_picker_repository.dart'; + +class ImagePickerImpl extends ImagePickerRepository { + @override + Future pickImage() async { + final picker = ImagePicker(); + final pickedFile = await picker.getImage(source: ImageSource.gallery, maxWidth: 400); + return File(pickedFile.path); + } +} diff --git a/chatty/lib/data/local/persistent_storage_local_impl.dart b/chatty/lib/data/local/persistent_storage_local_impl.dart new file mode 100644 index 0000000..85d1e4d --- /dev/null +++ b/chatty/lib/data/local/persistent_storage_local_impl.dart @@ -0,0 +1,15 @@ +import 'package:stream_chatter/data/persistent_storage_repository.dart'; + +class PersistentStorageLocalImpl extends PersistentStorageRepository { + @override + Future isDarkMode() async { + await Future.delayed(const Duration(milliseconds: 50)); + return false; + } + + @override + Future updateDarkMode(bool isDarkMode) async { + await Future.delayed(const Duration(milliseconds: 50)); + return; + } +} diff --git a/chatty/lib/data/local/stream_api_local_impl.dart b/chatty/lib/data/local/stream_api_local_impl.dart new file mode 100644 index 0000000..f772a26 --- /dev/null +++ b/chatty/lib/data/local/stream_api_local_impl.dart @@ -0,0 +1,86 @@ +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/domain/models/chat_user.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class StreamApiLocalImpl extends StreamApiRepository { + StreamApiLocalImpl(this._client); + + final StreamChatClient _client; + + @override + Future connectUser(ChatUser user, String token) async { + Map extraData = {}; + if (user.image != null) { + extraData['image'] = user.image; + } + if (user.name != null) { + extraData['name'] = user.name; + } + await _client.disconnect(); + await _client.connectUser( + User(id: user.id, extraData: extraData), + token, + ); + return user; + } + + @override + Future> getChatUsers() async { + final result = await _client.queryUsers(); + final chatUsers = result.users + .where((element) => element.id != _client.state.user.id) + .map( + (e) => ChatUser( + id: e.id, + name: e.name, + image: e.extraData['image'], + ), + ) + .toList(); + return chatUsers; + } + + @override + Future getToken(String userId) async { + return _client.devToken(userId); + } + + @override + Future createGroupChat(String channelId, String name, List members, {String image}) async { + final channel = _client.channel('messaging', id: channelId, extraData: { + 'name': name, + 'image': image, + 'members': [_client.state.user.id, ...members], + }); + await channel.watch(); + return channel; + } + + @override + Future createSimpleChat(String friendId) async { + final channel = + _client.channel('messaging', id: '${_client.state.user.id.hashCode}${friendId.hashCode}', extraData: { + 'members': [ + friendId, + _client.state.user.id, + ], + }); + await channel.watch(); + return channel; + } + + @override + Future logout() { + return _client.disconnect(); + } + + @override + Future connectIfExist(String userId) async { + final token = await getToken(userId); + await _client.connectUser( + User(id: userId), + token, + ); + return _client.state.user.name != null && _client.state.user.name != userId; + } +} diff --git a/chatty/lib/data/local/upload_storage_local_impl.dart b/chatty/lib/data/local/upload_storage_local_impl.dart new file mode 100644 index 0000000..8a3b804 --- /dev/null +++ b/chatty/lib/data/local/upload_storage_local_impl.dart @@ -0,0 +1,10 @@ +import 'dart:io'; + +import 'package:stream_chatter/data/upload_storage_repository.dart'; + +class UploadStorageLocalImpl extends UploadStorageRepository { + @override + Future uploadPhoto(File file, String path) async { + return 'https://lh3.googleusercontent.com/a-/AOh14GjhqGZ-V7tNXS1pOIp9vbBij4OS9JbzxXgxgy1t=s600-k-no-rp-mo'; + } +} diff --git a/chatty/lib/data/persistent_storage_repository.dart b/chatty/lib/data/persistent_storage_repository.dart new file mode 100644 index 0000000..c061619 --- /dev/null +++ b/chatty/lib/data/persistent_storage_repository.dart @@ -0,0 +1,4 @@ +abstract class PersistentStorageRepository { + Future isDarkMode(); + Future updateDarkMode(bool isDarkMode); +} diff --git a/chatty/lib/data/prod/auth_impl.dart b/chatty/lib/data/prod/auth_impl.dart new file mode 100644 index 0000000..90547bb --- /dev/null +++ b/chatty/lib/data/prod/auth_impl.dart @@ -0,0 +1,41 @@ +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:stream_chatter/data/auth_repository.dart'; +import 'package:stream_chatter/domain/models/auth_user.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +class AuthImpl extends AuthRepository { + FirebaseAuth _auth = FirebaseAuth.instance; + + @override + Future getAuthUser() async { + final user = _auth.currentUser; + if (user != null) { + return AuthUser(user.uid); + } + return null; + } + + @override + Future signIn() async { + try { + UserCredential userCredential; + final GoogleSignInAccount googleUser = await GoogleSignIn().signIn(); + final GoogleSignInAuthentication googleAuth = await googleUser.authentication; + final GoogleAuthCredential googleAuthCredential = GoogleAuthProvider.credential( + accessToken: googleAuth.accessToken, + idToken: googleAuth.idToken, + ); + userCredential = await _auth.signInWithCredential(googleAuthCredential); + final user = userCredential.user; + return AuthUser(user.uid); + } catch (e) { + print(e); + throw Exception('login error'); + } + } + + @override + Future logout() async { + return _auth.signOut(); + } +} diff --git a/chatty/lib/data/prod/persistent_storage_impl.dart b/chatty/lib/data/prod/persistent_storage_impl.dart new file mode 100644 index 0000000..5d247d5 --- /dev/null +++ b/chatty/lib/data/prod/persistent_storage_impl.dart @@ -0,0 +1,18 @@ +import 'package:stream_chatter/data/persistent_storage_repository.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +const _isDarkMode = 'isDarkMode'; + +class PersistentStorageImpl extends PersistentStorageRepository { + @override + Future isDarkMode() async { + final preference = await SharedPreferences.getInstance(); + return preference.getBool(_isDarkMode) ?? false; + } + + @override + Future updateDarkMode(bool isDarkMode) async { + final preference = await SharedPreferences.getInstance(); + return await preference.setBool(_isDarkMode, isDarkMode); + } +} diff --git a/chatty/lib/data/prod/stream_api_impl.dart b/chatty/lib/data/prod/stream_api_impl.dart new file mode 100644 index 0000000..1bcab14 --- /dev/null +++ b/chatty/lib/data/prod/stream_api_impl.dart @@ -0,0 +1,102 @@ +import 'dart:convert'; + +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/domain/models/chat_user.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:http/http.dart' as http; + +class StreamApiImpl extends StreamApiRepository { + StreamApiImpl(this._client); + + final StreamChatClient _client; + + @override + Future connectUser(ChatUser user, String token) async { + Map extraData = {}; + if (user.image != null) { + extraData['image'] = user.image; + } + if (user.name != null) { + extraData['name'] = user.name; + } + await _client.disconnect(); + await _client.connectUser( + User(id: user.id, extraData: extraData), + token, + ); + return user; + } + + @override + Future> getChatUsers() async { + final result = await _client.queryUsers(); + final chatUsers = result.users + .where((element) => element.id != _client.state.user.id) + .map( + (e) => ChatUser( + id: e.id, + name: e.name, + image: e.extraData['image'], + ), + ) + .toList(); + return chatUsers; + } + + @override + Future getToken(String userId) async { + //TODO: use your own implementation in Production + final response = await http.post( + 'your_backend_url', + body: jsonEncode({'id': userId}), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + ); + final token = jsonDecode(response.body)['token']; + + //In Development mode you can just use : + // _client.devToken(userId); + + return token; + } + + @override + Future createGroupChat(String id, String name, List members, {String image}) async { + final channel = _client.channel('messaging', id: id, extraData: { + 'name': name, + 'image': image, + 'members': [_client.state.user.id, ...members], + }); + await channel.watch(); + return channel; + } + + @override + Future createSimpleChat(String friendId) async { + final channel = + _client.channel('messaging', id: '${_client.state.user.id.hashCode}${friendId.hashCode}', extraData: { + 'members': [ + friendId, + _client.state.user.id, + ], + }); + await channel.watch(); + return channel; + } + + @override + Future logout() async { + return _client.disconnect(); + } + + @override + Future connectIfExist(String userId) async { + final token = await getToken(userId); + await _client.connectUser( + User(id: userId), + token, + ); + return _client.state.user.name != null && _client.state.user.name != userId; + } +} diff --git a/chatty/lib/data/prod/upload_storage_impl.dart b/chatty/lib/data/prod/upload_storage_impl.dart new file mode 100644 index 0000000..37f6830 --- /dev/null +++ b/chatty/lib/data/prod/upload_storage_impl.dart @@ -0,0 +1,13 @@ +import 'dart:io'; +import 'package:firebase_storage/firebase_storage.dart' as firebase_storage; +import 'package:stream_chatter/data/upload_storage_repository.dart'; + +class UploadStorageImpl extends UploadStorageRepository { + @override + Future uploadPhoto(File file, String path) async { + final ref = firebase_storage.FirebaseStorage.instance.ref(path); + final uploadTask = ref.putFile(file); + await uploadTask; + return await ref.getDownloadURL(); + } +} diff --git a/chatty/lib/data/stream_api_repository.dart b/chatty/lib/data/stream_api_repository.dart new file mode 100644 index 0000000..4ae31cb --- /dev/null +++ b/chatty/lib/data/stream_api_repository.dart @@ -0,0 +1,12 @@ +import 'package:stream_chatter/domain/models/chat_user.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +abstract class StreamApiRepository { + Future> getChatUsers(); + Future getToken(String userId); + Future connectIfExist(String userId); + Future connectUser(ChatUser user, String token); + Future createGroupChat(String channelId, String name, List members, {String image}); + Future createSimpleChat(String friendId); + Future logout(); +} diff --git a/chatty/lib/data/upload_storage_repository.dart b/chatty/lib/data/upload_storage_repository.dart new file mode 100644 index 0000000..6876138 --- /dev/null +++ b/chatty/lib/data/upload_storage_repository.dart @@ -0,0 +1,5 @@ +import 'dart:io'; + +abstract class UploadStorageRepository { + Future uploadPhoto(File file, String path); +} diff --git a/chatty/lib/dependencies.dart b/chatty/lib/dependencies.dart new file mode 100644 index 0000000..78a5c7a --- /dev/null +++ b/chatty/lib/dependencies.dart @@ -0,0 +1,56 @@ +import 'package:stream_chatter/data/auth_repository.dart'; +import 'package:stream_chatter/data/image_picker_repository.dart'; +import 'package:stream_chatter/data/local/auth_local_impl.dart'; +import 'package:stream_chatter/data/local/image_picker_impl.dart'; +import 'package:stream_chatter/data/local/persistent_storage_local_impl.dart'; +import 'package:stream_chatter/data/local/stream_api_local_impl.dart'; +import 'package:stream_chatter/data/local/upload_storage_local_impl.dart'; +import 'package:stream_chatter/data/persistent_storage_repository.dart'; +import 'package:stream_chatter/data/prod/auth_impl.dart'; +import 'package:stream_chatter/data/prod/persistent_storage_impl.dart'; +import 'package:stream_chatter/data/prod/stream_api_impl.dart'; +import 'package:stream_chatter/data/prod/upload_storage_impl.dart'; +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/data/upload_storage_repository.dart'; +import 'package:stream_chatter/domain/usecases/create_group_usecase.dart'; +import 'package:stream_chatter/domain/usecases/login_usecase.dart'; +import 'package:stream_chatter/domain/usecases/logout_usecase.dart'; +import 'package:stream_chatter/domain/usecases/profile_sign_in_usecase.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +List buildRepositories(StreamChatClient client) { + //TODO: Here you can use your local implementations of your repositories + return [ + RepositoryProvider(create: (_) => StreamApiImpl(client)), + RepositoryProvider(create: (_) => PersistentStorageImpl()), + RepositoryProvider(create: (_) => AuthImpl()), + RepositoryProvider(create: (_) => UploadStorageImpl()), + RepositoryProvider(create: (_) => ImagePickerImpl()), + RepositoryProvider( + create: (context) => ProfileSignInUseCase( + context.read(), + context.read(), + context.read(), + ), + ), + RepositoryProvider( + create: (context) => CreateGroupUseCase( + context.read(), + context.read(), + ), + ), + RepositoryProvider( + create: (context) => LogoutUseCase( + context.read(), + context.read(), + ), + ), + RepositoryProvider( + create: (context) => LoginUseCase( + context.read(), + context.read(), + ), + ), + ]; +} diff --git a/chatty/lib/domain/exceptions/auth_exception.dart b/chatty/lib/domain/exceptions/auth_exception.dart new file mode 100644 index 0000000..22cbf09 --- /dev/null +++ b/chatty/lib/domain/exceptions/auth_exception.dart @@ -0,0 +1,10 @@ +enum AuthErrorCode { + not_auth, + not_chat_user, +} + +class AuthException implements Exception { + AuthException(this.error); + + final AuthErrorCode error; +} diff --git a/chatty/lib/domain/models/auth_user.dart b/chatty/lib/domain/models/auth_user.dart new file mode 100644 index 0000000..7ffcd9d --- /dev/null +++ b/chatty/lib/domain/models/auth_user.dart @@ -0,0 +1,4 @@ +class AuthUser { + AuthUser(this.id); + final String id; +} diff --git a/chatty/lib/domain/models/chat_user.dart b/chatty/lib/domain/models/chat_user.dart new file mode 100644 index 0000000..05a0a61 --- /dev/null +++ b/chatty/lib/domain/models/chat_user.dart @@ -0,0 +1,6 @@ +class ChatUser { + const ChatUser({this.name, this.image, this.id}); + final String name; + final String image; + final String id; +} diff --git a/chatty/lib/domain/usecases/create_group_usecase.dart b/chatty/lib/domain/usecases/create_group_usecase.dart new file mode 100644 index 0000000..82122a2 --- /dev/null +++ b/chatty/lib/domain/usecases/create_group_usecase.dart @@ -0,0 +1,38 @@ +import 'dart:io'; + +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/data/upload_storage_repository.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:uuid/uuid.dart'; + +class CreateGroupInput { + CreateGroupInput({this.imageFile, this.name, this.members}); + final File imageFile; + final String name; + final List members; +} + +class CreateGroupUseCase { + CreateGroupUseCase( + this._streamApiRepository, + this._uploadStorageRepository, + ); + + final UploadStorageRepository _uploadStorageRepository; + final StreamApiRepository _streamApiRepository; + + Future createGroup(CreateGroupInput input) async { + final channelId = Uuid().v4(); + String image; + if (input.imageFile != null) { + image = await _uploadStorageRepository.uploadPhoto(input.imageFile, 'channels/$channelId'); + } + final channel = await _streamApiRepository.createGroupChat( + channelId, + input.name, + input.members, + image: image, + ); + return channel; + } +} diff --git a/chatty/lib/domain/usecases/login_usecase.dart b/chatty/lib/domain/usecases/login_usecase.dart new file mode 100644 index 0000000..5b0d04d --- /dev/null +++ b/chatty/lib/domain/usecases/login_usecase.dart @@ -0,0 +1,30 @@ +import 'package:stream_chatter/data/auth_repository.dart'; +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/domain/exceptions/auth_exception.dart'; +import 'package:stream_chatter/domain/models/auth_user.dart'; + +class LoginUseCase { + LoginUseCase(this.authRepository, this.streamApiRepository); + + final AuthRepository authRepository; + final StreamApiRepository streamApiRepository; + + Future validateLogin() async { + print('validateLogin'); + final user = await authRepository.getAuthUser(); + print('user: ${user?.id}'); + if (user != null) { + final result = await streamApiRepository.connectIfExist(user.id); + if (result) { + return true; + } else { + throw AuthException(AuthErrorCode.not_chat_user); + } + } + throw AuthException(AuthErrorCode.not_auth); + } + + Future signIn() async { + return await authRepository.signIn(); + } +} diff --git a/chatty/lib/domain/usecases/logout_usecase.dart b/chatty/lib/domain/usecases/logout_usecase.dart new file mode 100644 index 0000000..96b419e --- /dev/null +++ b/chatty/lib/domain/usecases/logout_usecase.dart @@ -0,0 +1,13 @@ +import 'package:stream_chatter/data/auth_repository.dart'; +import 'package:stream_chatter/data/stream_api_repository.dart'; + +class LogoutUseCase { + LogoutUseCase(this.streamApiRepository, this.authRepository); + final StreamApiRepository streamApiRepository; + final AuthRepository authRepository; + + Future logout() async { + await streamApiRepository.logout(); + await authRepository.logout(); + } +} diff --git a/chatty/lib/domain/usecases/profile_sign_in_usecase.dart b/chatty/lib/domain/usecases/profile_sign_in_usecase.dart new file mode 100644 index 0000000..8450581 --- /dev/null +++ b/chatty/lib/domain/usecases/profile_sign_in_usecase.dart @@ -0,0 +1,34 @@ +import 'dart:io'; + +import 'package:stream_chatter/data/auth_repository.dart'; +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/data/upload_storage_repository.dart'; +import 'package:stream_chatter/domain/models/chat_user.dart'; + +class ProfileInput { + ProfileInput({this.imageFile, this.name}); + final File imageFile; + final String name; +} + +class ProfileSignInUseCase { + ProfileSignInUseCase( + this._authRepository, + this._streamApiRepository, + this._uploadStorageRepository, + ); + + final AuthRepository _authRepository; + final UploadStorageRepository _uploadStorageRepository; + final StreamApiRepository _streamApiRepository; + + Future verify(ProfileInput input) async { + final auth = await _authRepository.getAuthUser(); + final token = await _streamApiRepository.getToken(auth.id); + String image; + if (input.imageFile != null) { + image = await _uploadStorageRepository.uploadPhoto(input.imageFile, 'users/${auth.id}'); + } + await _streamApiRepository.connectUser(ChatUser(name: input.name, id: auth.id, image: image), token); + } +} diff --git a/chatty/lib/main.dart b/chatty/lib/main.dart new file mode 100644 index 0000000..479c1c8 --- /dev/null +++ b/chatty/lib/main.dart @@ -0,0 +1,50 @@ +import 'package:firebase_core/firebase_core.dart'; +import 'package:stream_chatter/dependencies.dart'; +import 'package:stream_chatter/ui/app_theme_cubit.dart'; +import 'package:stream_chatter/ui/splash/splash_view.dart'; +import 'package:stream_chatter/ui/themes.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + final _streamChatClient = StreamChatClient('c2rynysx9x6b'); + + @override + Widget build(BuildContext context) { + SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]); + + return MultiRepositoryProvider( + providers: buildRepositories(_streamChatClient), + child: BlocProvider( + create: (context) => AppThemeCubit(context.read())..init(), + child: BlocBuilder(builder: (context, snapshot) { + return MaterialApp( + title: 'Stream Chatty', + home: SplashView(), + theme: snapshot ? Themes.themeDark : Themes.themeLight, + builder: (context, child) { + return StreamChat( + child: child, + client: _streamChatClient, + streamChatThemeData: StreamChatThemeData.fromTheme(Theme.of(context)).copyWith( + ownMessageTheme: MessageTheme( + messageBackgroundColor: Theme.of(context).accentColor, + messageText: TextStyle(color: Colors.white), + ), + ), + ); + }, + ); + }), + ), + ); + } +} diff --git a/chatty/lib/navigator_utils.dart b/chatty/lib/navigator_utils.dart new file mode 100644 index 0000000..2d5c27f --- /dev/null +++ b/chatty/lib/navigator_utils.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; + +Future pushToPage(BuildContext context, Widget widget) async { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => widget, + ), + ); +} + +Future pushAndReplaceToPage(BuildContext context, Widget widget) async { + await Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (_) => widget, + ), + ); +} + +Future popAllAndPush(BuildContext context, Widget widget) async { + await Navigator.pushAndRemoveUntil( + context, MaterialPageRoute(builder: (BuildContext context) => widget), ModalRoute.withName('/')); +} diff --git a/chatty/lib/ui/app_theme_cubit.dart b/chatty/lib/ui/app_theme_cubit.dart new file mode 100644 index 0000000..8633aec --- /dev/null +++ b/chatty/lib/ui/app_theme_cubit.dart @@ -0,0 +1,21 @@ +import 'package:stream_chatter/data/persistent_storage_repository.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class AppThemeCubit extends Cubit { + AppThemeCubit(this._persistentStorageRepository) : super(false); + final PersistentStorageRepository _persistentStorageRepository; + + bool _isDark = false; + bool get isDark => _isDark; + + Future init() async { + _isDark = await _persistentStorageRepository.isDarkMode(); + emit(_isDark); + } + + Future updateTheme(bool isDarkMode) async { + _isDark = isDarkMode; + await _persistentStorageRepository.updateDarkMode(isDarkMode); + emit(_isDark); + } +} diff --git a/chatty/lib/ui/common/avatar_image_view.dart b/chatty/lib/ui/common/avatar_image_view.dart new file mode 100644 index 0000000..76ee22a --- /dev/null +++ b/chatty/lib/ui/common/avatar_image_view.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; + +class AvatarImageView extends StatelessWidget { + const AvatarImageView({Key key, this.onTap, this.child}) : super(key: key); + final Widget child; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(20.0), + child: Stack( + clipBehavior: Clip.none, + children: [ + ClipOval( + child: Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.grey[100], + ), + height: 180, + width: 180, + child: child, + ), + ), + Positioned( + bottom: -15, + right: 0, + child: GestureDetector( + onTap: onTap, + child: CircleAvatar( + backgroundColor: Colors.white, + radius: 30, + child: Icon( + Icons.camera_alt_outlined, + color: Colors.black, + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/chatty/lib/ui/common/initial_background_view.dart b/chatty/lib/ui/common/initial_background_view.dart new file mode 100644 index 0000000..4e26bba --- /dev/null +++ b/chatty/lib/ui/common/initial_background_view.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; + +class InitialBackgroundView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Stack( + children: [ + Positioned( + top: 20, + right: -75, + child: Image.asset( + 'assets/icon-top-right.png', + height: 150, + ), + ), + Positioned( + bottom: -50, + right: -50, + child: Image.asset( + 'assets/icon-bottom-right.png', + height: 200, + ), + ), + ], + ); + } +} diff --git a/chatty/lib/ui/common/loading_view.dart b/chatty/lib/ui/common/loading_view.dart new file mode 100644 index 0000000..9e1cded --- /dev/null +++ b/chatty/lib/ui/common/loading_view.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; + +class LoadingView extends StatelessWidget { + final bool isLoading; + final Widget child; + + const LoadingView({ + Key key, + @required this.child, + this.isLoading = false, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Stack( + children: [ + child, + if (isLoading) + Container( + color: Colors.black26, + child: Center( + child: CircularProgressIndicator(), + ), + ), + ], + ), + ); + } +} diff --git a/chatty/lib/ui/common/my_channel_preview.dart b/chatty/lib/ui/common/my_channel_preview.dart new file mode 100644 index 0000000..b561e45 --- /dev/null +++ b/chatty/lib/ui/common/my_channel_preview.dart @@ -0,0 +1,326 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:jiffy/jiffy.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; + +/*Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return StreamChannel( + child: widget.channelWidget, + channel: client, + ); + }, + ), + ); + */ + +/// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/channel_preview.png) +/// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/channel_preview_paint.png) +/// +/// It shows the current [Channel] preview. +/// +/// The widget uses a [StreamBuilder] to render the channel information image as soon as it updates. +/// +/// Usually you don't use this widget as it's the default channel preview used by [ChannelListView]. +/// +/// The widget renders the ui based on the first ancestor of type [StreamChatTheme]. +/// Modify it to change the widget appearance. +class MyChannelPreview extends StatelessWidget { + /// Function called when tapping this widget + final void Function(Channel) onTap; + + /// Function called when long pressing this widget + final void Function(Channel) onLongPress; + + /// Channel displayed + final Channel channel; + + /// The function called when the image is tapped + final VoidCallback onImageTap; + + final String heroTag; + + MyChannelPreview({ + @required this.channel, + Key key, + this.onTap, + this.onLongPress, + this.onImageTap, + this.heroTag, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: channel.isMutedStream, + initialData: channel.isMuted, + builder: (context, snapshot) { + return Opacity( + opacity: snapshot.data ? 0.5 : 1, + child: ListTile( + contentPadding: const EdgeInsets.symmetric( + horizontal: 8, + ), + onTap: () { + if (onTap != null) { + onTap(channel); + } + }, + onLongPress: () { + if (onLongPress != null) { + onLongPress(channel); + } + }, + leading: Material( + child: Hero( + tag: heroTag, + child: StreamChannel( + channel: channel, + child: ChannelImage( + onTap: onImageTap, + ), + ), + ), + ), + title: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: ChannelName( + textStyle: StreamChatTheme.of(context).channelPreviewTheme.title, + ), + ), + StreamBuilder>( + stream: channel.state.membersStream, + initialData: channel.state.members, + builder: (context, snapshot) { + if (!snapshot.hasData || + snapshot.data.isEmpty || + !snapshot.data.any((Member e) => e.user.id == channel.client.state.user.id)) { + return SizedBox(); + } + return ChannelUnreadIndicator( + channel: channel, + ); + }), + ], + ), + subtitle: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible(child: _buildSubtitle(context)), + Builder( + builder: (context) { + final lastMessage = channel.state.messages.lastWhere( + (m) => !m.isDeleted && m.shadowed != true, + orElse: () => null, + ); + if (lastMessage?.user?.id == StreamChat.of(context).user.id) { + return Padding( + padding: const EdgeInsets.only(right: 4.0), + child: SendingIndicator( + message: lastMessage, + size: StreamChatTheme.of(context).channelPreviewTheme.indicatorIconSize, + isMessageRead: channel.state.read + ?.where((element) => element.user.id != channel.client.state.user.id) + ?.where((element) => element.lastRead.isAfter(lastMessage.createdAt)) + ?.isNotEmpty == + true, + ), + ); + } + return SizedBox(); + }, + ), + _buildDate(context), + ], + ), + ), + ); + }); + } + + Widget _buildDate(BuildContext context) { + return StreamBuilder( + stream: channel.lastMessageAtStream, + initialData: channel.lastMessageAt, + builder: (context, snapshot) { + if (!snapshot.hasData) { + return SizedBox(); + } + final lastMessageAt = snapshot.data.toLocal(); + + String stringDate; + final now = DateTime.now(); + + var startOfDay = DateTime(now.year, now.month, now.day); + + if (lastMessageAt.millisecondsSinceEpoch >= startOfDay.millisecondsSinceEpoch) { + stringDate = Jiffy(lastMessageAt.toLocal()).format('HH:mm'); + } else if (lastMessageAt.millisecondsSinceEpoch >= + startOfDay.subtract(Duration(days: 1)).millisecondsSinceEpoch) { + stringDate = 'Yesterday'; + } else if (startOfDay.difference(lastMessageAt).inDays < 7) { + stringDate = Jiffy(lastMessageAt.toLocal()).EEEE; + } else { + stringDate = Jiffy(lastMessageAt.toLocal()).format('dd/MM/yyyy'); + } + + return Text( + stringDate, + style: StreamChatTheme.of(context).channelPreviewTheme.lastMessageAt, + ); + }, + ); + } + + Widget _buildSubtitle(BuildContext context) { + if (channel.isMuted) { + return Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + StreamSvgIcon.mute( + size: 16, + ), + Text( + ' Channel is muted', + style: StreamChatTheme.of(context).channelPreviewTheme.subtitle.copyWith( + color: StreamChatTheme.of(context).channelPreviewTheme.subtitle.color, + ), + ), + ], + ); + } + return TypingIndicator( + channel: channel, + alternativeWidget: _buildLastMessage(context), + style: StreamChatTheme.of(context).channelPreviewTheme.subtitle.copyWith( + color: StreamChatTheme.of(context).channelPreviewTheme.subtitle.color, + ), + ); + } + + Widget _buildLastMessage(BuildContext context) { + return StreamBuilder>( + stream: channel.state.messagesStream, + initialData: channel.state.messages, + builder: (context, snapshot) { + final lastMessage = snapshot.data?.lastWhere((m) => m.shadowed != true && !m.isDeleted, orElse: () => null); + if (lastMessage == null) { + return SizedBox(); + } + + var text = lastMessage.text; + if (lastMessage.attachments != null) { + final parts = [ + ...lastMessage.attachments.map((e) { + if (e.type == 'image') { + return '📷'; + } else if (e.type == 'video') { + return '🎬'; + } else if (e.type == 'giphy') { + return '[GIF]'; + } + return e == lastMessage.attachments.last ? (e.title ?? 'File') : '${e.title ?? 'File'} , '; + }).where((e) => e != null), + lastMessage.text ?? '', + ]; + + text = parts.join(' '); + } + + return Text.rich( + _getDisplayText( + text, + lastMessage.mentionedUsers, + lastMessage.attachments, + StreamChatTheme.of(context).channelPreviewTheme.subtitle.copyWith( + color: StreamChatTheme.of(context).channelPreviewTheme.subtitle.color, + fontStyle: (lastMessage.isSystem || lastMessage.isDeleted) ? FontStyle.italic : FontStyle.normal), + StreamChatTheme.of(context).channelPreviewTheme.subtitle.copyWith( + color: StreamChatTheme.of(context).channelPreviewTheme.subtitle.color, + fontStyle: (lastMessage.isSystem || lastMessage.isDeleted) ? FontStyle.italic : FontStyle.normal, + fontWeight: FontWeight.bold), + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ); + }, + ); + } + + TextSpan _getDisplayText(String text, List mentions, List attachments, TextStyle normalTextStyle, + TextStyle mentionsTextStyle) { + var textList = text.split(' '); + var resList = []; + for (var e in textList) { + if (mentions != null && mentions.isNotEmpty && mentions.any((element) => '@${element.name}' == e)) { + resList.add(TextSpan( + text: '$e ', + style: mentionsTextStyle, + )); + } else if (attachments != null && + attachments.isNotEmpty && + attachments.where((e) => e.title != null).any((element) => element.title == e)) { + resList.add(TextSpan( + text: '$e ', + style: normalTextStyle.copyWith(fontStyle: FontStyle.italic), + )); + } else { + resList.add(TextSpan( + text: e == textList.last ? '$e' : '$e ', + style: normalTextStyle, + )); + } + } + + return TextSpan(children: resList); + } +} + +class ChannelUnreadIndicator extends StatelessWidget { + const ChannelUnreadIndicator({ + Key key, + @required this.channel, + }) : super(key: key); + + final Channel channel; + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: channel.state.unreadCountStream, + initialData: channel.state.unreadCount, + builder: (context, snapshot) { + if (!snapshot.hasData || snapshot.data == 0) { + return SizedBox(); + } + + return Material( + borderRadius: BorderRadius.circular(8), + color: StreamChatTheme.of(context).channelPreviewTheme.unreadCounterColor, + child: Padding( + padding: const EdgeInsets.only( + left: 5.0, + right: 5.0, + top: 2, + bottom: 1, + ), + child: Center( + child: Text( + '${snapshot.data > 99 ? '99+' : snapshot.data}', + style: TextStyle( + fontSize: 11, + color: Colors.white, + ), + ), + ), + ), + ); + }, + ); + } +} diff --git a/chatty/lib/ui/home/chat/chat_view.dart b/chatty/lib/ui/home/chat/chat_view.dart new file mode 100644 index 0000000..b9f4ea7 --- /dev/null +++ b/chatty/lib/ui/home/chat/chat_view.dart @@ -0,0 +1,160 @@ +import 'package:stream_chatter/ui/common/my_channel_preview.dart'; +import 'package:flutter/material.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class ChatView extends StatelessWidget { + @override + Widget build(BuildContext context) { + final textColor = Theme.of(context).appBarTheme.color; + return Scaffold( + backgroundColor: Theme.of(context).canvasColor, + appBar: AppBar( + title: Text( + 'Chats', + style: TextStyle( + fontSize: 24, + color: textColor, + fontWeight: FontWeight.w800, + ), + ), + centerTitle: false, + elevation: 0, + backgroundColor: Theme.of(context).canvasColor, + ), + body: ChannelsBloc( + child: ChannelListView( + filter: { + 'members': { + '\$in': [StreamChat.of(context).user?.id], + } + }, + sort: [SortOption('last_message_at')], + channelPreviewBuilder: (context, channel) { + return Container( + color: Theme.of(context).canvasColor, + child: MyChannelPreview( + channel: channel, + heroTag: channel.id, + onImageTap: () { + String name; + String image; + final currentUser = StreamChat.of(context).client.state.user; + if (channel.isGroup) { + name = channel.extraData['name']; + image = channel.extraData['image']; + } else { + final friend = + channel.state.members.where((element) => element.userId != currentUser.id).first.user; + name = friend.name; + image = friend.extraData['image']; + } + + return Navigator.of(context).push( + PageRouteBuilder( + barrierColor: Colors.black45, + barrierDismissible: true, + opaque: false, + pageBuilder: (context, animation1, _) { + return FadeTransition( + opacity: animation1, + child: ChatDetailView( + channelId: channel.id, + image: image, + name: name, + ), + ); + }), + ); + }, + onTap: (channel) => { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return StreamChannel( + child: ChannelPage(), + channel: channel, + ); + }, + ), + ) + }, + ), + ); + }, + channelWidget: ChannelPage(), + ), + ), + ); + } +} + +class ChannelPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: ChannelHeader(), + body: Column( + children: [ + Expanded( + child: MessageListView(), + ), + MessageInput(), + ], + ), + ); + } +} + +class ChatDetailView extends StatelessWidget { + const ChatDetailView({ + Key key, + this.image, + this.name, + this.channelId, + }) : super(key: key); + + final String image; + final String name; + final String channelId; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: Navigator.of(context).pop, + child: Material( + color: Colors.transparent, + child: Dialog( + backgroundColor: Colors.transparent, + elevation: 0, + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Hero( + tag: channelId, + child: ClipOval( + child: Image.network( + image, + height: 180, + width: 180, + fit: BoxFit.cover, + ), + ), + ), + Text( + name, + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 22, + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/chatty/lib/ui/home/chat/selection/friends_selection_cubit.dart b/chatty/lib/ui/home/chat/selection/friends_selection_cubit.dart new file mode 100644 index 0000000..3f35080 --- /dev/null +++ b/chatty/lib/ui/home/chat/selection/friends_selection_cubit.dart @@ -0,0 +1,38 @@ +import 'package:stream_chatter/data/stream_api_repository.dart'; +import 'package:stream_chatter/domain/models/chat_user.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class ChatUserState { + const ChatUserState(this.chatUser, {this.selected = false}); + final ChatUser chatUser; + final bool selected; +} + +class FriendsSelectionCubit extends Cubit> { + FriendsSelectionCubit(this._streamApiRepository) : super([]); + final StreamApiRepository _streamApiRepository; + + List get selectedUsers => state.where((element) => element.selected).toList(); + + Future init() async { + final chatUsers = (await _streamApiRepository.getChatUsers()).map((e) => ChatUserState(e)).toList(); + emit(chatUsers); + } + + void selectUser(ChatUserState chatUser) { + final index = state.indexWhere((element) => element.chatUser.id == chatUser.chatUser.id); + state[index] = ChatUserState(state[index].chatUser, selected: !chatUser.selected); + emit(List.from(state)); + } + + Future createFriendChannel(ChatUserState chatUserState) async { + return await _streamApiRepository.createSimpleChat(chatUserState.chatUser.id); + } +} + +class FriendsGroupCubit extends Cubit { + FriendsGroupCubit() : super(false); + + void changeToGroup() => emit(!state); +} diff --git a/chatty/lib/ui/home/chat/selection/friends_selection_view.dart b/chatty/lib/ui/home/chat/selection/friends_selection_view.dart new file mode 100644 index 0000000..4cafcef --- /dev/null +++ b/chatty/lib/ui/home/chat/selection/friends_selection_view.dart @@ -0,0 +1,190 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/home/chat/chat_view.dart'; +import 'package:stream_chatter/ui/home/chat/selection/friends_selection_cubit.dart'; +import 'package:stream_chatter/ui/home/chat/selection/group_selection_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class FriendsSelectionView extends StatelessWidget { + void _createFriendChannel(BuildContext context, ChatUserState chatUserState) async { + final channel = await context.read().createFriendChannel(chatUserState); + pushAndReplaceToPage( + context, + Scaffold( + body: StreamChannel( + channel: channel, + child: ChannelPage(), + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + final textColor = Theme.of(context).appBarTheme.color; + final accentColor = Theme.of(context).accentColor; + return MultiBlocProvider( + providers: [ + BlocProvider(create: (context) => FriendsSelectionCubit(context.read())..init()), + BlocProvider(create: (_) => FriendsGroupCubit()), + ], + child: BlocBuilder(builder: (context, isGroup) { + return BlocBuilder>(builder: (context, snapshot) { + final selectedUsers = context.read().selectedUsers; + + return Scaffold( + floatingActionButton: isGroup && selectedUsers.isNotEmpty + ? FloatingActionButton( + child: Icon(Icons.arrow_right_alt_rounded), + onPressed: () { + pushAndReplaceToPage(context, GroupSelectionView(selectedUsers)); + }) + : null, + backgroundColor: Theme.of(context).canvasColor, + body: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 10.0, + vertical: 20, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (isGroup) + Row( + children: [ + BackButton( + onPressed: () { + context.read().changeToGroup(); + }, + ), + Text( + 'New Group', + style: TextStyle( + fontSize: 24, + color: textColor, + fontWeight: FontWeight.w800, + ), + ), + ], + ) + else + Row( + children: [ + BackButton( + onPressed: Navigator.of(context).pop, + ), + Text( + 'People', + style: TextStyle( + fontSize: 24, + color: textColor, + fontWeight: FontWeight.w800, + ), + ), + ], + ), + if (!isGroup) + ListTile( + onTap: context.read().changeToGroup, + leading: CircleAvatar( + backgroundColor: accentColor, + child: Icon(Icons.group_outlined), + ), + title: Text('Create group', style: TextStyle(fontWeight: FontWeight.w700)), + subtitle: Text('Talk with 2 or more contacts'), + ) + else if (isGroup && selectedUsers.isEmpty) + Padding( + padding: const EdgeInsets.only(top: 15.0, left: 20.0, bottom: 20), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CircleAvatar( + backgroundColor: Colors.grey[200], + ), + Text( + 'Add a friend', + style: TextStyle( + fontSize: 12, + color: Colors.grey[500], + ), + ), + ], + ), + ) + else + SizedBox( + height: 100, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: selectedUsers.length, + itemBuilder: (context, index) { + final chatUserState = selectedUsers[index]; + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 13.0), + child: Stack( + clipBehavior: Clip.none, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + CircleAvatar( + radius: 30, + backgroundImage: NetworkImage(chatUserState.chatUser.image), + ), + Text(chatUserState.chatUser.name), + ], + ), + Positioned( + bottom: 40, + right: -4, + child: InkWell( + onTap: () => context.read().selectUser(chatUserState), + child: CircleAvatar( + radius: 9, + backgroundColor: accentColor, + child: Icon(Icons.close_rounded, size: 12), + ), + ), + ), + ], + ), + ); + })), + Expanded( + child: ListView.builder( + itemCount: snapshot.length, + itemBuilder: (context, index) { + final chatUserState = snapshot[index]; + return ListTile( + onTap: () { + _createFriendChannel(context, chatUserState); + }, + leading: CircleAvatar( + backgroundImage: NetworkImage(chatUserState.chatUser.image), + ), + title: Text(chatUserState.chatUser.name), + trailing: isGroup + ? Checkbox( + value: chatUserState.selected, + onChanged: (val) { + print('select user for group'); + context.read().selectUser(chatUserState); + }, + ) + : null, + ); + }, + ), + ), + ], + ), + ), + ); + }); + }), + ); + } +} diff --git a/chatty/lib/ui/home/chat/selection/group_selection_cubit.dart b/chatty/lib/ui/home/chat/selection/group_selection_cubit.dart new file mode 100644 index 0000000..79ac5eb --- /dev/null +++ b/chatty/lib/ui/home/chat/selection/group_selection_cubit.dart @@ -0,0 +1,47 @@ +import 'dart:io'; + +import 'package:stream_chatter/data/image_picker_repository.dart'; +import 'package:stream_chatter/domain/usecases/create_group_usecase.dart'; +import 'package:stream_chatter/ui/home/chat/selection/friends_selection_cubit.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class GroupSelectionState { + const GroupSelectionState( + this.file, { + this.channel, + this.isLoading = false, + }); + final File file; + final Channel channel; + final bool isLoading; +} + +class GroupSelectionCubit extends Cubit { + GroupSelectionCubit( + this.members, + this._createGroupUseCase, + this._imagePickerRepository, + ) : super(GroupSelectionState(null)); + + final nameTextController = TextEditingController(); + final List members; + final CreateGroupUseCase _createGroupUseCase; + final ImagePickerRepository _imagePickerRepository; + + void createGroup() async { + emit(GroupSelectionState(state.file, isLoading: true)); + final channel = await _createGroupUseCase.createGroup(CreateGroupInput( + imageFile: state.file, + members: members.map((e) => e.chatUser.id).toList(), + name: nameTextController.text, + )); + emit(GroupSelectionState(state.file, channel: channel, isLoading: false)); + } + + void pickImage() async { + final image = await _imagePickerRepository.pickImage(); + emit(GroupSelectionState(image)); + } +} diff --git a/chatty/lib/ui/home/chat/selection/group_selection_view.dart b/chatty/lib/ui/home/chat/selection/group_selection_view.dart new file mode 100644 index 0000000..7f336f9 --- /dev/null +++ b/chatty/lib/ui/home/chat/selection/group_selection_view.dart @@ -0,0 +1,117 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/common/avatar_image_view.dart'; +import 'package:stream_chatter/ui/common/loading_view.dart'; +import 'package:stream_chatter/ui/home/chat/chat_view.dart'; +import 'package:stream_chatter/ui/home/chat/selection/friends_selection_cubit.dart'; +import 'package:stream_chatter/ui/home/chat/selection/group_selection_cubit.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class GroupSelectionView extends StatelessWidget { + GroupSelectionView(this.selectedUsers); + + final List selectedUsers; + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => GroupSelectionCubit( + selectedUsers, + context.read(), + context.read(), + ), + child: BlocConsumer(listener: (context, snapshot) { + if (snapshot.channel != null) { + pushAndReplaceToPage( + context, + Scaffold( + body: StreamChannel( + channel: snapshot.channel, + child: ChannelPage(), + ), + ), + ); + } + }, builder: (context, snapshot) { + return LoadingView( + isLoading: snapshot.isLoading, + child: Scaffold( + floatingActionButton: FloatingActionButton( + child: Icon(Icons.arrow_right_alt_rounded), + onPressed: context.read().createGroup, + ), + backgroundColor: Theme.of(context).canvasColor, + appBar: AppBar( + title: Text( + 'New Group', + style: TextStyle( + fontSize: 24, + color: Theme.of(context).appBarTheme.color, + fontWeight: FontWeight.w800, + ), + ), + centerTitle: false, + elevation: 0, + backgroundColor: Theme.of(context).canvasColor, + ), + body: Column( + children: [ + AvatarImageView( + onTap: context.read().pickImage, + child: snapshot?.file != null + ? Image.file( + snapshot?.file, + fit: BoxFit.cover, + ) + : Icon( + Icons.person_outline, + size: 100, + color: Colors.grey[400], + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 50.0, + vertical: 20, + ), + child: TextField( + controller: context.read().nameTextController, + decoration: InputDecoration( + fillColor: Theme.of(context).bottomNavigationBarTheme.backgroundColor, + hintText: 'Name of the group', + hintStyle: TextStyle( + fontSize: 13, + color: Colors.grey[400], + ), + border: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ), + Wrap( + children: List.generate(selectedUsers.length, (index) { + final chatUserState = selectedUsers[index]; + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + CircleAvatar( + radius: 30, + backgroundImage: NetworkImage(chatUserState.chatUser.image), + ), + Text(chatUserState.chatUser.name), + ], + ), + ); + }), + ), + ], + ), + ), + ); + }), + ); + } +} diff --git a/chatty/lib/ui/home/home_cubit.dart b/chatty/lib/ui/home/home_cubit.dart new file mode 100644 index 0000000..a3af8da --- /dev/null +++ b/chatty/lib/ui/home/home_cubit.dart @@ -0,0 +1,7 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; + +class HomeCubit extends Cubit { + HomeCubit() : super(0); + + void onChangeTab(int index) => emit(index); +} diff --git a/chatty/lib/ui/home/home_view.dart b/chatty/lib/ui/home/home_view.dart new file mode 100644 index 0000000..5199415 --- /dev/null +++ b/chatty/lib/ui/home/home_view.dart @@ -0,0 +1,139 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/home/chat/chat_view.dart'; +import 'package:stream_chatter/ui/home/chat/selection/friends_selection_view.dart'; +import 'package:stream_chatter/ui/home/home_cubit.dart'; +import 'package:stream_chatter/ui/home/settings/settings_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class HomeView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Theme.of(context).canvasColor, + body: BlocProvider( + create: (_) => HomeCubit(), + child: Column( + children: [ + Expanded( + child: BlocBuilder(builder: (context, snapshot) { + return IndexedStack( + index: snapshot, + children: [ + ChatView(), + SettingsView(), + ], + ); + }), + ), + HomeNavigationBar(), + ], + ), + ), + ); + } +} + +class HomeNavigationBar extends StatelessWidget { + const HomeNavigationBar({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + final cubit = BlocProvider.of(context, listen: true); + final navigationBarSize = 80.0; + final buttonSize = 56.0; + final buttonMargin = 4.0; + final topMargin = buttonSize / 2 + buttonMargin / 2; + final canvasColor = Theme.of(context).canvasColor; + return Padding( + padding: const EdgeInsets.only(bottom: 20.0), + child: Material( + child: Container( + height: navigationBarSize + topMargin, + width: MediaQuery.of(context).size.width * 0.7, + color: canvasColor, + child: Stack( + children: [ + Positioned.fill( + top: topMargin, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25), + color: Theme.of(context).bottomNavigationBarTheme.backgroundColor, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _HomeNavItem( + text: 'Chats', + iconData: Icons.chat_bubble, + onTap: () => cubit.onChangeTab(0), + selected: cubit.state == 0, + ), + _HomeNavItem( + text: 'Settings', + iconData: Icons.settings, + onTap: () => cubit.onChangeTab(1), + selected: cubit.state == 1, + ), + ], + ), + ), + ), + Align( + alignment: Alignment.topCenter, + child: Container( + decoration: BoxDecoration( + color: canvasColor, + shape: BoxShape.circle, + ), + padding: EdgeInsets.all(buttonMargin / 2), + child: FloatingActionButton( + onPressed: () { + pushToPage(context, FriendsSelectionView()); + }, + child: Icon(Icons.add), + ), + ), + ), + ], + ), + ), + ), + ); + } +} + +class _HomeNavItem extends StatelessWidget { + const _HomeNavItem({ + Key key, + this.iconData, + this.text, + this.onTap, + this.selected = false, + }) : super(key: key); + + final IconData iconData; + final String text; + final VoidCallback onTap; + final bool selected; + + @override + Widget build(BuildContext context) { + final selectedColor = Theme.of(context).bottomNavigationBarTheme.selectedItemColor; + final unselectedColor = Theme.of(context).bottomNavigationBarTheme.unselectedItemColor; + final color = selected ? selectedColor : unselectedColor; + return GestureDetector( + onTap: onTap, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(iconData, color: color), + Text(text, style: TextStyle(color: color)), + ], + ), + ); + } +} diff --git a/chatty/lib/ui/home/settings/settings_cubit.dart b/chatty/lib/ui/home/settings/settings_cubit.dart new file mode 100644 index 0000000..465f04e --- /dev/null +++ b/chatty/lib/ui/home/settings/settings_cubit.dart @@ -0,0 +1,19 @@ +import 'package:stream_chatter/domain/usecases/logout_usecase.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class SettingsSwitchCubit extends Cubit { + SettingsSwitchCubit(bool state) : super(state); + + void onChangeDarkMode(bool isDark) => emit(isDark); +} + +class SettingsLogoutCubit extends Cubit { + SettingsLogoutCubit(this._logoutUseCase) : super(null); + + final LogoutUseCase _logoutUseCase; + + void logOut() async { + await _logoutUseCase.logout(); + emit(null); + } +} diff --git a/chatty/lib/ui/home/settings/settings_view.dart b/chatty/lib/ui/home/settings/settings_view.dart new file mode 100644 index 0000000..77ce96a --- /dev/null +++ b/chatty/lib/ui/home/settings/settings_view.dart @@ -0,0 +1,119 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/app_theme_cubit.dart'; +import 'package:stream_chatter/ui/common/avatar_image_view.dart'; +import 'package:stream_chatter/ui/home/settings/settings_cubit.dart'; +import 'package:stream_chatter/ui/sign_in/sign_in_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class SettingsView extends StatelessWidget { + @override + Widget build(BuildContext context) { + final user = StreamChat.of(context).client.state.user; + final image = user?.extraData['image']; + final textColor = Theme.of(context).appBarTheme.color; + return MultiBlocProvider( + providers: [ + BlocProvider( + create: (_) => SettingsSwitchCubit(context.read().isDark), + ), + BlocProvider( + create: (_) => SettingsLogoutCubit(context.read()), + ), + ], + child: Scaffold( + backgroundColor: Theme.of(context).canvasColor, + appBar: AppBar( + title: Text( + 'Settings', + style: TextStyle( + fontSize: 24, + color: textColor, + fontWeight: FontWeight.w800, + ), + ), + centerTitle: false, + elevation: 0, + backgroundColor: Theme.of(context).canvasColor, + ), + body: Center( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + children: [ + AvatarImageView( + //TODO: implement change avatar + onTap: () => null, + child: image != null + ? Image.network( + image, + fit: BoxFit.cover, + ) + : Icon( + Icons.person_outline, + size: 100, + color: Colors.grey[400], + ), + ), + Text( + user.name, + style: TextStyle( + fontSize: 24, + color: textColor, + fontWeight: FontWeight.w800, + ), + ), + Row( + children: [ + Icon(Icons.nights_stay_outlined), + const SizedBox(width: 10), + Text( + 'Dark Mode', + style: TextStyle( + color: textColor, + ), + ), + Spacer(), + BlocBuilder(builder: (context, snapshot) { + return Switch( + value: snapshot, + onChanged: (val) { + context.read().onChangeDarkMode(val); + context.read().updateTheme(val); + }, + ); + }), + ], + ), + const SizedBox(height: 15), + Builder(builder: (context) { + return GestureDetector( + onTap: context.read().logOut, + child: BlocListener( + listener: (context, snapshot) { + popAllAndPush(context, SignInView()); + }, + child: Row(children: [ + Icon(Icons.logout), + const SizedBox(width: 10), + Text( + 'Logout', + style: TextStyle( + color: textColor, + ), + ), + Spacer(), + Icon(Icons.arrow_right), + ]), + ), + ); + }), + ], + ), + ), + ), + ), + ); + } +} diff --git a/chatty/lib/ui/profile_verify/profile_verify_cubit.dart b/chatty/lib/ui/profile_verify/profile_verify_cubit.dart new file mode 100644 index 0000000..2593f36 --- /dev/null +++ b/chatty/lib/ui/profile_verify/profile_verify_cubit.dart @@ -0,0 +1,44 @@ +import 'dart:io'; + +import 'package:stream_chatter/data/image_picker_repository.dart'; +import 'package:stream_chatter/domain/usecases/profile_sign_in_usecase.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class ProfileState { + const ProfileState( + this.file, { + this.success = false, + this.loading = false, + }); + final File file; + final bool success; + final bool loading; +} + +class ProfileVerifyCubit extends Cubit { + ProfileVerifyCubit( + this._imagePickerRepository, + this._profileSignInUseCase, + ) : super(ProfileState(null)); + + final nameController = TextEditingController(); + final ImagePickerRepository _imagePickerRepository; + final ProfileSignInUseCase _profileSignInUseCase; + + void startChatting() async { + emit(ProfileState(null, loading: true)); + final file = state.file; + final name = nameController.text; + await _profileSignInUseCase.verify(ProfileInput( + imageFile: file, + name: name, + )); + emit(ProfileState(file, success: true, loading: false)); + } + + void pickImage() async { + final file = await _imagePickerRepository.pickImage(); + emit(ProfileState(file)); + } +} diff --git a/chatty/lib/ui/profile_verify/profile_verify_view.dart b/chatty/lib/ui/profile_verify/profile_verify_view.dart new file mode 100644 index 0000000..3a475c3 --- /dev/null +++ b/chatty/lib/ui/profile_verify/profile_verify_view.dart @@ -0,0 +1,108 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/common/avatar_image_view.dart'; +import 'package:stream_chatter/ui/common/loading_view.dart'; +import 'package:stream_chatter/ui/home/home_view.dart'; +import 'package:stream_chatter/ui/profile_verify/profile_verify_cubit.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class ProfileVerifyView extends StatelessWidget { + ProfileVerifyView(); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => ProfileVerifyCubit(context.read(), context.read()), + child: BlocConsumer(listener: (context, snapshot) { + if (snapshot.success) { + pushAndReplaceToPage(context, HomeView()); + } + }, builder: (context, snapshot) { + //refresh the photo + return LoadingView( + isLoading: snapshot.loading, + child: Scaffold( + backgroundColor: Theme.of(context).canvasColor, + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Verify your identity', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.w800, + ), + ), + AvatarImageView( + onTap: context.read().pickImage, + child: snapshot.file != null + ? Image.file( + snapshot.file, + fit: BoxFit.cover, + ) + : Icon( + Icons.person_outline, + size: 100, + color: Colors.grey[400], + ), + ), + Text( + 'Your name', + style: TextStyle( + fontWeight: FontWeight.w700, + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 50.0, + vertical: 20, + ), + child: TextField( + controller: context.read().nameController, + decoration: InputDecoration( + fillColor: Theme.of(context).bottomNavigationBarTheme.backgroundColor, + hintText: 'Or just how people now you', + hintStyle: TextStyle( + fontSize: 13, + color: Colors.grey[400], + ), + border: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ), + Hero( + tag: 'home_hero', + child: Material( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + color: Theme.of(context).accentColor, + child: InkWell( + onTap: () { + context.read().startChatting(); + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 40.0, + vertical: 15, + ), + child: Text( + 'Start chatting now', + style: TextStyle( + color: Colors.white, + ), + ), + )), + ), + ), + ], + ), + ), + ), + ); + }), + ); + } +} diff --git a/chatty/lib/ui/sign_in/sign_in_cubit.dart b/chatty/lib/ui/sign_in/sign_in_cubit.dart new file mode 100644 index 0000000..af3eb17 --- /dev/null +++ b/chatty/lib/ui/sign_in/sign_in_cubit.dart @@ -0,0 +1,30 @@ +import 'package:stream_chatter/domain/exceptions/auth_exception.dart'; +import 'package:stream_chatter/domain/usecases/login_usecase.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +enum SignInState { + none, + existing_user, +} + +class SignInCubit extends Cubit { + SignInCubit( + this._loginUseCase, + ) : super(SignInState.none); + + final LoginUseCase _loginUseCase; + + void signIn() async { + try { + final result = await _loginUseCase.validateLogin(); + if (result) { + emit(SignInState.existing_user); + } + } catch (ex) { + final result = await _loginUseCase.signIn(); + if (result != null) { + emit(SignInState.none); + } + } + } +} diff --git a/chatty/lib/ui/sign_in/sign_in_view.dart b/chatty/lib/ui/sign_in/sign_in_view.dart new file mode 100644 index 0000000..41ff317 --- /dev/null +++ b/chatty/lib/ui/sign_in/sign_in_view.dart @@ -0,0 +1,100 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/home/home_view.dart'; +import 'package:stream_chatter/ui/profile_verify/profile_verify_view.dart'; +import 'package:stream_chatter/ui/sign_in/sign_in_cubit.dart'; +import 'package:stream_chatter/ui/common/initial_background_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class SignInView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => SignInCubit(context.read()), + child: BlocConsumer(listener: (context, snapshot) { + if (snapshot == SignInState.none) { + pushAndReplaceToPage(context, ProfileVerifyView()); + } else { + pushAndReplaceToPage(context, HomeView()); + } + }, builder: (context, snapshot) { + return Scaffold( + backgroundColor: Theme.of(context).canvasColor, + body: Stack(children: [ + InitialBackgroundView(), + Padding( + padding: const EdgeInsets.only(left: 25.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 150), + Hero( + tag: 'logo_hero', + child: Image.asset( + 'assets/logo.png', + height: 50, + ), + ), + const SizedBox(height: 30), + Text( + 'Welcome to\nChatty', + style: TextStyle( + fontSize: 30, + fontWeight: FontWeight.w900, + ), + ), + Padding( + padding: const EdgeInsets.only(top: 8.0, bottom: 40), + child: Text( + 'A platform to chat with users very easily and friendly', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Colors.grey, + ), + ), + ), + Material( + elevation: 2, + shadowColor: Colors.black45, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + color: Theme.of(context).bottomNavigationBarTheme.backgroundColor, + child: InkWell( + onTap: () { + context.read().signIn(); + }, + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset('assets/icon-google.png', height: 20), + const SizedBox(width: 15), + Text('Login with Google'), + ], + ), + ), + ), + ), + Spacer(), + Align( + alignment: Alignment.bottomLeft, + child: Text( + '"in the modern world the\nquality of life is the quality\nof communication', + style: TextStyle( + fontWeight: FontWeight.w400, + color: Colors.grey, + ), + ), + ), + const SizedBox(height: 20), + ], + ), + ), + ]), + ); + }), + ); + } +} diff --git a/chatty/lib/ui/splash/splash_cubit.dart b/chatty/lib/ui/splash/splash_cubit.dart new file mode 100644 index 0000000..1b5fbc9 --- /dev/null +++ b/chatty/lib/ui/splash/splash_cubit.dart @@ -0,0 +1,32 @@ +import 'package:stream_chatter/domain/exceptions/auth_exception.dart'; +import 'package:stream_chatter/domain/usecases/login_usecase.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +enum SplashState { + none, + existing_user, + new_user, +} + +class SplashCubit extends Cubit { + SplashCubit( + this._loginUseCase, + ) : super(SplashState.none); + + final LoginUseCase _loginUseCase; + + void init() async { + try { + final result = await _loginUseCase.validateLogin(); + if (result) { + emit(SplashState.existing_user); + } + } on AuthException catch (ex) { + if (ex.error == AuthErrorCode.not_auth) { + emit(SplashState.none); + } else { + emit(SplashState.new_user); + } + } + } +} diff --git a/chatty/lib/ui/splash/splash_view.dart b/chatty/lib/ui/splash/splash_view.dart new file mode 100644 index 0000000..b9d2ad9 --- /dev/null +++ b/chatty/lib/ui/splash/splash_view.dart @@ -0,0 +1,44 @@ +import 'package:stream_chatter/navigator_utils.dart'; +import 'package:stream_chatter/ui/home/home_view.dart'; +import 'package:stream_chatter/ui/profile_verify/profile_verify_view.dart'; +import 'package:stream_chatter/ui/sign_in/sign_in_view.dart'; +import 'package:stream_chatter/ui/common/initial_background_view.dart'; +import 'package:stream_chatter/ui/splash/splash_cubit.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class SplashView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => SplashCubit(context.read())..init(), + child: BlocListener( + listener: (context, snapshot) { + if (snapshot == SplashState.none) { + pushAndReplaceToPage(context, SignInView()); + } else if (snapshot == SplashState.existing_user) { + pushAndReplaceToPage(context, HomeView()); + } else { + pushAndReplaceToPage(context, ProfileVerifyView()); + } + }, + child: Scaffold( + body: Stack( + children: [ + InitialBackgroundView(), + Center( + child: Hero( + tag: 'logo_hero', + child: Image.asset( + 'assets/logo.png', + height: 100, + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/chatty/lib/ui/themes.dart b/chatty/lib/ui/themes.dart new file mode 100644 index 0000000..c99082d --- /dev/null +++ b/chatty/lib/ui/themes.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; + +const primaryColor = Color(0xFF3883FB); +const backgroundLightColor = Color(0xFFFCFCFC); +const backgroundDarkColor = Color(0xFF1F2026); +const navigationBarLightColor = Colors.white; +const navigationBarDarkColor = Color(0xFF30313C); + +class Themes { + static final themeLight = ThemeData.light().copyWith( + backgroundColor: backgroundLightColor, + // selected color + accentColor: primaryColor, + // floating action button + floatingActionButtonTheme: FloatingActionButtonThemeData( + backgroundColor: primaryColor, + foregroundColor: Colors.white, + ), + // bottom bar + bottomNavigationBarTheme: BottomNavigationBarThemeData( + backgroundColor: navigationBarLightColor, + selectedItemColor: primaryColor, + unselectedItemColor: Colors.grey[200], + ), + // switch active color + toggleableActiveColor: primaryColor, + canvasColor: backgroundLightColor, + appBarTheme: AppBarTheme( + color: Colors.black, + )); + + static final themeDark = ThemeData.dark().copyWith( + backgroundColor: backgroundDarkColor, + // selected color + accentColor: primaryColor, + // floating action button + floatingActionButtonTheme: FloatingActionButtonThemeData( + backgroundColor: primaryColor, + foregroundColor: Colors.white, + ), + // bottom bar + bottomNavigationBarTheme: BottomNavigationBarThemeData( + backgroundColor: navigationBarDarkColor, + selectedItemColor: primaryColor, + unselectedItemColor: Colors.grey[300], + ), + textSelectionColor: Colors.white, + // switch active color + toggleableActiveColor: primaryColor, + canvasColor: backgroundDarkColor, + appBarTheme: AppBarTheme( + color: Colors.white, + )); +} diff --git a/chatty/pubspec.yaml b/chatty/pubspec.yaml new file mode 100644 index 0000000..6327bfd --- /dev/null +++ b/chatty/pubspec.yaml @@ -0,0 +1,40 @@ +name: stream_chatter +description: Chat App implemented using Clean Architecture. +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: ">=2.7.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + flutter_bloc: 6.1.2 + stream_chat_flutter: 1.3.0-beta + uuid: 2.2.2 + + firebase_core: 0.7.0 + google_sign_in: 4.5.9 + firebase_auth: 0.20.0+1 + firebase_storage: 7.0.0 + shared_preferences: 0.5.12+4 + http: any + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + assets: + - assets/ \ No newline at end of file