├── .gitignore
├── .metadata
├── .vscode
└── settings.json
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle.kts
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── cookethflow
│ │ │ │ └── cookethflow
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── 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-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle.kts
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle.kts
├── assets
├── fonts
│ ├── Frederik-Black-BF645d9bff26630.otf
│ ├── Frederik-BlackItalic-BF645d9bffac1de.otf
│ ├── Frederik-Bold-BF645d9bff85e69.otf
│ ├── Frederik-BoldItalic-BF645d9bff9bf5e.otf
│ ├── Frederik-DemiBold-BF645d9bff7b6ff.otf
│ ├── Frederik-DemiBoldItalic-BF645d9bff9aca4.otf
│ ├── Frederik-ExtraBold-BF645d9bffc1a5a.otf
│ ├── Frederik-ExtraBoldItalic-BF645d9bffa90f8.otf
│ ├── Frederik-Heavy-BF645d9bffbbbdd.otf
│ ├── Frederik-HeavyItalic-BF645d9bffd6fec.otf
│ ├── Frederik-Light-BF645d9bffbac92.otf
│ ├── Frederik-LightItalic-BF645d9bffa496e.otf
│ ├── Frederik-Medium-BF645d9bffbc329.otf
│ ├── Frederik-MediumItalic-BF645d9bff71c45.otf
│ ├── Frederik-Regular-BF645d9bffaa893.otf
│ ├── Frederik-RegularItalic-BF645d9bffb230a.otf
│ ├── Frederik-Thin-BF645d9bffb3edf.otf
│ ├── Frederik-ThinItalic-BF645d9bff5ad07.otf
│ ├── Frederik-UltraLight-BF645d9bffae149.otf
│ └── Frederik-UltraLightItalic-BF645d9bff6ec22.otf
└── images
│ ├── Frame 400.png
│ ├── Frame 401.png
│ ├── Frame 402.png
│ └── pfp.png
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── 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-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
└── RunnerTests
│ └── RunnerTests.swift
├── lib
├── app.dart
├── core
│ ├── helpers
│ │ ├── date_time_helper.dart
│ │ ├── input_validators.dart
│ │ ├── responsive_layout.helper.dart
│ │ └── ui_helper.dart
│ ├── providers
│ │ └── supabase_provider.dart
│ ├── router
│ │ ├── app_route_config.dart
│ │ └── app_route_const.dart
│ ├── theme
│ │ ├── app_theme.dart
│ │ └── colors.dart
│ └── utils
│ │ ├── consts.dart
│ │ ├── enums.dart
│ │ └── state_handler.dart
├── features
│ ├── auth
│ │ ├── pages
│ │ │ ├── desktop
│ │ │ │ ├── login_desktop.dart
│ │ │ │ └── signup_desktop.dart
│ │ │ ├── login.dart
│ │ │ ├── mobile
│ │ │ │ ├── login_mobile.dart
│ │ │ │ └── signup_mobile.dart
│ │ │ ├── signup.dart
│ │ │ └── tablet
│ │ │ │ ├── login_tablet.dart
│ │ │ │ └── signup_tablet.dart
│ │ ├── providers
│ │ │ └── auth_provider.dart
│ │ └── widgets
│ │ │ ├── login_form.dart
│ │ │ ├── signup_form.dart
│ │ │ └── slider.dart
│ ├── dashboard
│ │ ├── pages
│ │ │ ├── dashboard.dart
│ │ │ ├── desktop
│ │ │ │ └── dashboard_desktop.dart
│ │ │ └── mobile
│ │ │ │ └── dashboard_mobile.dart
│ │ ├── providers
│ │ │ └── dashboard_provider.dart
│ │ ├── services
│ │ │ ├── file_service.dart
│ │ │ └── platform_file_service.dart
│ │ └── widgets
│ │ │ ├── add_project_dialogue.dart
│ │ │ ├── build_project.dart
│ │ │ ├── dashboard_drawer.dart
│ │ │ ├── delete_account.dart
│ │ │ ├── edit_profile.dart
│ │ │ ├── project_card.dart
│ │ │ ├── start_project.dart
│ │ │ └── upgrade_plan.dart
│ ├── models
│ │ ├── canvas_models
│ │ │ ├── canvas_object.dart
│ │ │ ├── canvas_painter.dart
│ │ │ ├── objects
│ │ │ │ ├── circle_object.dart
│ │ │ │ ├── cylinder_object.dart
│ │ │ │ ├── diamond_object.dart
│ │ │ │ ├── inverted_triangle_object.dart
│ │ │ │ ├── parallelogram_object.dart
│ │ │ │ ├── rectangle_object.dart
│ │ │ │ ├── rounded_square_object.dart
│ │ │ │ ├── square_object.dart
│ │ │ │ └── triangle_object.dart
│ │ │ ├── synced_object.dart
│ │ │ └── user_cursor.dart
│ │ ├── connection_model.dart
│ │ ├── node_model.dart
│ │ ├── user_model.dart
│ │ └── workspace_model.dart
│ └── workspace
│ │ ├── pages
│ │ ├── canvas_page.dart
│ │ ├── desktop
│ │ │ └── workspace_desktop.dart
│ │ ├── mobile
│ │ │ └── workspace_mobile.dart
│ │ ├── tablet
│ │ │ └── workspace_tablet.dart
│ │ └── workspace.dart
│ │ ├── providers
│ │ └── workspace_provider.dart
│ │ ├── services
│ │ └── export_serice.dart
│ │ └── widgets
│ │ ├── colour_picker_bg.dart
│ │ ├── connector_customizer.dart
│ │ ├── demo_color_picker.dart
│ │ ├── export_project_button.dart
│ │ ├── icons_widget.dart
│ │ ├── node_colour.dart
│ │ ├── node_picker.dart
│ │ ├── sticky_notes.dart
│ │ ├── toolbar.dart
│ │ ├── undo_redo_button.dart
│ │ ├── vertical_divider.dart
│ │ ├── workspace_drawer.dart
│ │ └── zoom_control_button.dart
└── main.dart
├── linux
├── .gitignore
├── CMakeLists.txt
├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner
│ ├── CMakeLists.txt
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
└── RunnerTests
│ └── RunnerTests.swift
├── pubspec.lock
├── pubspec.yaml
├── test
└── widget_test.dart
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── index.html
└── manifest.json
└── windows
├── .gitignore
├── CMakeLists.txt
├── flutter
├── CMakeLists.txt
├── generated_plugin_registrant.cc
├── generated_plugin_registrant.h
└── generated_plugins.cmake
└── runner
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── resources
└── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .build/
9 | .buildlog/
10 | .history
11 | .svn/
12 | .swiftpm/
13 | migrate_working_dir/
14 |
15 | # IntelliJ related
16 | *.iml
17 | *.ipr
18 | *.iws
19 | .idea/
20 |
21 | # The .vscode folder contains launch configuration and tasks you configure in
22 | # VS Code which you may wish to be included in version control, so this line
23 | # is commented out by default.
24 | #.vscode/
25 |
26 | # Flutter/Dart/Pub related
27 | **/doc/api/
28 | **/ios/Flutter/.last_build_id
29 | .dart_tool/
30 | .flutter-plugins
31 | .flutter-plugins-dependencies
32 | .pub-cache/
33 | .pub/
34 | /build/
35 |
36 | # Symbolication related
37 | app.*.symbols
38 |
39 | # Obfuscation related
40 | app.*.map.json
41 |
42 | # Android Studio will place build artifacts here
43 | /android/app/debug
44 | /android/app/profile
45 | /android/app/release
46 | run.sh
47 | run.ps1
48 | run-release.sh
49 | run-release.ps1
--------------------------------------------------------------------------------
/.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: "c23637390482d4cf9598c3ce3f2be31aa7332daf"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
17 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
18 | - platform: android
19 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
20 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
21 | - platform: ios
22 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
23 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
24 | - platform: linux
25 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
26 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
27 | - platform: macos
28 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
29 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
30 | - platform: web
31 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
32 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
33 | - platform: windows
34 | create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
35 | base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
36 |
37 | # User provided section
38 |
39 | # List of Local paths (relative to this file) that should be
40 | # ignored by the migrate tool.
41 | #
42 | # Files that are not part of the templates will be ignored by default.
43 | unmanaged_files:
44 | - 'lib/main.dart'
45 | - 'ios/Runner.xcodeproj/project.pbxproj'
46 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cmake.sourceDirectory": "/home/teewrath/work/Flutter/cookethflow/linux"
3 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cookethflow
2 |
3 | A new Flutter project.
4 |
5 | ## Getting Started
6 |
7 | This project is a starting point for a Flutter application.
8 |
9 | A few resources to get you started ifthis is your first Flutter project:
10 |
11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
13 |
14 | For help getting started with Flutter development, view the
15 | [online documentation](https://docs.flutter.dev/), which offers tutorials,
16 | samples, guidance on mobile development, and a full API reference.
17 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at https://dart.dev/lints.
17 | #
18 | # Instead of disabling a lint rule for the entire project in the
19 | # section below, it can also be suppressed for a single line of code
20 | # or a specific dart file by using the `// ignore: name_of_lint` and
21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
22 | # producing the lint.
23 | rules:
24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
26 |
27 | # Additional information about this file can be found at
28 | # https://dart.dev/guides/language/analysis-options
29 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 | .cxx/
9 |
10 | # Remember to never publicly share your keystore.
11 | # See https://flutter.dev/to/reference-keystore
12 | key.properties
13 | **/*.keystore
14 | **/*.jks
15 |
--------------------------------------------------------------------------------
/android/app/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("com.android.application")
3 | id("kotlin-android")
4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
5 | id("dev.flutter.flutter-gradle-plugin")
6 | }
7 |
8 | android {
9 | namespace = "com.cookethflow.cookethflow"
10 | compileSdk = flutter.compileSdkVersion
11 | ndkVersion = flutter.ndkVersion
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_11
15 | targetCompatibility = JavaVersion.VERSION_11
16 | }
17 |
18 | kotlinOptions {
19 | jvmTarget = JavaVersion.VERSION_11.toString()
20 | }
21 |
22 | defaultConfig {
23 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
24 | applicationId = "com.cookethflow.cookethflow"
25 | // You can update the following values to match your application needs.
26 | // For more information, see: https://flutter.dev/to/review-gradle-config.
27 | minSdk = flutter.minSdkVersion
28 | targetSdk = flutter.targetSdkVersion
29 | versionCode = flutter.versionCode
30 | versionName = flutter.versionName
31 | }
32 |
33 | buildTypes {
34 | release {
35 | // TODO: Add your own signing config for the release build.
36 | // Signing with the debug keys for now, so `flutter run --release` works.
37 | signingConfig = signingConfigs.getByName("debug")
38 | }
39 | }
40 | }
41 |
42 | flutter {
43 | source = "../.."
44 | }
45 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
15 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
33 |
34 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/cookethflow/cookethflow/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.cookethflow.cookethflow
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity : FlutterActivity()
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle.kts:
--------------------------------------------------------------------------------
1 | allprojects {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | }
7 |
8 | val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
9 | rootProject.layout.buildDirectory.value(newBuildDir)
10 |
11 | subprojects {
12 | val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
13 | project.layout.buildDirectory.value(newSubprojectBuildDir)
14 | }
15 | subprojects {
16 | project.evaluationDependsOn(":app")
17 | }
18 |
19 | tasks.register("clean") {
20 | delete(rootProject.layout.buildDirectory)
21 | }
22 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/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-8.10.2-all.zip
6 |
--------------------------------------------------------------------------------
/android/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | val flutterSdkPath = run {
3 | val properties = java.util.Properties()
4 | file("local.properties").inputStream().use { properties.load(it) }
5 | val flutterSdkPath = properties.getProperty("flutter.sdk")
6 | require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
7 | flutterSdkPath
8 | }
9 |
10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
11 |
12 | repositories {
13 | google()
14 | mavenCentral()
15 | gradlePluginPortal()
16 | }
17 | }
18 |
19 | plugins {
20 | id("dev.flutter.flutter-plugin-loader") version "1.0.0"
21 | id("com.android.application") version "8.7.0" apply false
22 | id("org.jetbrains.kotlin.android") version "1.8.22" apply false
23 | }
24 |
25 | include(":app")
26 |
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Black-BF645d9bff26630.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Black-BF645d9bff26630.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-BlackItalic-BF645d9bffac1de.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-BlackItalic-BF645d9bffac1de.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Bold-BF645d9bff85e69.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Bold-BF645d9bff85e69.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-BoldItalic-BF645d9bff9bf5e.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-BoldItalic-BF645d9bff9bf5e.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-DemiBold-BF645d9bff7b6ff.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-DemiBold-BF645d9bff7b6ff.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-DemiBoldItalic-BF645d9bff9aca4.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-DemiBoldItalic-BF645d9bff9aca4.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-ExtraBold-BF645d9bffc1a5a.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-ExtraBold-BF645d9bffc1a5a.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-ExtraBoldItalic-BF645d9bffa90f8.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-ExtraBoldItalic-BF645d9bffa90f8.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Heavy-BF645d9bffbbbdd.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Heavy-BF645d9bffbbbdd.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-HeavyItalic-BF645d9bffd6fec.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-HeavyItalic-BF645d9bffd6fec.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Light-BF645d9bffbac92.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Light-BF645d9bffbac92.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-LightItalic-BF645d9bffa496e.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-LightItalic-BF645d9bffa496e.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Medium-BF645d9bffbc329.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Medium-BF645d9bffbc329.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-MediumItalic-BF645d9bff71c45.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-MediumItalic-BF645d9bff71c45.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Regular-BF645d9bffaa893.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Regular-BF645d9bffaa893.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-RegularItalic-BF645d9bffb230a.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-RegularItalic-BF645d9bffb230a.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-Thin-BF645d9bffb3edf.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-Thin-BF645d9bffb3edf.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-ThinItalic-BF645d9bff5ad07.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-ThinItalic-BF645d9bff5ad07.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-UltraLight-BF645d9bffae149.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-UltraLight-BF645d9bffae149.otf
--------------------------------------------------------------------------------
/assets/fonts/Frederik-UltraLightItalic-BF645d9bff6ec22.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/fonts/Frederik-UltraLightItalic-BF645d9bff6ec22.otf
--------------------------------------------------------------------------------
/assets/images/Frame 400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/images/Frame 400.png
--------------------------------------------------------------------------------
/assets/images/Frame 401.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/images/Frame 401.png
--------------------------------------------------------------------------------
/assets/images/Frame 402.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/images/Frame 402.png
--------------------------------------------------------------------------------
/assets/images/pfp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/assets/images/pfp.png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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 | 12.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.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/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
43 |
49 |
50 |
51 |
52 |
53 |
64 |
66 |
72 |
73 |
74 |
75 |
81 |
83 |
89 |
90 |
91 |
92 |
94 |
95 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 |
4 | @main
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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/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/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CookethOrg/Cooketh-Flow/263ad8f52d916dfaf7c50e83638687dca2dcd9d7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.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 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/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 | CFBundleDisplayName
8 | Cookethflow
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | cookethflow
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | CADisableMinimumFrameDurationOnPhone
45 |
46 | UIApplicationSupportsIndirectInputEvents
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/providers/supabase_provider.dart';
2 | import 'package:cookethflow/core/router/app_route_config.dart';
3 | import 'package:cookethflow/core/theme/app_theme.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:flutter_screenutil/flutter_screenutil.dart';
6 | import 'package:provider/provider.dart';
7 |
8 | class MyApp extends StatelessWidget {
9 | const MyApp({super.key});
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return ScreenUtilInit(
14 | designSize: const Size(1920, 1080),
15 | minTextAdapt: true,
16 | splitScreenMode: true,
17 | child: Consumer(
18 | builder: (context, themeProvider, _) {
19 | return MaterialApp.router(
20 | theme: AppTheme.light(),
21 | darkTheme: AppTheme.dark(),
22 | themeMode: themeProvider.isDark ? ThemeMode.dark : ThemeMode.light,
23 | debugShowCheckedModeBanner: false,
24 | routerConfig: AppRouteConfig.returnRouter(),
25 | );
26 | },
27 | ),
28 | );
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/core/helpers/date_time_helper.dart:
--------------------------------------------------------------------------------
1 | class DateTimeHelper {
2 | String formatLastEdited(DateTime? lastEdited) {
3 | if (lastEdited == null) return "Edited Just Now";
4 | final now = DateTime.now();
5 | final difference = now.difference(lastEdited);
6 |
7 | if (difference.inDays > 0) {
8 | return 'Edited ${difference.inDays} day${difference.inDays == 1 ? '' : 's'} ago';
9 | } else if (difference.inHours > 0) {
10 | return 'Edited ${difference.inHours} hour${difference.inHours == 1 ? '' : 's'} ago';
11 | } else if (difference.inMinutes > 0) {
12 | return 'Edited ${difference.inMinutes} minute${difference.inMinutes == 1 ? '' : 's'} ago';
13 | } else {
14 | return 'Edited just now';
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/lib/core/helpers/input_validators.dart:
--------------------------------------------------------------------------------
1 | final RegExp _usernamePattern = RegExp(
2 | r'^[a-zA-Z][a-zA-Z0-9_.]{2,19}$',
3 | ); // Username: starts with letter, 3-20 chars
4 |
5 | final RegExp _emailPattern = RegExp(
6 | r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$',
7 | caseSensitive: false,
8 | );
9 |
10 | String? validateUserName(String? value) {
11 | if (value == null || value.isEmpty) {
12 | return "Username is required.";
13 | }
14 |
15 | if (value.length < 3) {
16 | return "Username must be at least 3 characters";
17 | }
18 |
19 | if (value.length > 20) {
20 | return "Username cannot exceed 20 characters";
21 | }
22 |
23 | if (!_usernamePattern.hasMatch(value)) {
24 | return 'Username must:\n'
25 | '• Start with a letter (a-z, A-Z)\n'
26 | '• Contain only letters, numbers, _ or .\n'
27 | '• Be 3-20 characters long';
28 | }
29 | return null;
30 | }
31 |
32 | String? validatePassword(String? value) {
33 | if (value == null || value.isEmpty) {
34 | return "Password is required.";
35 | }
36 |
37 | if (value.length < 8) {
38 | return 'Password must be at least 8 characters';
39 | }
40 |
41 | if (!value.contains(RegExp(r'[A-Z]'))) {
42 | return 'Password must contain at least one uppercase letter';
43 | }
44 |
45 | if (!value.contains(RegExp(r'[a-z]'))) {
46 | return 'Password must contain at least one lowercase letter';
47 | }
48 |
49 | if (!value.contains(RegExp(r'[0-9]'))) {
50 | return 'Password must contain at least one number (0-9)';
51 | }
52 |
53 | if (!value.contains(RegExp(r'[._#]'))) {
54 | return 'Password must contain at least one special character (., _, or #)';
55 | }
56 |
57 | // Optional: Check for common weak passwords
58 | if (value.contains(RegExp(r'(123456|password|qwerty|abc123)'))) {
59 | return 'Password is too common or weak';
60 | }
61 |
62 | return null;
63 | }
64 |
65 | String? validateEmail(String? value) {
66 | if (value == null || value.isEmpty) {
67 | return 'Email is required';
68 | }
69 |
70 | if (!_emailPattern.hasMatch(value)) {
71 | return 'Please enter a valid email address\n'
72 | 'Example: yourname@example.com';
73 | }
74 |
75 | // Optional: Disallow disposable emails
76 | if (value.endsWith('@tempmail.com') ||
77 | value.endsWith('@mailinator.com')) {
78 | return 'Disposable email addresses are not allowed';
79 | }
80 |
81 | return null;
82 | }
--------------------------------------------------------------------------------
/lib/core/helpers/responsive_layout.helper.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | enum DeviceType { mobile, tab, desktop }
4 |
5 | class ResponsiveLayoutHelper {
6 | static const int mobileMaxWidth = 375;
7 | static const int tabletMaxWidth = 768;
8 | static const int desktopMaxWidth = 1024;
9 |
10 | static DeviceType getDeviceType(BuildContext context) {
11 | final deviceSize = MediaQuery.sizeOf(context);
12 | final deviceWidth = deviceSize.width;
13 | if (deviceWidth > ResponsiveLayoutHelper.desktopMaxWidth) {
14 | return DeviceType.desktop;
15 | }
16 |
17 | if (deviceWidth > ResponsiveLayoutHelper.tabletMaxWidth) {
18 | return DeviceType.tab;
19 | }
20 |
21 | return DeviceType.mobile;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/core/helpers/ui_helper.dart:
--------------------------------------------------------------------------------
1 | double canvasDimension = 5.0;
--------------------------------------------------------------------------------
/lib/core/router/app_route_config.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/router/app_route_const.dart';
2 | import 'package:cookethflow/features/auth/pages/login.dart';
3 | import 'package:cookethflow/features/auth/pages/signup.dart';
4 | import 'package:cookethflow/features/dashboard/pages/dashboard.dart';
5 | import 'package:cookethflow/features/workspace/pages/canvas_page.dart';
6 | import 'package:cookethflow/features/workspace/pages/workspace.dart';
7 | import 'package:flutter/material.dart';
8 | import 'package:go_router/go_router.dart';
9 |
10 | class AppRouteConfig {
11 | static GoRouter returnRouter() {
12 | return GoRouter(
13 | // observers: [
14 | // (route)=> debugPrint('Route Changed: $(route)'),
15 | // ],
16 | initialLocation: RoutesPath.loginScreen,
17 | routes: [
18 | GoRoute(
19 | path: RoutesPath.loginScreen,
20 | name: RouteName.loginScreen,
21 | pageBuilder: (context, state) => NoTransitionPage(child: LoginPage()),
22 | ),
23 | GoRoute(
24 | path: RoutesPath.signUpScreen,
25 | name: RouteName.signUpScreen,
26 | pageBuilder:
27 | (context, state) => NoTransitionPage(child: SignupPage()),
28 | ),
29 | GoRoute(
30 | path: RoutesPath.dashboard,
31 | name: RouteName.dashboard,
32 | pageBuilder:
33 | (context, state) => NoTransitionPage(child: DashboardPage()),
34 | ),
35 | GoRoute(
36 | path: RoutesPath.workspace,
37 | name: RouteName.workspace,
38 | pageBuilder:
39 | (context, state) => NoTransitionPage(child: WorkspacePage()),
40 | ),
41 | GoRoute(
42 | path: RoutesPath.canvasPage,
43 | name: RouteName.canvasPage,
44 | pageBuilder: (context, state) {
45 | return NoTransitionPage(child: CanvasPage());
46 | },
47 | ),
48 | ],
49 | redirect: (BuildContext context, GoRouterState state) {
50 | // Add your authentication logic here if needed
51 | return null;
52 | },
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/lib/core/router/app_route_const.dart:
--------------------------------------------------------------------------------
1 | class RoutesPath {
2 | // static const String splashScreen = "/";
3 | static const String signUpScreen = "/signup";
4 | static const String loginScreen = "/";
5 | static const String dashboard = "/dashboard";
6 | static const String workspace = "/workspace";
7 | static const String canvasPage = "/canvas";
8 | }
9 |
10 | class RouteName {
11 | static const String splashScreen = "splash";
12 | static const String signUpScreen = "signup";
13 | static const String loginScreen = "login";
14 | static const String dashboard = "dashboard";
15 | static const String workspace = "workspace";
16 | static const String canvasPage = "canvas";
17 | }
18 |
--------------------------------------------------------------------------------
/lib/core/theme/app_theme.dart:
--------------------------------------------------------------------------------
1 | import "package:cookethflow/core/theme/colors.dart";
2 | import "package:flutter/cupertino.dart";
3 | import "package:flutter/material.dart";
4 | import "package:flutter_screenutil/flutter_screenutil.dart";
5 |
6 | class AppTheme {
7 | static ThemeData light() {
8 | return ThemeData(useMaterial3: false, fontFamily: 'Frederik').copyWith(
9 | scaffoldBackgroundColor: scaffoldColor,
10 | primaryColorDark: primaryColor,
11 | primaryColor: primaryColor,
12 | primaryColorLight: primaryColor,
13 | colorScheme: const ColorScheme.light().copyWith(
14 | primary: primaryColor,
15 | secondary: secondaryColors[0], // Using green as secondary color
16 | ),
17 |
18 | textTheme: TextTheme(
19 | displayLarge: TextStyle(
20 | fontSize: 50.sp,
21 | fontWeight: FontWeight.w500,
22 | color: Colors.black,
23 | ),
24 | displayMedium: TextStyle(
25 | fontSize: 35.sp,
26 | fontWeight: FontWeight.w600,
27 | color: Colors.black,
28 | ),
29 | displaySmall: TextStyle(
30 | fontSize: 18,
31 | fontWeight: FontWeight.w600,
32 | color: Colors.black,
33 | ),
34 | headlineMedium: TextStyle(fontSize: 14, color: Colors.black),
35 | headlineSmall: TextStyle(fontSize: 12, color: Colors.black),
36 | titleLarge: TextStyle(fontSize: 10, color: Colors.black),
37 | bodyLarge: TextStyle(fontSize: 14, color: Colors.black),
38 | bodyMedium: TextStyle(fontSize: 12, color: Colors.black),
39 | bodySmall: TextStyle(fontSize: 10, color: Colors.black),
40 | ),
41 | );
42 | }
43 |
44 | static ThemeData dark() {
45 | return ThemeData(
46 | useMaterial3: false,
47 | fontFamily: 'Frederik',
48 | brightness: Brightness.dark,
49 | ).copyWith(
50 | scaffoldBackgroundColor: scaffoldDarkColor,
51 | primaryColorDark: primaryColor,
52 | primaryColor: primaryColor,
53 | primaryColorLight: primaryColor,
54 | colorScheme: const ColorScheme.dark().copyWith(
55 | primary: primaryColor,
56 | secondary:
57 | secondaryColors[4], // Using cyan as secondary color for dark mode
58 | ),
59 |
60 | textTheme: TextTheme(
61 | displayLarge: TextStyle(
62 | fontSize: 50.sp,
63 | fontWeight: FontWeight.w500,
64 | color: Colors.white,
65 | ),
66 | displayMedium: TextStyle(
67 | fontSize: 35.sp,
68 | fontWeight: FontWeight.w600,
69 | color: Colors.white,
70 | ),
71 | displaySmall: TextStyle(
72 | fontSize: 18,
73 | fontWeight: FontWeight.w600,
74 | color: Colors.white,
75 | ),
76 | headlineMedium: TextStyle(fontSize: 14, color: Colors.white),
77 | headlineSmall: TextStyle(fontSize: 12, color: Colors.white),
78 | titleLarge: TextStyle(fontSize: 10, color: Colors.white),
79 | bodyLarge: TextStyle(fontSize: 14, color: Colors.white),
80 | bodyMedium: TextStyle(fontSize: 12, color: Colors.white),
81 | bodySmall: TextStyle(fontSize: 10, color: Colors.white),
82 | ),
83 |
84 | // Custom dark theme components
85 | cardTheme: CardTheme(color: scaffoldDarkColor, surfaceTintColor: scaffoldDarkColor),
86 | dividerTheme: DividerThemeData(color: tabBorderDarkColor),
87 | appBarTheme: AppBarTheme(
88 | backgroundColor: scaffoldDarkColor,
89 | surfaceTintColor: scaffoldDarkColor,
90 | ),
91 | bottomNavigationBarTheme: BottomNavigationBarThemeData(
92 | backgroundColor: scaffoldDarkColor,
93 | ),
94 | );
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/lib/core/theme/colors.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | // Primary color- light version
4 | const primaryColor = Color(0xFFED6325);
5 | // const deleteButton
6 | const scaffoldColor = Color.fromRGBO(248, 248, 248, 1);
7 | const tabColor = Colors.white;
8 | const tabBorderColor = Color.fromARGB(255, 217, 217, 217);
9 |
10 | // dark version alterings, rest colors are same for both versions
11 | const scaffoldDarkColor = Color.fromARGB(255, 30, 30, 30);
12 | const tabDarkColor = Color.fromARGB(255, 48, 48, 48);
13 | const tabBorderDarkColor = Color.fromARGB(255, 75, 75, 75);
14 |
15 | // List of secondary colors
16 | const List secondaryColors = [
17 | Color(0xFF30C66F), // [0] Green
18 | Color(0xFFFF6B6B), // [1] Coral Red
19 | Color(0xFFF59E0B), // [2] Amber
20 | Color(0xFFA259FF), // [3] Purple
21 | Color(0xFF1CC8C0), // [4] Cyan
22 | Color(0xFFF53F5F), // [5] Pink Red
23 | Color(0xFF3B82F6), // [6] Blue
24 | Color(0xFFED6325), // [7] Orange
25 | Color(0xFF737492), // [8] Slate Gray
26 | Color(0xFF000000), // [9] Black
27 | ];
28 |
29 | // List of tertiary colors
30 | const List tertiaryColors = [
31 | Color(0xFFB9F5CC), // [0] Light Green
32 | Color(0xFFFFC4BC), // [1] Light Coral
33 | Color(0xFFFAD7A0), // [2] Light Amber
34 | Color(0xFFD4B6F5), // [3] Light Purple
35 | Color(0xFFB9E8FF), // [4] Light Cyan
36 | Color(0xFFF8B6BF), // [5] Light Pink
37 | Color(0xFFB3D4FC), // [6] Light Blue
38 | Color(0xFFFFB89E), // [7] Peach
39 | Color(0xFFC8C9E1), // [8] Light Slate
40 | Color(0xFFC9C9C9), // [9] Light Gray
41 | ];
42 |
--------------------------------------------------------------------------------
/lib/core/utils/consts.dart:
--------------------------------------------------------------------------------
1 | abstract class Constants {
2 | // Name of the Realtime channel
3 | static const String channelName = 'canvas';
4 |
5 | // Name of the broadcast event
6 | static const String broadcastEventName = 'canvas';
7 | }
8 |
--------------------------------------------------------------------------------
/lib/core/utils/enums.dart:
--------------------------------------------------------------------------------
1 | enum ProviderState { inital, empty, loading, loaded, success, error }
2 |
3 | enum NodeType {
4 | note,
5 | rectangle,
6 | square,
7 | diamond,
8 | roundedSquare,
9 | parallelogram,
10 | cylinder,
11 | circle,
12 | triangle,
13 | invertedTriangle,
14 | }
15 |
16 | enum ConnectionPoint { up, down, left, right }
17 |
18 | enum ConnectionType { solid, dotted, dashed }
19 |
20 | // Enum to define the different shapes
21 | enum ShapeType {
22 | square,
23 | diamond,
24 | roundedSquare,
25 | parallelogram,
26 | cylinder,
27 | circle,
28 | triangle,
29 | invertedTriangle,
30 | }
31 |
--------------------------------------------------------------------------------
/lib/core/utils/state_handler.dart:
--------------------------------------------------------------------------------
1 | import "dart:io";
2 |
3 | import "package:cookethflow/core/utils/enums.dart";
4 | import "package:flutter/material.dart";
5 |
6 |
7 | class StateHandler extends ChangeNotifier {
8 | ProviderState state = ProviderState.inital;
9 | Failure errorMessage = Failure("");
10 |
11 | StateHandler([ProviderState? intialState])
12 | : state = intialState ?? ProviderState.inital;
13 |
14 | void handleLoading() {
15 | state = ProviderState.loading;
16 | errorMessage.clear();
17 | notifyListeners();
18 | }
19 |
20 | void handleEmpty() {
21 | state = ProviderState.empty;
22 | errorMessage.clear();
23 | notifyListeners();
24 | }
25 |
26 | void handleLoaded() {
27 | state = ProviderState.loaded;
28 | errorMessage.clear();
29 | notifyListeners();
30 | }
31 |
32 | void handleSuccess() {
33 | state = ProviderState.success;
34 | errorMessage.clear();
35 | notifyListeners();
36 | }
37 |
38 | void handleError(String msg) {
39 | state = ProviderState.error;
40 | errorMessage = Failure(msg);
41 |
42 | notifyListeners();
43 | }
44 |
45 | ///For handling errors
46 | Future asyncHandler(
47 | Future task, {
48 | String socketError = "No Internet Connection",
49 | String formatError = "Format Exception while parsing data",
50 | String unknownError = "Something went Wrong",
51 | ProviderState? afterState,
52 | }) async {
53 | try {
54 | final T temp = await task as T;
55 |
56 | if (afterState != null) {
57 | state = afterState;
58 | notifyListeners();
59 | }
60 |
61 | return temp;
62 | } on SocketException catch (e) {
63 | debugPrint("SocketException: $e");
64 |
65 | handleError(socketError);
66 | } on FormatException catch (e) {
67 | debugPrint("FormatException : $e");
68 |
69 | handleError(formatError);
70 | } catch (e) {
71 | debugPrint("Unknown Error: $e");
72 |
73 | handleError(unknownError);
74 | }
75 | return null;
76 | }
77 | }
78 |
79 | class Failure {
80 | String message;
81 |
82 | String? code;
83 |
84 | Failure(this.message, [this.code]);
85 |
86 | void clear() {
87 | message = "";
88 | code = "";
89 | }
90 | }
--------------------------------------------------------------------------------
/lib/features/auth/pages/desktop/login_desktop.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/auth/widgets/login_form.dart';
2 | import 'package:cookethflow/features/auth/widgets/slider.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | class LoginDesktop extends StatelessWidget {
6 | const LoginDesktop({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Row(
11 | children: [
12 | Expanded(
13 | flex: 1,
14 | child: SingleChildScrollView(
15 | child: Padding(
16 | padding: EdgeInsets.symmetric(
17 | horizontal: MediaQuery.of(context).size.width * 0.05,
18 | vertical: 32,
19 | ),
20 | child: ConstrainedBox(
21 | constraints: BoxConstraints(
22 | minHeight: MediaQuery.of(context).size.height - 64,
23 | ),
24 | child: LoginForm(),
25 | ),
26 | ),
27 | ),
28 | ),
29 | Expanded(flex: 1, child: SliderStart()),
30 | ],
31 | );
32 | }
33 | }
--------------------------------------------------------------------------------
/lib/features/auth/pages/desktop/signup_desktop.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/auth/widgets/signup_form.dart';
2 | import 'package:cookethflow/features/auth/widgets/slider.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | class SignupDesktop extends StatelessWidget {
6 | const SignupDesktop({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Row(
11 | children: [
12 | Expanded(
13 | flex: 1,
14 | child: SingleChildScrollView(
15 | child: Padding(
16 | padding: EdgeInsets.symmetric(
17 | horizontal: MediaQuery.of(context).size.width * 0.05,
18 | vertical: 32,
19 | ),
20 | child: ConstrainedBox(
21 | constraints: BoxConstraints(
22 | minHeight: MediaQuery.of(context).size.height - 64,
23 | ),
24 | child: SignUpForm(),
25 | ),
26 | ),
27 | ),
28 | ),
29 | Expanded(flex: 1, child: SliderStart()),
30 | ],
31 | );
32 | }
33 | }
--------------------------------------------------------------------------------
/lib/features/auth/pages/login.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/helpers/responsive_layout.helper.dart';
2 | import 'package:cookethflow/features/auth/pages/desktop/login_desktop.dart';
3 | import 'package:cookethflow/features/auth/pages/mobile/login_mobile.dart';
4 | import 'package:cookethflow/features/auth/pages/tablet/login_tablet.dart';
5 | import 'package:flutter/material.dart';
6 |
7 | class LoginPage extends StatelessWidget {
8 | const LoginPage({super.key});
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | Widget loginWidget;
13 | switch (ResponsiveLayoutHelper.getDeviceType(context)) {
14 | case DeviceType.desktop:
15 | loginWidget = LoginDesktop();
16 | break;
17 | case DeviceType.tab:
18 | loginWidget = LoginTablet();
19 | break;
20 | case DeviceType.mobile:
21 | loginWidget = LoginMobile();
22 | break;
23 | }
24 | return Scaffold(backgroundColor: Color(0XFFF8F8F8), body: loginWidget);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/features/auth/pages/mobile/login_mobile.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/auth/widgets/login_form.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class LoginMobile extends StatelessWidget {
5 | const LoginMobile({super.key});
6 |
7 | @override
8 | Widget build(BuildContext context) {
9 | return SingleChildScrollView(
10 | child:
11 | Padding(
12 | padding: const EdgeInsets.symmetric(
13 | horizontal: 24.0,
14 | vertical: 16.0,
15 | ),
16 | child: LoginForm(),
17 | ),
18 | );
19 | }
20 | }
--------------------------------------------------------------------------------
/lib/features/auth/pages/mobile/signup_mobile.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/auth/widgets/signup_form.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class SignupMobile extends StatelessWidget {
5 | const SignupMobile({super.key});
6 |
7 | @override
8 | Widget build(BuildContext context) {
9 | return SingleChildScrollView(
10 | child: Padding(
11 | padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 16.0),
12 | child: SignUpForm(),
13 | ),
14 | );
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/features/auth/pages/signup.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/helpers/responsive_layout.helper.dart';
2 | import 'package:cookethflow/features/auth/pages/desktop/signup_desktop.dart';
3 | import 'package:cookethflow/features/auth/pages/mobile/signup_mobile.dart';
4 | import 'package:cookethflow/features/auth/pages/tablet/signup_tablet.dart';
5 | import 'package:flutter/material.dart';
6 |
7 | class SignupPage extends StatelessWidget {
8 | const SignupPage({super.key});
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | Widget signupWidget;
13 | switch (ResponsiveLayoutHelper.getDeviceType(context)) {
14 | case DeviceType.desktop:
15 | signupWidget = const SignupDesktop();
16 | break;
17 | case DeviceType.tab:
18 | signupWidget = const SignupTablet(); // Or a tablet-specific widget
19 | break;
20 | case DeviceType.mobile:
21 | signupWidget = const SignupMobile();
22 | break;
23 | }
24 | return Scaffold(backgroundColor: Color(0XFFF8F8F8), body: signupWidget);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/features/auth/pages/tablet/login_tablet.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/auth/widgets/login_form.dart';
2 | import 'package:cookethflow/features/auth/widgets/slider.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | class LoginTablet extends StatelessWidget {
6 | const LoginTablet({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Row(
11 | children: [
12 | Expanded(
13 | flex: 1,
14 | child: SingleChildScrollView(
15 | child: Padding(
16 | padding: EdgeInsets.symmetric(
17 | horizontal: MediaQuery.of(context).size.width * 0.05,
18 | vertical: 32,
19 | ),
20 | child: ConstrainedBox(
21 | constraints: BoxConstraints(
22 | minHeight: MediaQuery.of(context).size.height - 64,
23 | ),
24 | child: LoginForm(),
25 | ),
26 | ),
27 | ),
28 | ),
29 | Expanded(flex: 1, child: SliderStart()),
30 | ],
31 | );
32 | }
33 | }
--------------------------------------------------------------------------------
/lib/features/auth/pages/tablet/signup_tablet.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/auth/widgets/signup_form.dart';
2 | import 'package:cookethflow/features/auth/widgets/slider.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | class SignupTablet extends StatelessWidget {
6 | const SignupTablet({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Row(
11 | children: [
12 | Expanded(
13 | flex: 1,
14 | child: SingleChildScrollView(
15 | child: Padding(
16 | padding: EdgeInsets.symmetric(
17 | horizontal: MediaQuery.of(context).size.width * 0.05,
18 | vertical: 32,
19 | ),
20 | child: ConstrainedBox(
21 | constraints: BoxConstraints(
22 | minHeight: MediaQuery.of(context).size.height - 64,
23 | ),
24 | child: SignUpForm(),
25 | ),
26 | ),
27 | ),
28 | ),
29 | Expanded(flex: 1, child: SliderStart()),
30 | ],
31 | );
32 | }
33 | }
--------------------------------------------------------------------------------
/lib/features/auth/widgets/slider.dart:
--------------------------------------------------------------------------------
1 | import 'package:carousel_slider/carousel_slider.dart';
2 | import 'package:cookethflow/core/theme/colors.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:flutter_screenutil/flutter_screenutil.dart';
5 |
6 | class SliderStart extends StatelessWidget {
7 | final List images = [
8 | 'assets/images/Frame 400.png',
9 | 'assets/images/Frame 401.png',
10 | 'assets/images/Frame 402.png',
11 | ];
12 |
13 | SliderStart({super.key});
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | final ValueNotifier currentIndex = ValueNotifier(0);
18 |
19 | return MaterialApp(
20 | debugShowCheckedModeBanner: false,
21 | home: Scaffold(
22 | backgroundColor: const Color(0xFFFDE2CF),
23 | body: Center(
24 | child: Column(
25 | mainAxisAlignment: MainAxisAlignment.center,
26 | children: [
27 | SizedBox(
28 | height: 0.8.sh, // 640
29 | child: CarouselSlider(
30 | options: CarouselOptions(
31 | autoPlay: true,
32 | autoPlayInterval: const Duration(milliseconds: 2500),
33 | viewportFraction: 1.0,
34 | enableInfiniteScroll: true,
35 | scrollPhysics: const NeverScrollableScrollPhysics(),
36 | onPageChanged: (index, reason) {
37 | currentIndex.value = index;
38 | },
39 | ),
40 | items: images.map((image) {
41 | return Image.asset(
42 | image,
43 | fit: BoxFit.cover,
44 | );
45 | }).toList(),
46 | ),
47 | ),
48 | SizedBox(height: 10.h),
49 | ValueListenableBuilder(
50 | valueListenable: currentIndex,
51 | builder: (context, index, child) {
52 | return Row(
53 | mainAxisAlignment: MainAxisAlignment.center,
54 | children: List.generate(
55 | 3,
56 | (i) => Container(
57 | margin: EdgeInsets.symmetric(horizontal: 4.w),
58 | width: 12.w,
59 | height: 12.h,
60 | decoration: BoxDecoration(
61 | shape: BoxShape.circle,
62 | color: i == index
63 | ? primaryColor
64 | : Colors.white,
65 | ),
66 | ),
67 | ),
68 | );
69 | },
70 | ),
71 | ],
72 | ),
73 | ),
74 | ),
75 | );
76 | }
77 | }
--------------------------------------------------------------------------------
/lib/features/dashboard/pages/dashboard.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/helpers/responsive_layout.helper.dart'
2 | as responsive_helper;
3 | import 'package:cookethflow/core/providers/supabase_provider.dart';
4 | import 'package:cookethflow/features/dashboard/pages/desktop/dashboard_desktop.dart';
5 | import 'package:cookethflow/features/dashboard/pages/mobile/dashboard_mobile.dart';
6 | import 'package:flutter/material.dart';
7 | import 'package:flutter_screenutil/flutter_screenutil.dart';
8 | import 'package:provider/provider.dart';
9 |
10 | class DashboardPage extends StatelessWidget {
11 | const DashboardPage({super.key});
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | Widget dashboardScreen;
16 | switch (responsive_helper.ResponsiveLayoutHelper.getDeviceType(context)) {
17 | case responsive_helper.DeviceType.desktop:
18 | dashboardScreen = DashboardDesktop();
19 | break;
20 | case responsive_helper.DeviceType.tab:
21 | dashboardScreen = DashboardDesktop();
22 | break;
23 | case responsive_helper.DeviceType.mobile:
24 | dashboardScreen = DashboardMobile();
25 | break;
26 | }
27 | return Consumer(
28 | builder: (context, supa, child) {
29 | return Scaffold(
30 | backgroundColor: Color.fromRGBO(248, 248, 248, 1),
31 | // backgroundColor: Colors.black,
32 | body: Padding(
33 | padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 50.h),
34 | child: dashboardScreen,
35 | ),
36 | );
37 | },
38 | );
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/lib/features/dashboard/pages/desktop/dashboard_desktop.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/theme/colors.dart';
2 | import 'package:cookethflow/features/dashboard/providers/dashboard_provider.dart';
3 | import 'package:cookethflow/features/dashboard/widgets/dashboard_drawer.dart';
4 | import 'package:cookethflow/features/dashboard/widgets/project_card.dart';
5 | import 'package:cookethflow/features/dashboard/widgets/start_project.dart';
6 | import 'package:flutter/material.dart';
7 | import 'package:flutter_screenutil/flutter_screenutil.dart';
8 | import 'package:phosphor_flutter/phosphor_flutter.dart';
9 | import 'package:provider/provider.dart';
10 | import 'package:cookethflow/core/helpers/responsive_layout.helper.dart' as rh;
11 |
12 | class DashboardDesktop extends StatelessWidget {
13 | const DashboardDesktop({super.key});
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | rh.DeviceType deviceType = rh.ResponsiveLayoutHelper.getDeviceType(context);
18 | return Consumer(
19 | builder: (context, provider, child) {
20 | return LayoutBuilder(
21 | builder:
22 | (context, constraints) => Row(
23 | crossAxisAlignment: CrossAxisAlignment.start,
24 | children: [
25 | AnimatedContainer(
26 | curve: Curves.easeInOut,
27 | duration: Duration(milliseconds: 500),
28 | height:
29 | provider.isDrawerOpen
30 | ? constraints.maxHeight
31 | : 0.185.sh,
32 | width: deviceType == rh.DeviceType.desktop ? 400.w : 600.w,
33 | child: DashboardDrawer(),
34 | ),
35 |
36 | Expanded(
37 | child: Padding(
38 | padding: EdgeInsets.symmetric(
39 | horizontal: 30.w,
40 | vertical: 20.h,
41 | ),
42 | child: Column(
43 | crossAxisAlignment: CrossAxisAlignment.end,
44 | children: [
45 | Padding(
46 | padding: EdgeInsets.only(bottom: 20.h),
47 | child: StartProject(),
48 | ),
49 | SizedBox(height: 32),
50 | Expanded(
51 | child: GridView.builder(
52 | shrinkWrap: true,
53 | itemCount: provider.workspaceList.length,
54 | gridDelegate:
55 | SliverGridDelegateWithFixedCrossAxisCount(
56 | crossAxisCount: 3,
57 | crossAxisSpacing: 20.w,
58 | mainAxisSpacing: 20.h,
59 | childAspectRatio: 4.5 / 3,
60 | ),
61 | itemBuilder: (context, index) {
62 | return ProjectCard(idx: index);
63 | },
64 | ),
65 | ),
66 | ],
67 | ),
68 | ),
69 | ),
70 | ],
71 | ),
72 | );
73 | },
74 | );
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/lib/features/dashboard/pages/mobile/dashboard_mobile.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/features/dashboard/providers/dashboard_provider.dart';
2 | import 'package:cookethflow/features/dashboard/widgets/dashboard_drawer.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:provider/provider.dart';
5 |
6 | class DashboardMobile extends StatelessWidget {
7 | const DashboardMobile({super.key});
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return Consumer(builder: (context, provider, child) =>
12 | Scaffold(drawer: DashboardDrawer(),appBar: AppBar(),body: Container(),),);
13 | }
14 | }
--------------------------------------------------------------------------------
/lib/features/dashboard/providers/dashboard_provider.dart:
--------------------------------------------------------------------------------
1 | import 'package:cookethflow/core/providers/supabase_provider.dart';
2 | import 'package:cookethflow/core/utils/state_handler.dart';
3 | import 'package:cookethflow/features/models/workspace_model.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:phosphor_flutter/phosphor_flutter.dart';
6 | import 'package:supabase_flutter/supabase_flutter.dart';
7 | import 'package:uuid/uuid.dart';
8 |
9 | class DashboardProvider extends StateHandler {
10 | late SupabaseClient? supabase;
11 | late SupabaseService supabaseService;
12 | DashboardProvider(this.supabase, this.supabaseService) : super() {
13 | initialize();
14 | }
15 |
16 | // properties
17 | bool _isDrawerOpen = true;
18 | int _tabIndex = 0;
19 | bool _isLoading = false;
20 | bool _isInitialized = false;
21 | List _workspaceList = [];
22 |
23 | // getters
24 | bool get isDrawerOpen => _isDrawerOpen;
25 | int get tabIndex => _tabIndex;
26 | bool get isLoading => _isLoading;
27 | bool get isInitialized => _isInitialized;
28 | List get workspaceList => _workspaceList;
29 |
30 | List