├── firebase.json
├── functions
├── .gitignore
├── package.json
└── index.js
├── ios
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-50x50@1x.png
│ │ │ ├── Icon-App-50x50@2x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Runner.xcworkspace
│ └── contents.xcworkspacedata
└── Runner.xcodeproj
│ ├── project.xcworkspace
│ └── contents.xcworkspacedata
│ ├── xcshareddata
│ └── xcschemes
│ │ └── Runner.xcscheme
│ └── project.pbxproj
├── android
├── .settings
│ └── org.eclipse.buildship.core.prefs
├── app
│ ├── .settings
│ │ └── org.eclipse.buildship.core.prefs
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── example
│ │ │ │ │ └── video_chat
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── .classpath
│ ├── .project
│ └── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .project
├── settings.gradle
└── build.gradle
├── assets
├── images
│ ├── gc_im3.png
│ ├── campfire.jpg
│ ├── gc_im1.jpeg
│ ├── gc_im2.jpeg
│ ├── gc_im4.jpeg
│ ├── Logoforchat.jpg
│ ├── Logoforchat.png
│ ├── huddleLogo.png
│ ├── cartoonpicture.jpg
│ ├── huddleBackground.png
│ ├── icon_huddlelogo.png
│ ├── huddleLogoInternet.png
│ └── backgroundpictureVIDEO.jpg
└── i18n
│ ├── en.json
│ ├── fr.json
│ └── es.json
├── fonts
├── NotoSerif-Regular.ttf
├── IndieFlower-Regular.ttf
├── Baskervville-Regular.ttf
└── Montserrat
│ ├── Montserrat-Black.ttf
│ ├── Montserrat-Bold.ttf
│ ├── Montserrat-Light.ttf
│ ├── Montserrat-Thin.ttf
│ ├── Montserrat-Italic.ttf
│ ├── Montserrat-Medium.ttf
│ ├── Montserrat-Regular.ttf
│ ├── Montserrat-BoldItalic.ttf
│ ├── Montserrat-ExtraBold.ttf
│ ├── Montserrat-ExtraLight.ttf
│ ├── Montserrat-SemiBold.ttf
│ ├── Montserrat-ThinItalic.ttf
│ ├── Montserrat-BlackItalic.ttf
│ ├── Montserrat-LightItalic.ttf
│ ├── Montserrat-MediumItalic.ttf
│ ├── Montserrat-ExtraBoldItalic.ttf
│ ├── Montserrat-SemiBoldItalic.ttf
│ ├── Montserrat-ExtraLightItalic.ttf
│ └── OFL.txt
├── lib
├── Model
│ ├── message_model.dart
│ ├── user.dart
│ └── group_model.dart
├── snack.dart
├── SQFLITEMODEL
│ ├── db_utils.dart
│ ├── user_SQFLITE.dart
│ └── users_model.dart
├── wrapper.dart
├── GeoLocation
│ ├── getLocation.dart
│ ├── geolocation.dart
│ └── maps.dart
├── Auth
│ ├── auth.dart
│ ├── logsignin_page.dart
│ ├── login.dart
│ └── register.dart
├── i18n
│ └── i18n.dart
├── Notification
│ └── notification.dart
├── main.dart
├── messageui.dart
├── charts.dart
├── page_navigator.dart
├── groups_page.dart
├── video_room.dart
└── chat_page.dart
├── .metadata
├── test
└── widget_test.dart
├── README.md
├── .gitignore
├── pubspec.yaml
└── pubspec.lock
/firebase.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/functions/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
--------------------------------------------------------------------------------
/android/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | connection.project.dir=
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/android/app/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | connection.project.dir=..
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/assets/images/gc_im3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/gc_im3.png
--------------------------------------------------------------------------------
/assets/images/campfire.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/campfire.jpg
--------------------------------------------------------------------------------
/assets/images/gc_im1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/gc_im1.jpeg
--------------------------------------------------------------------------------
/assets/images/gc_im2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/gc_im2.jpeg
--------------------------------------------------------------------------------
/assets/images/gc_im4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/gc_im4.jpeg
--------------------------------------------------------------------------------
/fonts/NotoSerif-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/NotoSerif-Regular.ttf
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | android.useAndroidX=true
2 | android.enableJetifier=true
3 | org.gradle.jvmargs=-Xmx1536M
4 |
5 |
--------------------------------------------------------------------------------
/assets/images/Logoforchat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/Logoforchat.jpg
--------------------------------------------------------------------------------
/assets/images/Logoforchat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/Logoforchat.png
--------------------------------------------------------------------------------
/assets/images/huddleLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/huddleLogo.png
--------------------------------------------------------------------------------
/fonts/IndieFlower-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/IndieFlower-Regular.ttf
--------------------------------------------------------------------------------
/assets/images/cartoonpicture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/cartoonpicture.jpg
--------------------------------------------------------------------------------
/fonts/Baskervville-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Baskervville-Regular.ttf
--------------------------------------------------------------------------------
/assets/images/huddleBackground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/huddleBackground.png
--------------------------------------------------------------------------------
/assets/images/icon_huddlelogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/icon_huddlelogo.png
--------------------------------------------------------------------------------
/assets/images/huddleLogoInternet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/huddleLogoInternet.png
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Black.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Bold.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Light.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Thin.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Italic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Medium.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-Regular.ttf
--------------------------------------------------------------------------------
/assets/images/backgroundpictureVIDEO.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/assets/images/backgroundpictureVIDEO.jpg
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-BoldItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-ExtraBold.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-ExtraLight.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-SemiBold.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-ThinItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-BlackItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-LightItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-MediumItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/fonts/Montserrat/Montserrat-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeremy-friesen/flutter-video-chat/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/Model/message_model.dart:
--------------------------------------------------------------------------------
1 | class Message {
2 | //final Group group;
3 | //final User sender;
4 | final String text;
5 | final bool isReacted;
6 | var lastMessageTime;
7 |
8 | Message({this.text, this.isReacted, this.lastMessageTime});
9 |
10 | }
--------------------------------------------------------------------------------
/lib/snack.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | //in its own file to call from multiple classes
4 | void snack(BuildContext context, String message){
5 | Scaffold.of(context).showSnackBar(
6 | SnackBar(
7 | content: Text(message),
8 | ),
9 | );
10 | }
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
7 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 1aedbb1835bd6eb44550293d57d4d124f19901f0
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/android/app/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | 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.
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/video_chat/MainActivity.kt:
--------------------------------------------------------------------------------
1 | /* Replace package name with your own */
2 | package com.example.example
3 |
4 | import android.os.Bundle
5 |
6 | import io.flutter.app.FlutterActivity
7 | import io.flutter.plugins.GeneratedPluginRegistrant
8 |
9 | class MainActivity: FlutterActivity() {
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | GeneratedPluginRegistrant.registerWith(this)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/android/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | android
4 | Project android created by Buildship.
5 |
6 |
7 |
8 |
9 | org.eclipse.buildship.core.gradleprojectbuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.buildship.core.gradleprojectnature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/lib/SQFLITEMODEL/db_utils.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:sqflite/sqflite.dart';
3 | import 'package:path/path.dart' as path;
4 |
5 | //Just used for sqflite
6 |
7 | class DBUtils{
8 | static Future init() async {
9 | return openDatabase(
10 | path.join(await getDatabasesPath(), 'user_items.db'),
11 | onCreate: (db, version) {
12 | if (version > 1) {
13 | // downgrade path
14 | }
15 | db.execute('CREATE TABLE user_items(id INTEGER PRIMARY KEY, userName TEXT, email TEXT, age INT)');
16 | },
17 | version: 1,
18 | );
19 | }
20 | }
--------------------------------------------------------------------------------
/functions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "functions",
3 | "description": "Cloud Functions for Firebase",
4 | "scripts": {
5 | "serve": "firebase serve --only functions",
6 | "shell": "firebase functions:shell",
7 | "start": "npm run shell",
8 | "deploy": "firebase deploy --only functions",
9 | "logs": "firebase functions:log"
10 | },
11 | "engines": {
12 | "node": "8"
13 | },
14 | "dependencies": {
15 | "firebase-admin": "^8.6.0",
16 | "firebase-functions": "^3.3.0"
17 | },
18 | "devDependencies": {
19 | "firebase-functions-test": "^0.1.6"
20 | },
21 | "private": true
22 | }
23 |
--------------------------------------------------------------------------------
/lib/wrapper.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:video_chat/Auth/logsignin_page.dart';
4 | import 'Model/user.dart';
5 |
6 | class Wrapper extends StatelessWidget {
7 | final Widget homePage;
8 |
9 | Wrapper({this.homePage});
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 |
14 | final user = Provider.of(context);
15 |
16 | //Checking if the user is logged in or not
17 | if(user == null) {
18 | return LogsignIn();
19 | }else{
20 | print(user.uid);
21 | return homePage;
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/android/app/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | app
4 | Project app created by Buildship.
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.eclipse.buildship.core.gradleprojectbuilder
15 |
16 |
17 |
18 |
19 |
20 | org.eclipse.jdt.core.javanature
21 | org.eclipse.buildship.core.gradleprojectnature
22 |
23 |
24 |
--------------------------------------------------------------------------------
/lib/GeoLocation/getLocation.dart:
--------------------------------------------------------------------------------
1 | import 'package:geolocator/geolocator.dart';
2 | import 'package:latlong/latlong.dart';
3 |
4 | import 'dart:async';
5 | import 'maps.dart';
6 |
7 | Future getLocation() async{
8 | var geolocator = Geolocator();
9 | Position currentLocation;
10 |
11 | try{
12 | currentLocation = await geolocator.getCurrentPosition(
13 | desiredAccuracy: LocationAccuracy.best,
14 | );
15 | } catch (e) {
16 | currentLocation = null;
17 | }
18 |
19 | mapcontroller.move(LatLng(currentLocation.latitude, currentLocation.longitude), 16.0);
20 |
21 | print('in _getLocation');
22 | print('lat: ${currentLocation.latitude} long: ${currentLocation.longitude} ');
23 |
24 | return currentLocation;
25 | }
--------------------------------------------------------------------------------
/lib/GeoLocation/geolocation.dart:
--------------------------------------------------------------------------------
1 | import 'package:geolocator/geolocator.dart';
2 |
3 | String sayLocation(){
4 | var location = Geolocator();
5 | var message = '';
6 |
7 | location.getCurrentPosition(
8 | desiredAccuracy: LocationAccuracy.best,
9 | ).then((Position userLocation){
10 |
11 | location.placemarkFromCoordinates(
12 | userLocation.latitude,
13 | userLocation.longitude,
14 | ).then((List places) {
15 | print('Reverse geocoding results: ');
16 | for (Placemark place in places){
17 | message = ('\t${place.name},${place.subThoroughfare},${place.thoroughfare},${place.locality}, ${place.subAdministrativeArea}');
18 | }
19 | });
20 | });
21 |
22 | return message;
23 | }
24 |
--------------------------------------------------------------------------------
/lib/Model/user.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:intl/intl.dart';
3 |
4 | class User{
5 | String email;
6 | final String uid;
7 | String userName;
8 | String picture;
9 |
10 | //This is to check if the user has its unique user name from firebase
11 | User({this.uid, this.email, this.userName, this.picture});
12 | }
13 |
14 | String formatTimeOfDay(TimeOfDay tod) {
15 | final now = new DateTime.now();
16 | final dt = DateTime(now.year, now.month, now.day, tod.hour, tod.minute);
17 | final format = DateFormat.jm(); //"6:00 AM"
18 | return format.format(dt);
19 | }
20 |
21 | class UserModel {
22 | final int id;
23 | final String iconPath;
24 | final String userName;
25 |
26 | UserModel({this.id, this.iconPath, this.userName});
27 | }
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.0'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.3.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | classpath 'com.google.gms:google-services:4.2.0'
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | google()
18 | jcenter()
19 | }
20 | }
21 |
22 | rootProject.buildDir = '../build'
23 | subprojects {
24 | project.buildDir = "${rootProject.buildDir}/${project.name}"
25 | }
26 | subprojects {
27 | project.evaluationDependsOn(':app')
28 | }
29 |
30 | task clean(type: Delete) {
31 | delete rootProject.buildDir
32 | }
33 |
--------------------------------------------------------------------------------
/lib/SQFLITEMODEL/user_SQFLITE.dart:
--------------------------------------------------------------------------------
1 | class User{
2 | //Creating the variables first
3 | int userName;
4 | int email;
5 | String age;
6 |
7 | //Making a Constructor
8 | User({
9 | this.userName,
10 | this.email,
11 | this.age,
12 | });
13 |
14 | User.fromMap(Map map){
15 | this.userName = map['userName'];
16 | this.email = map['email'];
17 | this.age = map['age'];
18 | }
19 |
20 | //Putting these elements to a map
21 | Map toMap(){
22 | return{
23 | 'id': this.userName,
24 | 'sid': this.email,
25 | 'grades' : this.age,
26 | };
27 | }
28 |
29 | //Overriding the toString function
30 | @override
31 | String toString(){
32 | return 'Grades{id: $userName, sid: $email, grades: $age}';
33 | }
34 |
35 | }// Grade
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:video_chat/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/assets/i18n/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "app": {
3 | "groups": "Groups",
4 | "newgroup": "New Group",
5 | "groupname": "Group Name",
6 | "creategroup": "Create Group",
7 | "extras": "Extras",
8 | "maps": "Maps",
9 | "analytics": "Analytics",
10 | "logout": "Logout",
11 | "successfullysignedout": "Successfully Signed Out",
12 | "settings": "Settings",
13 | "writeamessage": "Write a Message",
14 | "chatanaylitics": "Chat Anaylitics",
15 | "timespentonproject": "Time Spent on Project",
16 | "register": "Register",
17 | "joinus": "Join us!",
18 | "email": "Email",
19 | "login": "Login",
20 | "enteranemail": "Enter an Email",
21 | "password": "Password",
22 | "enterapassword": "Enter a Password",
23 | "pleaseenteravalidemail": "Please enter a valid email",
24 | "succesfullyregisteredanaccount": "Succesfully Registered an account!",
25 | "welcomeback": "Welcome Back",
26 | "loginsuccessful": "Login Successful",
27 | "emailpasswordincorrect": "Email or Password Incorrect",
28 | "connectwithothers": "Connect with Others",
29 | "chat": "Chat",
30 | "selectgroup": "<- Select a Group from the groups page\n(Swipe Right)",
31 | "usersettings": "User Settings"
32 | }
33 | }
--------------------------------------------------------------------------------
/assets/i18n/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "app": {
3 | "groups": "Groupes",
4 | "newgroup": "Nouveau Groupe",
5 | "groupname": "Nom de Groupe",
6 | "creategroup": "Créer un Groupe",
7 | "extras": "Extras",
8 | "maps": "Plans",
9 | "analytics": "Analytique",
10 | "logout": "Connectez - Out",
11 | "successfullysignedout": "Déconnexion Réussie",
12 | "settings": "Paramètres",
13 | "writeamessage": "Écrire un Message",
14 | "chatanaylitics": "Bavarder Analytique",
15 | "timespentonproject": "Temps Passé sur le Projet",
16 | "register": "Registre",
17 | "joinus": "Rejoignez-nous!",
18 | "email": "E-mail",
19 | "login": "Ouvrir une Session",
20 | "enteranemail": "Entrez un E-mail",
21 | "password": "Mot de Passe",
22 | "enterapassword": "Entrer un mot de Passe",
23 | "pleaseenteravalidemail": "Veuillez Saisir un E-mail Valide",
24 | "succesfullyregisteredanaccount": "Un Compte Enregistré Avec Succès!",
25 | "welcomeback": "Nous Saluons le Retour",
26 | "loginsuccessful": "Connexion Réussie",
27 | "emailpasswordincorrect": "E-mail ou mot de Pssse Incorrect",
28 | "connectwithothers": "Se Connecter avec les Autres",
29 | "chat": "Bavarder",
30 | "selectgroup": "<- Sélectionnez un Groupe dans la Page des Groupes\n(Balayez vers la Droite)",
31 | "usersettings": "Paramètres utilisateur"
32 | }
33 | }
--------------------------------------------------------------------------------
/assets/i18n/es.json:
--------------------------------------------------------------------------------
1 | {
2 | "app": {
3 | "groups": "Grupos",
4 | "newgroup": "Nuevo Grupo",
5 | "groupname": "Nombre del Grupo",
6 | "creategroup": "Crear Grupo",
7 | "extras": "Extras",
8 | "maps": "Mapas",
9 | "analytics": "Analítica",
10 | "logout": "Cerrar Sesión",
11 | "successfullysignedout": "Salió Exitosamente",
12 | "settings": "Configuración",
13 | "writeamessage": "Escribir un Mensaje",
14 | "chatanaylitics": "Análisis de la Conversación",
15 | "timespentonproject": "Tiempo Invertido en el Proyecto",
16 | "register": "Registrarse",
17 | "joinus": "¡Únete a Nosotros!",
18 | "email": "Correo Electrónico",
19 | "login": "Iniciar Sesión",
20 | "enteranemail": "Ingrese un Correo Electrónico",
21 | "password": "Contraseña",
22 | "enterapassword": "Ingrese una Contraseña",
23 | "pleaseenteravalidemail": "Ingrese un Correo Electrónico Válido",
24 | "succesfullyregisteredanaccount": "¡Se registró una cuenta con éxito!",
25 | "welcomeback": "Bienvenido de Ruevo",
26 | "loginsuccessful": "Inicio de Sesión Exitoso",
27 | "emailpasswordincorrect": "Correo Electrónico o Contraseña Incorrecta",
28 | "connectwithothers": "Conectarse con Otros",
29 | "chat": "Charla",
30 | "selectgroup": "<- Seleccione un Grupo de la Página de Grupos\n(Deslizar Hacia la Derecha)",
31 | "usersettings": "Ajustes de usuario"
32 | }
33 | }
--------------------------------------------------------------------------------
/lib/Auth/auth.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 | import 'package:video_chat/Model/user.dart';
3 |
4 | class AuthService{
5 |
6 | final FirebaseAuth _auth = FirebaseAuth.instance;
7 |
8 | //creating a user object based on the firebase user class
9 | User userFromFirebaseUser(FirebaseUser user){
10 | return user != null ? User(uid: user.uid, email: user.email) : null;
11 | }
12 |
13 | //Allowing us to see if the user is signed in or not
14 | Stream get user{
15 | return _auth.onAuthStateChanged.map(userFromFirebaseUser);
16 | }
17 |
18 | //Sign in with email & password
19 | Future signInWithEmailAndPassword(String email, String password) async{
20 | try{
21 | AuthResult result = await _auth.signInWithEmailAndPassword(email: email, password: password);
22 | FirebaseUser user = result.user;
23 | return userFromFirebaseUser(user);
24 | }catch(e){
25 | print(e.toString());
26 | return null;
27 | }
28 | }
29 | //Register with email & password
30 | Future registerWithEmailAndPassword(String email, String password) async{
31 | try{
32 | AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
33 | FirebaseUser user = result.user;
34 | return userFromFirebaseUser(user);
35 | }catch(e){
36 | print(e.toString());
37 | return null;
38 | }
39 | }
40 |
41 | // sign out
42 | Future signOut() async{
43 | try{
44 | return await _auth.signOut();
45 | }catch(e){
46 | print(e.toString());
47 | return null;
48 | }
49 | }
50 | }
51 |
52 |
53 |
--------------------------------------------------------------------------------
/lib/Model/group_model.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:cloud_firestore/cloud_firestore.dart';
4 |
5 | class GroupModel {
6 | final databaseReference = Firestore.instance;
7 |
8 | Future insertGroup(Group group) async {
9 | await databaseReference.collection("Groups")
10 | .document(group.groupId).setData(group.toMap());
11 | }
12 |
13 | Future updateGroupName(Group group) async {
14 | await databaseReference.collection('Groups').document(group.groupId).updateData({
15 | "Name":group.groupName,
16 | });
17 | return 1;
18 | }
19 |
20 | Future deleteTodo(String sid) async {
21 | try{
22 | databaseReference.collection('Groups')
23 | .document(sid).delete();
24 | }catch(e){
25 | print(e);
26 | }
27 | return 0;
28 | }
29 |
30 | void getAllGroups() {
31 | databaseReference.collection('Groups')
32 | .getDocuments().then((QuerySnapshot snapshot){
33 | snapshot.documents.forEach((f)=> print('{f.data}'));
34 | });
35 | }
36 | }
37 |
38 | class Group{
39 | String groupId;
40 | //final String groupIconPath;
41 | String groupName;
42 | //var lastMessageTime;
43 | List memberIDs;
44 |
45 | DocumentReference documentReference;
46 |
47 | Group({this.groupId, this.groupName, this.memberIDs});
48 |
49 | Group.fromMap(Map map,{this.documentReference}) {
50 | this.groupId = map['id'];
51 | this.groupName = map['name'];
52 | this.memberIDs = map['member_ids'];
53 | }
54 |
55 | Map toMap() {
56 | return {
57 | 'id': this.groupId,
58 | 'name': this.groupName,
59 | 'member_ids': this.memberIDs,
60 | };
61 | }
62 | }
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | video_chat
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Flutter Video Chat w/ Agora.io
2 |
3 | ## Collaborators
4 |
5 | - [Jeremy Friesen](https://github.com/jeremydavidfriesen)
6 | - [Tamilselvan Balasuntharam](https://github.com/MegaTlash)
7 | - [Harry Thasarathan](https://github.com/Harry-Thasarathan)
8 | - [Spencer Denford](https://github.com/spencerdenford)
9 |
10 | flutter_video_chat is a simple front-end combining text-messaging (using Google Firebase) and video chat (using Agora.io for Flutter)!!!!
11 |
12 | 
13 |
14 | ## Setup
15 |
16 | ### Firebase
17 | - In the cloned repository, replace the package names with your own
18 | - applicationId in build.gradle (android\app)
19 | - package in MainActivity.kt (android\app\src\main\kotlin\com\example\video_chat)
20 | - package in all three AndroidManifest.xml files (android\app\src\main, android\app\src\debug, android\app\src\profile)
21 |
22 | - go to https://console.firebase.google.com/
23 | - create a project
24 | - register project for android (use the package name you chose earlier)
25 | - Download 'google-services.json'
26 | - move 'google-services.json' to android > app
27 | - change pubspec.yaml and both gradle files to include firebase
28 | - run 'flutter pub get' to import dependencies
29 |
30 | - in the firebase console, under "Develop" select "Authentication"
31 | - Click "Set up sign-in method"
32 | - Enable the "Email/Password" sign-in method
33 |
34 | - in the firebase console, under "Develop" select Database
35 | - Click "Create Database"
36 | - Accept defaults
37 |
38 | ### Agora.io
39 |
40 | - go to Agora's website, https://www.agora.io/
41 | - sign up
42 | - create project
43 | - copy App ID and set the const APP_ID in lib\video_room.dart
44 |
--------------------------------------------------------------------------------
/functions/index.js:
--------------------------------------------------------------------------------
1 | const functions = require('firebase-functions')
2 | const admin = require('firebase-admin')
3 | admin.initializeApp()
4 |
5 | exports.sendNotification = functions.firestore
6 | .document('Groups/{groupId1}/{groupId2}/{message}')
7 | .onCreate((snap, context) => {
8 | console.log('----------------start function--------------------')
9 |
10 | const doc = snap.data()
11 | console.log(doc)
12 |
13 | const idFrom = doc.idFrom
14 | const idTo = doc.idTo
15 | const contentMessage = doc.text
16 |
17 | // Get push token user to (receive)
18 | admin
19 | .firestore()
20 | .collection('Users')
21 | .get()
22 | .then(querySnapshot => {
23 | querySnapshot.forEach(userTo => {
24 | console.log(`Found user to: ${userTo.data().username}`)
25 | if (userTo.data().pushToken) {
26 | // Get info user from (sent)
27 | const payload = {
28 | notification: {
29 | title: `You have a message from "${doc.username}"`,
30 | body: contentMessage,
31 | badge: '1',
32 | sound: 'default'
33 | }
34 | }
35 | // Let push to the target device
36 | admin
37 | .messaging()
38 | .sendToDevice(userTo.data().pushToken, payload)
39 | .then(response => {
40 | console.log('Successfully sent message:', response)
41 | })
42 | .catch(error => {
43 | console.log('Error sending message:', error)
44 | })
45 | } else {
46 | console.log('Can not find pushToken target user')
47 | }
48 | })
49 | })
50 | return null
51 | })
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | .dart_tool/
26 | .flutter-plugins
27 | .packages
28 | .pub-cache/
29 | .pub/
30 | /build/
31 |
32 | # Android related
33 | **/android/**/gradle-wrapper.jar
34 | **/android/.gradle
35 | **/android/captures/
36 | **/android/gradlew
37 | **/android/gradlew.bat
38 | **/android/local.properties
39 | **/android/**/GeneratedPluginRegistrant.java
40 |
41 | # iOS/XCode related
42 | **/ios/**/*.mode1v3
43 | **/ios/**/*.mode2v3
44 | **/ios/**/*.moved-aside
45 | **/ios/**/*.pbxuser
46 | **/ios/**/*.perspectivev3
47 | **/ios/**/*sync/
48 | **/ios/**/.sconsign.dblite
49 | **/ios/**/.tags*
50 | **/ios/**/.vagrant/
51 | **/ios/**/DerivedData/
52 | **/ios/**/Icon?
53 | **/ios/**/Pods/
54 | **/ios/**/.symlinks/
55 | **/ios/**/profile
56 | **/ios/**/xcuserdata
57 | **/ios/.generated/
58 | **/ios/Flutter/App.framework
59 | **/ios/Flutter/Flutter.framework
60 | **/ios/Flutter/Generated.xcconfig
61 | **/ios/Flutter/app.flx
62 | **/ios/Flutter/app.zip
63 | **/ios/Flutter/flutter_assets/
64 | **/ios/Flutter/flutter_export_environment.sh
65 | **/ios/ServiceDefinitions.json
66 | **/ios/Runner/GeneratedPluginRegistrant.*
67 |
68 | # Exceptions to above rules.
69 | !**/ios/**/default.mode1v3
70 | !**/ios/**/default.mode2v3
71 | !**/ios/**/default.pbxuser
72 | !**/ios/**/default.perspectivev3
73 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
74 |
--------------------------------------------------------------------------------
/lib/SQFLITEMODEL/users_model.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:sqflite/sqflite.dart';
3 | import 'db_utils.dart';
4 | import 'user_SQFLITE.dart';
5 | //import 'package:lab045/grades.dart';
6 |
7 | class GradesModel {
8 | //For Inserting into the database
9 | Future insertUsers(User users) async {
10 | final db = await DBUtils.init();
11 | return await db.insert(
12 | 'user_items',
13 | users.toMap(),
14 | conflictAlgorithm: ConflictAlgorithm.replace,
15 | );
16 | }
17 |
18 | //For updating Grades in the database
19 | Future updateUsers(User users) async {
20 | final db = await DBUtils.init();
21 | return await db.update('user_items', users.toMap(),
22 | where: 'userName = ?', whereArgs: [users.userName]);
23 | }
24 |
25 | //For deleteing A student in the databse
26 | Future deleteUsers(int id) async {
27 | final db = await DBUtils.init();
28 | return await db.delete(
29 | 'user_items',
30 | where: 'userName = ?',
31 | whereArgs: [id],
32 | );
33 | }
34 |
35 | //Getting all the grades
36 | Future> getAllUsers() async {
37 | final db = await DBUtils.init();
38 | List