├── ios
├── 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-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.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
│ ├── GoogleService-Info.plist
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── firebase_app_id_file.json
├── .gitignore
└── Podfile
├── .firebaserc
├── assets
├── members.png
├── no_hive.png
├── hive_work.png
├── discussion.png
└── onboarding.gif
├── android
├── gradle.properties
├── app
│ ├── 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
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night
│ │ │ │ │ └── styles.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── jerondev
│ │ │ │ │ └── studyhive
│ │ │ │ │ └── studyhive
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── google-services.json
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── settings.gradle
└── build.gradle
├── lib
├── src
│ ├── hive
│ │ ├── presentation
│ │ │ ├── manager
│ │ │ │ ├── join_controller.dart
│ │ │ │ ├── questions_controller.dart
│ │ │ │ ├── discussions_controller.dart
│ │ │ │ ├── poll_controller.dart
│ │ │ │ ├── hive_controller.dart
│ │ │ │ └── create_controller.dart
│ │ │ ├── bindings
│ │ │ │ ├── join_binding.dart
│ │ │ │ ├── create_binding.dart
│ │ │ │ └── hive_binding.dart
│ │ │ └── pages
│ │ │ │ ├── members.dart
│ │ │ │ ├── new_material.dart
│ │ │ │ ├── new_poll.dart
│ │ │ │ ├── create.dart
│ │ │ │ ├── new_discussion.dart
│ │ │ │ ├── new_question.dart
│ │ │ │ └── hive.dart
│ │ ├── domain
│ │ │ ├── entities
│ │ │ │ ├── media.dart
│ │ │ │ ├── media.g.dart
│ │ │ │ ├── topic.dart
│ │ │ │ ├── topic.g.dart
│ │ │ │ ├── hive.dart
│ │ │ │ ├── hive.g.dart
│ │ │ │ ├── message.dart
│ │ │ │ ├── message.g.dart
│ │ │ │ └── media.freezed.dart
│ │ │ ├── use_cases
│ │ │ │ ├── details.dart
│ │ │ │ ├── create.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── post_message.dart
│ │ │ └── repositories
│ │ │ │ └── hive_repository.dart
│ │ └── data
│ │ │ ├── hive_service.dart
│ │ │ ├── local
│ │ │ └── data_sources
│ │ │ │ └── hive_local_database.dart
│ │ │ ├── remote
│ │ │ └── data_sources
│ │ │ │ └── hive_remote_database.dart
│ │ │ └── repositories
│ │ │ └── hive_repository_impl.dart
│ ├── profile
│ │ ├── presentation
│ │ │ ├── manager
│ │ │ │ ├── profile_controller.dart
│ │ │ │ ├── profile_binding.dart
│ │ │ │ └── setup_controller.dart
│ │ │ └── pages
│ │ │ │ ├── setup.dart
│ │ │ │ └── profile.dart
│ │ ├── domain
│ │ │ ├── use_cases
│ │ │ │ ├── update.dart
│ │ │ │ └── retrieve.dart
│ │ │ ├── repositories
│ │ │ │ └── profile_repository.dart
│ │ │ └── entities
│ │ │ │ ├── profile.dart
│ │ │ │ └── profile.g.dart
│ │ └── data
│ │ │ ├── services
│ │ │ └── profile_service.dart
│ │ │ ├── local
│ │ │ └── data_sources
│ │ │ │ └── profile_local_database.dart
│ │ │ ├── remote
│ │ │ └── data_sources
│ │ │ │ └── profile_remote_database.dart
│ │ │ └── repositories
│ │ │ └── profile_repository_impl.dart
│ ├── home
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── home_binding.dart
│ │ │ └── home_controller.dart
│ │ │ └── pages
│ │ │ └── home.dart
│ ├── auth
│ │ ├── presentation
│ │ │ ├── manager
│ │ │ │ ├── auth_binding.dart
│ │ │ │ └── auth_controller.dart
│ │ │ └── pages
│ │ │ │ └── phone_auth.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── auth_repository.dart
│ │ └── data
│ │ │ ├── services
│ │ │ └── auth_service.dart
│ │ │ └── repositories
│ │ │ └── auth_repository_impl.dart
│ ├── onboarding
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── onboarding_binding.dart
│ │ │ └── onboarding_controller.dart
│ │ │ └── pages
│ │ │ └── onboarding.dart
│ └── settings
│ │ └── presentation
│ │ ├── manager
│ │ ├── settings_binding.dart
│ │ └── settings_controller.dart
│ │ └── widgets
│ │ ├── user_avatar.dart
│ │ └── no_avatar.dart
├── shared
│ ├── utils
│ │ ├── copy_to_clipboard.dart
│ │ ├── launch_url.dart
│ │ ├── upload_image.dart
│ │ ├── pick_file.dart
│ │ ├── generate_file_icon.dart
│ │ └── pick_image.dart
│ ├── extensions
│ │ ├── strings.dart
│ │ └── buttons.dart
│ ├── usecase
│ │ └── usecase.dart
│ ├── error
│ │ ├── failure.dart
│ │ └── exception.dart
│ ├── network
│ │ └── network.dart
│ ├── ui
│ │ ├── empty_state.dart
│ │ ├── custom_image.dart
│ │ ├── custom_avatar.dart
│ │ ├── spinner.dart
│ │ ├── custom_listtile.dart
│ │ ├── snackbars.dart
│ │ └── custom_bottomsheet.dart
│ └── validation
│ │ └── validator.dart
├── generated
│ └── assets.dart
├── routes
│ ├── app_routes.dart
│ └── app_pages.dart
├── services
│ └── init_services.dart
├── main.dart
├── firebase_options.dart
└── translations
│ └── translation.dart
├── storage.rules
├── firestore.rules
├── firebase.json
├── README.md
├── .gitignore
├── .metadata
├── analysis_options.yaml
└── pubspec.yaml
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "studyhive-og"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/assets/members.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/HEAD/assets/members.png
--------------------------------------------------------------------------------
/assets/no_hive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/HEAD/assets/no_hive.png
--------------------------------------------------------------------------------
/assets/hive_work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/HEAD/assets/hive_work.png
--------------------------------------------------------------------------------
/assets/discussion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/HEAD/assets/discussion.png
--------------------------------------------------------------------------------
/assets/onboarding.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/HEAD/assets/onboarding.gif
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/lib/src/hive/presentation/manager/join_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | class JoinHiveController extends GetxController {}
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/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/jeronasiedu/studyhive/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jeronasiedu/studyhive/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/jeronasiedu/studyhive/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/jeronasiedu/studyhive/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/storage.rules:
--------------------------------------------------------------------------------
1 | rules_version = '2';
2 | service firebase.storage {
3 | match /b/{bucket}/o {
4 | match /{allPaths=**} {
5 | allow read, write: if request.auth != null;
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/shared/utils/copy_to_clipboard.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/services.dart';
2 |
3 | void copyToClipboard(String text) async {
4 | ClipboardData data = ClipboardData(text: text);
5 | await Clipboard.setData(data);
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/jerondev/studyhive/studyhive/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.jerondev.studyhive.studyhive
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/firestore.rules:
--------------------------------------------------------------------------------
1 |
2 | rules_version = '2';
3 | service cloud.firestore {
4 | match /databases/{database}/documents {
5 | match /{document=**} {
6 | allow read, write: if request.auth != null;
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/lib/src/profile/presentation/manager/profile_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '../../domain/entities/profile.dart';
4 |
5 | class ProfileController extends GetxController {
6 | final Profile profile = Get.arguments;
7 | }
8 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
6 |
--------------------------------------------------------------------------------
/lib/src/home/presentation/manager/home_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import 'home_controller.dart';
4 |
5 | class HomeBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(() => HomeController());
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/lib/src/auth/presentation/manager/auth_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import 'auth_controller.dart';
4 |
5 | class AuthBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(() => AuthController(Get.find()));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/lib/src/hive/presentation/bindings/join_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '../manager/join_controller.dart';
4 |
5 | class JoinHiveBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(() => JoinHiveController());
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/firebase_app_id_file.json:
--------------------------------------------------------------------------------
1 | {
2 | "file_generated_by": "FlutterFire CLI",
3 | "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
4 | "GOOGLE_APP_ID": "1:480976755846:ios:1c8abd08c81a5382c40507",
5 | "FIREBASE_PROJECT_ID": "studyhive-og",
6 | "GCM_SENDER_ID": "480976755846"
7 | }
--------------------------------------------------------------------------------
/lib/src/onboarding/presentation/manager/onboarding_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import 'onboarding_controller.dart';
4 |
5 | class OnboardingBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(() => OnboardingController(Get.find()));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/src/settings/presentation/manager/settings_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 | import 'package:studyhive/src/settings/presentation/manager/settings_controller.dart';
3 |
4 | class SettingsBinding extends Bindings {
5 | @override
6 | void dependencies() {
7 | Get.lazyPut(() => SettingsController());
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/lib/generated/assets.dart:
--------------------------------------------------------------------------------
1 | class Assets {
2 | Assets._();
3 |
4 | static const String discussion = 'assets/discussion.png';
5 | static const String hiveWork = 'assets/hive_work.png';
6 | static const String onboarding = 'assets/onboarding.gif';
7 | static const String members = 'assets/members.png';
8 | static const String noHive = 'assets/no_hive.png';
9 | }
10 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/lib/shared/utils/launch_url.dart:
--------------------------------------------------------------------------------
1 | import 'package:url_launcher/url_launcher.dart';
2 |
3 | import '../ui/snackbars.dart';
4 |
5 | void openLink(String url) async {
6 | if (!url.startsWith("http")) {
7 | url = "https://$url";
8 | }
9 | if (!await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication)) {
10 | showErrorSnackbar(message: "Couldn't open link \n try copying it instead");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/routes/app_routes.dart:
--------------------------------------------------------------------------------
1 | part of './app_pages.dart';
2 |
3 | abstract class AppRoutes {
4 | static const onboarding = '/';
5 | static const home = '/home';
6 | static const phoneAuth = '/phoneAuth';
7 | static const createHive = '/createHive';
8 | static const settings = '/settings';
9 | static const setupProfile = '/setupProfile';
10 | static const profile = '/profile';
11 | static const hive = '/hive/:id';
12 | }
13 |
--------------------------------------------------------------------------------
/lib/shared/extensions/strings.dart:
--------------------------------------------------------------------------------
1 | extension StringInitialsExtension on String {
2 | String get initials {
3 | List names = split(" ");
4 | String initials = "";
5 |
6 | int numWords = names.length > 2 ? 2 : names.length; // use at most two names
7 |
8 | for (int i = 0; i < numWords; i++) {
9 | String initial = names[i][0].toUpperCase();
10 | initials += initial;
11 | }
12 |
13 | return initials;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/lib/src/hive/presentation/bindings/create_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 | import 'package:studyhive/src/hive/domain/use_cases/create.dart';
3 | import 'package:studyhive/src/hive/presentation/manager/create_controller.dart';
4 |
5 | class CreateHiveBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(() => CreateHive(Get.find()));
9 | Get.lazyPut(() => CreateHiveController(Get.find()));
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "storage": {
3 | "rules": "storage.rules"
4 | },
5 | "firestore": {
6 | "rules": "firestore.rules"
7 | },
8 | "emulators": {
9 | "auth": {
10 | "port": 9099
11 | },
12 | "firestore": {
13 | "port": 8080
14 | },
15 | "storage": {
16 | "port": 9199
17 | },
18 | "ui": {
19 | "enabled": true,
20 | "port": 4000
21 | },
22 | "singleProjectMode": true
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lib/src/profile/presentation/manager/profile_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 | import 'package:studyhive/src/profile/presentation/manager/profile_controller.dart';
3 | import 'package:studyhive/src/profile/presentation/manager/setup_controller.dart';
4 |
5 | class ProfileBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(() => ProfileController());
9 | Get.lazyPut(() => SetupProfileController());
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/lib/src/hive/domain/entities/media.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 | import 'package:studyhive/shared/utils/pick_file.dart';
3 |
4 | part 'media.freezed.dart';
5 | part 'media.g.dart';
6 |
7 | @freezed
8 | class Media with _$Media {
9 | const factory Media({
10 | required String url,
11 | required FileTypeOption type,
12 | }) = _Media;
13 | factory Media.fromJson(Map json) => _$MediaFromJson(json);
14 | }
15 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
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/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/src/hive/presentation/pages/members.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:studyhive/generated/assets.dart';
3 |
4 | import '../../../../shared/ui/empty_state.dart';
5 |
6 | class MembersPage extends StatelessWidget {
7 | const MembersPage({Key? key}) : super(key: key);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return const EmptyState(
12 | text: 'Invite your friends to join your hive',
13 | asset: Assets.members,
14 | );
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/shared/usecase/usecase.dart:
--------------------------------------------------------------------------------
1 | import 'package:dartz/dartz.dart';
2 |
3 | import '../error/failure.dart';
4 |
5 | /// Blue print for all useCases in the app
6 | /// Mainly for usecases uses [Either]
7 | abstract class UseCase {
8 | /// Contract call method
9 | Future> call(Params params);
10 | }
11 |
12 | /// create a generic params for usecases
13 | class Params {
14 | const Params(this.data);
15 |
16 | final T data;
17 | }
18 |
19 | class NoParams {
20 | const NoParams();
21 | }
22 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/shared/error/failure.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 |
3 | import 'package:equatable/equatable.dart';
4 |
5 | /// Generic Failure handler
6 | class Failure extends Equatable {
7 | /// Failure constructor
8 | const Failure(this.message);
9 |
10 | /// Error message
11 | final String message;
12 |
13 | @override
14 | String toString() => _utf8convert(message);
15 |
16 | static String _utf8convert(String text) {
17 | final bytes = text.codeUnits;
18 | return utf8.decode(bytes);
19 | }
20 |
21 | @override
22 | List