diff --git a/README.md b/README.md index 9d3f4a24..f290b476 100644 --- a/README.md +++ b/README.md @@ -9,18 +9,17 @@ ## README.md must consist of the following information: -#### Team Name - -#### Problem Statement - -#### Team Leader Email - +#### Team Name - Team Captains +#### Problem Statement - Next Generation Banking System +#### Team Leader Email - kj20021007@gmail.com ## A Brief of the Prototype: - This section must include UML Diagrams and prototype description - +This application aims to completely change the banking experience with a simple, single sstop solution to the most troublesome aspects of online banking. A smooth and modern user interface, security mesures, and accessibility that helps include underserved people is the main reason behind the development of this prototype ## Tech Stack: - List Down all technologies used to Build the prototype + Flutter, ChatGpt API, ML, Python, Firebase, Firestore ## Step-by-Step Code Execution Instructions: - This Section must contain a set of instructions required to clone and run the prototype so that it can be tested and deeply analyzed + cd Team Captains > cd GenAIRush > cd finovo > flutter pub get > flutter run ## What I Learned: - Write about the biggest learning you had while developing the prototype +Broad knowledge of various technologies is essential when working with integration of various APIs, and ML models etc. Front end enhances thr user experience and should be focussed on but the backend is perhaps even more important. \ No newline at end of file diff --git a/Team Captains/GenAIRush/finovo/.gitignore b/Team Captains/GenAIRush/finovo/.gitignore new file mode 100644 index 00000000..24476c5d --- /dev/null +++ b/Team Captains/GenAIRush/finovo/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/Team Captains/GenAIRush/finovo/.metadata b/Team Captains/GenAIRush/finovo/.metadata new file mode 100644 index 00000000..f25b3d47 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + - platform: android + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + - platform: ios + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + - platform: linux + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + - platform: macos + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + - platform: web + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + - platform: windows + create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/Team Captains/GenAIRush/finovo/README.md b/Team Captains/GenAIRush/finovo/README.md new file mode 100644 index 00000000..c0975772 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/README.md @@ -0,0 +1,16 @@ +# finovo + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/Team Captains/GenAIRush/finovo/analysis_options.yaml b/Team Captains/GenAIRush/finovo/analysis_options.yaml new file mode 100644 index 00000000..61b6c4de --- /dev/null +++ b/Team Captains/GenAIRush/finovo/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/Team Captains/GenAIRush/finovo/android/.gitignore b/Team Captains/GenAIRush/finovo/android/.gitignore new file mode 100644 index 00000000..6f568019 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/Team Captains/GenAIRush/finovo/android/app/build.gradle b/Team Captains/GenAIRush/finovo/android/app/build.gradle new file mode 100644 index 00000000..5b959654 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/build.gradle @@ -0,0 +1,73 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'com.google.gms.google-services' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.finovo" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion 21 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation platform('com.google.firebase:firebase-bom:32.2.0') +} diff --git a/Team Captains/GenAIRush/finovo/android/app/google-services.json b/Team Captains/GenAIRush/finovo/android/app/google-services.json new file mode 100644 index 00000000..66571785 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/google-services.json @@ -0,0 +1,39 @@ +{ + "project_info": { + "project_number": "278966697910", + "project_id": "finovoapp-101fd", + "storage_bucket": "finovoapp-101fd.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:278966697910:android:ddece63f464c9f318d0b17", + "android_client_info": { + "package_name": "com.example.finovo" + } + }, + "oauth_client": [ + { + "client_id": "278966697910-8od8pvotdnkqlnl70a5jod89mi2tmdop.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAPDF5kSNcg3ty-R0wovylKeTH5NrHqwwc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "278966697910-8od8pvotdnkqlnl70a5jod89mi2tmdop.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/Team Captains/GenAIRush/finovo/android/app/src/debug/AndroidManifest.xml b/Team Captains/GenAIRush/finovo/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..1719f826 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/AndroidManifest.xml b/Team Captains/GenAIRush/finovo/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..83ad1cb9 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/kotlin/com/example/finovo/MainActivity.kt b/Team Captains/GenAIRush/finovo/android/app/src/main/kotlin/com/example/finovo/MainActivity.kt new file mode 100644 index 00000000..a5a685be --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/main/kotlin/com/example/finovo/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.finovo + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/drawable-v21/launch_background.xml b/Team Captains/GenAIRush/finovo/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/drawable/launch_background.xml b/Team Captains/GenAIRush/finovo/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..db77bb4b Binary files /dev/null and b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..17987b79 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..09d43914 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..d5f1c8d3 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..4d6372ee Binary files /dev/null and b/Team Captains/GenAIRush/finovo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/values-night/styles.xml b/Team Captains/GenAIRush/finovo/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/android/app/src/main/res/values/styles.xml b/Team Captains/GenAIRush/finovo/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/android/app/src/profile/AndroidManifest.xml b/Team Captains/GenAIRush/finovo/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..1719f826 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/Team Captains/GenAIRush/finovo/android/build.gradle b/Team Captains/GenAIRush/finovo/android/build.gradle new file mode 100644 index 00000000..d1adb74a --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.google.gms:google-services:4.3.15' + classpath 'com.android.tools.build:gradle:7.2.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/Team Captains/GenAIRush/finovo/android/gradle.properties b/Team Captains/GenAIRush/finovo/android/gradle.properties new file mode 100644 index 00000000..94adc3a3 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/Team Captains/GenAIRush/finovo/android/gradle/wrapper/gradle-wrapper.properties b/Team Captains/GenAIRush/finovo/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..3c472b99 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/Team Captains/GenAIRush/finovo/android/settings.gradle b/Team Captains/GenAIRush/finovo/android/settings.gradle new file mode 100644 index 00000000..44e62bcf --- /dev/null +++ b/Team Captains/GenAIRush/finovo/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/Team Captains/GenAIRush/finovo/assets/background.jpg b/Team Captains/GenAIRush/finovo/assets/background.jpg new file mode 100644 index 00000000..d470bef6 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/assets/background.jpg differ diff --git a/Team Captains/GenAIRush/finovo/assets/img_chipcard.png b/Team Captains/GenAIRush/finovo/assets/img_chipcard.png new file mode 100644 index 00000000..954a605e Binary files /dev/null and b/Team Captains/GenAIRush/finovo/assets/img_chipcard.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/.gitignore b/Team Captains/GenAIRush/finovo/ios/.gitignore new file mode 100644 index 00000000..7a7f9873 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/Team Captains/GenAIRush/finovo/ios/Flutter/AppFrameworkInfo.plist b/Team Captains/GenAIRush/finovo/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..9625e105 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/Team Captains/GenAIRush/finovo/ios/Flutter/Debug.xcconfig b/Team Captains/GenAIRush/finovo/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/Team Captains/GenAIRush/finovo/ios/Flutter/Release.xcconfig b/Team Captains/GenAIRush/finovo/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.pbxproj b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..3b96a6fc --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,483 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.finovo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.finovo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.finovo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..c87d15a3 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/contents.xcworkspacedata b/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/AppDelegate.swift b/Team Captains/GenAIRush/finovo/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..70693e4a --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..dc9ada47 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..7353c41e Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..797d452e Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..6ed2d933 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..4cd7b009 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..fe730945 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..321773cd Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..797d452e Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..502f463a Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..0ec30343 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..0ec30343 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..e9f5fea2 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..84ac32ae Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..8953cba0 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..0467bf12 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 00000000..0bedcf2f --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Base.lproj/LaunchScreen.storyboard b/Team Captains/GenAIRush/finovo/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Base.lproj/Main.storyboard b/Team Captains/GenAIRush/finovo/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Info.plist b/Team Captains/GenAIRush/finovo/ios/Runner/Info.plist new file mode 100644 index 00000000..4e127f7c --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Finovo + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + finovo + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/Team Captains/GenAIRush/finovo/ios/Runner/Runner-Bridging-Header.h b/Team Captains/GenAIRush/finovo/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..308a2a56 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/Team Captains/GenAIRush/finovo/lib/Data/data.dart b/Team Captains/GenAIRush/finovo/lib/Data/data.dart new file mode 100644 index 00000000..46f6b548 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/Data/data.dart @@ -0,0 +1,8 @@ +import 'package:finovo/model/Transactions.dart'; + +class Mydata{ + static late int accnumber; + static late String balance; + static late String name; + static late List transaction; +} \ No newline at end of file diff --git a/Team Captains/GenAIRush/finovo/lib/Screens/Home.dart b/Team Captains/GenAIRush/finovo/lib/Screens/Home.dart new file mode 100644 index 00000000..978a82fe --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/Screens/Home.dart @@ -0,0 +1,509 @@ +import 'dart:convert'; +import 'package:finovo/Data/data.dart'; +import 'package:finovo/Screens/faq.dart'; +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/presentation/home_screen/widgets/listbalance_item_widget.dart'; +import 'package:finovo/presentation/home_screen/widgets/listvideocamera_item_widget.dart'; +import 'package:finovo/services/crud.dart'; +import 'package:finovo/theme/app_decoration.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:finovo/widgets/app_bar/appbar_circleimage.dart'; +import 'package:finovo/widgets/app_bar/appbar_image.dart'; +import 'package:finovo/widgets/app_bar/appbar_title.dart'; +import 'package:finovo/widgets/app_bar/custom_app_bar.dart'; +import 'package:speech_to_text/speech_to_text.dart' as stt; + +import 'package:flutter/material.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/src/widgets/placeholder.dart'; +import 'package:flutter_chatgpt_api/flutter_chatgpt_api.dart'; +import 'package:chat_gpt_sdk/chat_gpt_sdk.dart'; +import 'package:http/http.dart' as http; +import 'package:google_mlkit_translation/google_mlkit_translation.dart'; +import 'package:translator/translator.dart'; + +class Home extends StatefulWidget { + const Home({super.key}); + + @override + State createState() => _HomeState(); +} + +class _HomeState extends State { + late OpenAI? chatGPT; + final translator = GoogleTranslator(); + bool isTranslate = true; + bool isloded = false; + final stt.SpeechToText _speachtotext = stt.SpeechToText(); + String speechToText = "Press the button and start speaking"; + + Future translate(String text) async { + var output; + await translator.translate(text, to: 'en').then((value) { + setState(() { + output = value; + + isTranslate = true; + }); + }); + print(output.toString()); + return output.toString(); + } + + void speachtotext() { + const url = "https://api.assemblyai.com/v2/upload"; + } + + bool isListening = false; + bool isListening1 = false; + TextEditingController group420Controller = TextEditingController(); + + GlobalKey _scaffoldKey = GlobalKey(); + late String responce; + String _text = "Press the button and start speaking"; + Future send(String text) async { + var headers = { + 'Content-Type': 'application/json', + 'Authorization': + 'Bearer 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' + }; + var request = http.Request( + 'POST', Uri.parse('https://api.openai.com/v1/completions')); + request.body = json.encode({ + "model": "text-davinci-003", + "prompt": "Extract numerical amount and proper noun from $text", + "max_tokens": 250, + "temperature": 0, + "top_p": 1 + }); + request.headers.addAll(headers); + http.StreamedResponse response = await request.send(); + if (response.statusCode == 200) { + responce = await response.stream.bytesToString(); + // print("responce"); print(responce); + + return responce; + } else { + print(response.reasonPhrase); + return "Error"; + } + } + + listeneng() async { + if (isListening1 == false) { + bool available = await _speachtotext.initialize( + onStatus: (v) => {}, onError: (v) => {}); + if (available) { + setState(() { + isListening1 = true; + }); + _speachtotext.listen( + onResult: (value) { + speechToText = value.recognizedWords; + }, + ); + } + // await send(speechToText).toString(); + } else { + setState(() { + isListening1 = false; + }); + } + } + + listen() async { + if (isListening == false) { + bool available = await _speachtotext.initialize( + onStatus: (v) => {}, onError: (v) => {}); + if (available) { + setState(() { + isListening = true; + }); + _speachtotext.listen( + onResult: (value) { + speechToText = value.recognizedWords; + }, + localeId: 'hi-IN', + ); + } + } else { + setState(() { + isListening = false; + }); + } + } + + gett() async { + await Crud().gettransactions(); + setState(() { + isloded = true; + }); + } + + @override + void initState() { + // TODO: implement initState + gett(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + String output = ""; + // return Scaffold( + // appBar: AppBar(title: Text('Speech to Text Example')), + // body: Center( + // child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Text(isListening ? _text : speechToText), + // ElevatedButton( + // onPressed: () async { + // await listeneng(); + // output = await send(speechToText); + // var output2 = json.decode(output); + // print("output"); + // print(output2); + // // var output3=json.decode(output2['choices'][0]['text']); + // var ans = output2['choices'][0]['text'].toString(); + // String amount = ""; + // for (int i = 0; i < ans.length; i++) { + // if (ans.codeUnitAt(i) >= 48 && ans.codeUnitAt(i) <= 57) { + // amount = amount + ans[i]; + // } else { + // amount = amount; + // } + // } + // String name = output2['choices'][0]['text'] + // .toString() + // .substring(34 + amount.length); + // if (name.isNotEmpty && amount.isNotEmpty) { + // int toacc = await Crud().getpayeenaccnumber(name); + + // Crud().write("",toacc.toString(),amount); + // } + // }, + // child: Text(isListening1 + // ? "Stop Listening" + // : "Start Listening in English"), + // ), + // SizedBox( + // height: 20, + // ), + // ElevatedButton( + // onPressed: () async { + // await listen(); + + // output = await send(speechToText); + // var output2 = json.decode(output); + // print("output"); + // print(output2); + // // var output3=json.decode(output2['choices'][0]['text']); + // var ans = output2['choices'][0]['text'].toString(); + // String amount = ""; + // for (int i = 0; i < ans.length; i++) { + // if (ans.codeUnitAt(i) >= 48 && ans.codeUnitAt(i) <= 57) { + // amount = amount + ans[i]; + // } else { + // amount = amount; + // } + // } + // String name = output2['choices'][0]['text'] + // .toString() + // .substring(34 + amount.length); + // if (name.isNotEmpty && amount.isNotEmpty) { + // int toacc = await Crud().getpayeenaccnumber(name); + + // Crud().write("",toacc.toString(),amount); + // } + // }, + // child: Text( + // isListening ? "Stop Listening" : "Start Listening in Hindi"), + // ), + // ], + // ), + // ), + // ); + return Stack( + children: [ + Image.asset( + "assets/background.jpg", + width: width, + height: height, + fit: BoxFit.cover, + ), + SafeArea( + child: Scaffold( + key: _scaffoldKey, + backgroundColor: Colors.transparent, + appBar: CustomAppBar( + height: getVerticalSize(122), + centerTitle: true, + title: + Column(mainAxisAlignment: MainAxisAlignment.start, children: [ + Row(children: [ + AppbarImage( + height: getSize(24), + width: getSize(24), + //svgPath: ImageConstant.imgMenu, + margin: getMargin(top: 5, bottom: 6), + onTap: () { + onTapMenu(context); + }), + AppbarTitle( + text: "HomePage", + margin: getMargin(left: 133, top: 13, bottom: 6)), + ]), + SizedBox( + height: 30, + ) + ]), + styleType: Style.bgFillWhiteA700), + body: isloded + ? SizedBox( + width: size.width, + child: SingleChildScrollView( + child: Padding( + padding: getPadding(left: 24, top: 24, bottom: 5), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: getPadding(right: 24), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text("My Card", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: + AppStyle.txtInterSemiBold16), + GestureDetector( + onTap: () { + onTapTxtSeeAll(context); + }, + child: Padding( + padding: + getPadding(bottom: 2), + child: Text("", + overflow: + TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtInterSemiBold14))) + ])), + Align( + alignment: Alignment.center, + child: Container( + height: getVerticalSize(184), + child: ListView.separated( + padding: getPadding(top: 14), + scrollDirection: Axis.horizontal, + separatorBuilder: (context, index) { + return SizedBox( + height: getVerticalSize(20)); + }, + itemCount: 1, + itemBuilder: (context, index) { + return Center( + child: + ListbalanceItemWidget()); + }))), + SizedBox( + height: 40, + ), + Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(isListening ? _text : speechToText,style: TextStyle(color: Colors.white),), + ElevatedButton( + onPressed: () async { + await listeneng(); + output = await send(speechToText); + var output2 = json.decode(output); + print("output"); + print(output2); + // var output3=json.decode(output2['choices'][0]['text']); + var ans = output2['choices'][0] + ['text'] + .toString(); + String amount = ""; + for (int i = 0; i < ans.length; i++) { + if (ans.codeUnitAt(i) >= 48 && + ans.codeUnitAt(i) <= 57) { + amount = amount + ans[i]; + } else { + amount = amount; + } + } + String name = output2['choices'][0] + ['text'] + .toString() + .substring(34 + amount.length); + if (name.isNotEmpty && + amount.isNotEmpty) { + int toacc = await Crud() + .getpayeenaccnumber(name); + + Crud().write( + Mydata.accnumber.toString(), + toacc.toString(), + amount, + context);gett(); + } + }, + child: Text(isListening1 + ? "Stop Listening" + : "Start Listening in English"), + ), + SizedBox( + height: 20, + ), + ElevatedButton( + onPressed: () async { + await listen(); + + output = await send(speechToText); + var output2 = json.decode(output); + print("output"); + print(output2); + // var output3=json.decode(output2['choices'][0]['text']); + var ans = output2['choices'][0] + ['text'] + .toString(); + String amount = ""; + for (int i = 0; i < ans.length; i++) { + if (ans.codeUnitAt(i) >= 48 && + ans.codeUnitAt(i) <= 57) { + amount = amount + ans[i]; + } else { + amount = amount; + } + } + String name = output2['choices'][0] + ['text'] + .toString() + .substring(34 + amount.length); + if (name.isNotEmpty && + amount.isNotEmpty) { + int toacc = await Crud() + .getpayeenaccnumber(name); + + Crud().write( + Mydata.accnumber.toString(), + toacc.toString(), + amount, + context); + } + gett(); + }, + child: Text(isListening + ? "Stop Listening" + : "Start Listening in Hindi"), + ), + // ElevatedButton( + // onPressed: () async { + // gett(); + + // }, + // child: Text(isListening + // ? "Stop Listening" + // : "Start Listening in Hindi"), + // ), + ], + ), + ), + Padding( + padding: getPadding(top: 22), + child: Text("Transaction", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterSemiBold16)), + Container( + margin: getMargin(top: 16, right: 24), + padding: getPadding( + left: 19, + top: 20, + right: 19, + bottom: 20), + decoration: AppDecoration.fillWhiteA700 + .copyWith( + borderRadius: BorderRadiusStyle + .roundedBorder15), + child: ListView.builder( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: Mydata.transaction.length, + itemBuilder: (context, index) { + // print(Mydata + // .transaction[index].date.seconds); + // var date1 = DateTime.fromMillisecondsSinceEpoch(Mydata + // .transaction[index].date.toDate()); + + return Padding( + padding: const EdgeInsets.all(8.0), + child: Card( + color: Colors.black12, + child: Padding( + padding: + const EdgeInsets.all(8.0), + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Text( + "To Account Number: " + + Mydata + .transaction[ + index] + .toacc + .toString(), + ), + Text( + "Amount" + + Mydata + .transaction[ + index] + .amount + .toString(), + ), + Text( + "Date : " + + Mydata + .transaction[ + index] + .date + .toDate() + .toString() + .substring(0, 10), + ), + ], + ), + ), + ), + ); + })), + ])))) + : Center(child: CircularProgressIndicator()), + floatingActionButton: FloatingActionButton( + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => const FAQ())); + }, + child: Text("FAQ"), + ), + )), + ], + ); + } + + onTapTxtSeeAll(BuildContext context) {} + + onTapMenu(BuildContext context) { + _scaffoldKey.currentState?.openDrawer(); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/Screens/addpayee.dart b/Team Captains/GenAIRush/finovo/lib/Screens/addpayee.dart new file mode 100644 index 00000000..3b565c57 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/Screens/addpayee.dart @@ -0,0 +1,184 @@ +import 'package:finovo/Screens/Home.dart'; +import 'package:finovo/services/crud.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/src/widgets/placeholder.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class Addpayee extends StatefulWidget { + const Addpayee({super.key}); + + @override + State createState() => _AddpayeeState(); +} + +class _AddpayeeState extends State { + final TextEditingController accountnumber = TextEditingController(); + final TextEditingController name = TextEditingController(); + bool load = false; + bool selected = true; + @override + Widget build(BuildContext context) { + double width = MediaQuery.of(context).size.width; + double height = MediaQuery.of(context).size.height; + return Stack( + children: [ + Container(width: width,height: height,child: Image.asset("assets/background.jpg",fit: BoxFit.cover,)), + Scaffold(backgroundColor: Colors.transparent, + // appBar: AppBar(backgroundColor: Colors.black, + // title: Text("Finovo"), + // ), + body: Container( + child: Column( + children: [ + SizedBox(height: height/25,), + Text("Finovo",style: TextStyle(color: Colors.white,fontSize: 35),), SizedBox(height: height/8,), + + Padding( + padding: const EdgeInsets.only(left: 22, right: 22, top: 8), + child: Padding( + padding: const EdgeInsets.all(8), + child: TextField( + controller: accountnumber, + style: TextStyle(color: Colors.white), + onChanged: (String value) {}, + decoration: InputDecoration( + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(25), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.white), + borderRadius: BorderRadius.circular(25), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(width: 3, color: Colors.white), + borderRadius: BorderRadius.circular(25), + ), + fillColor: Colors.white, + focusColor: Colors.white, + // hintText: "Email", + label: const Text( + "Account Number", + style: TextStyle(color: Colors.white), + ), + hintStyle: TextStyle(color: Colors.white)), + ), + ), + ), + const SizedBox( + height: 10, + ), + Padding( + padding: + const EdgeInsets.only(left: 22, right: 22, bottom: 8, top: 8), + child: Padding( + padding: const EdgeInsets.all(8), + child: TextField( + controller: name, + style: TextStyle(color: Colors.white), + obscureText: true, + onChanged: (String value) {}, + decoration: InputDecoration( + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(25), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.white), + borderRadius: BorderRadius.circular(25), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(width: 3, color: Colors.white), + borderRadius: BorderRadius.circular(25), + ), + fillColor: Colors.white, + // hintText: "Password", + label: Text( + "Name", + style: TextStyle(color: Colors.white), + ), + hintStyle: TextStyle(color: Colors.white)), + ), + ), + ), + SizedBox(height: height/10,), + InkWell( + onTap: () {}, + child: Padding( + padding: EdgeInsets.only( + top: 0.0, left: width / 10, right: width / 10, bottom: 20.0), + child: InkWell( + onTap: () async { + setState(() { + load = !load; + selected = !selected; + }); + // AuthService().signInUser( + // context: context, + // email: emailController.text, + // password: passwordController.text); + // Crud().read(); + // Navigator.push( + // context, + // MaterialPageRoute(builder: (context) => const Home()), + // ); + }, + child: AnimatedContainer( + width: selected ? width : height / 15, + height: height / 20, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color.fromARGB(255, 105, 104, 104), + blurRadius: 10, + spreadRadius: -2, + offset: Offset(-2, -2), + ), + BoxShadow( + color: Color.fromARGB(255, 117, 116, 116), + blurRadius: 20, + spreadRadius: -2, + offset: Offset(2, 2), + ), + ], + color: Colors.black, + borderRadius: BorderRadius.all( + Radius.circular(20.0), + ), + ), + duration: const Duration(milliseconds: 500), + child: Column( + children: [ + load + ? Container( + width: width / 1.2, + height: 40, + child: Center(child: CircularProgressIndicator()), + ) + : Padding( + padding: EdgeInsets.only( + top: height / 65, right: 20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Add", //one8@gmail.com one812345 + style: GoogleFonts.bebasNeue( + fontSize: 20, color: Colors.amber), + ), + ], + ), + ), + ], + ), + ), + ), + ), + ) + ], + ), + ), + ), + ], + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/Screens/faq.dart b/Team Captains/GenAIRush/finovo/lib/Screens/faq.dart new file mode 100644 index 00000000..02eee6fb --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/Screens/faq.dart @@ -0,0 +1,113 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/src/widgets/placeholder.dart'; +import 'package:speech_to_text/speech_to_text.dart' as stt; +import 'package:http/http.dart' as http; + +class FAQ extends StatefulWidget { + const FAQ({super.key}); + + @override + State createState() => _FAQState(); +} + +class _FAQState extends State { + bool isListening1 = false; + final stt.SpeechToText _speachtotext = stt.SpeechToText(); + String speechToText = "Press the button and start speaking"; + String ans=""; + + listeneng() async { + if (isListening1 == false) { + bool available = await _speachtotext.initialize( + onStatus: (v) => {}, onError: (v) => {}); + if (available) { + setState(() { + isListening1 = true; + }); + _speachtotext.listen( + onResult: (value) { + speechToText = value.recognizedWords; + }, + ); + } + // await send(speechToText).toString(); + } else { + setState(() { + isListening1 = false; + }); + } + } + + late String responce; + + var output; + Future send(String text) async { + var headers = { + 'Content-Type': 'application/json', + 'Authorization': + 'Bearer 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' + }; + var request = http.Request( + 'POST', Uri.parse('https://api.openai.com/v1/completions')); + request.body = json.encode({ + "model": "text-davinci-003", + "prompt": "Yes,This application can be used on multiple devices. Download the app, enter your personal details and create a login to sign up successfully.During the registration process, you'll typically need to provide your full name, date of birth, address, phone number, email, and identification details.Yes, reputable banking apps implement robust security measures to protect user data and transactions, ensuring a safe user experience.To log in, open the app, enter your registered username/email and password, or use biometric authentication if enabled. Biometric authentication is not available in this application. Yes, banking app allow you to transfer funds easily between your linked accounts within the app.To add a new payee for fund transfers, go to the app's Transfer or Payments section, select Add Payee, and provide the payee's details.The daily transaction limit for the banking app may vary depending on the bank's policies and your account type.To set up recurring payments, access the app's Bill Pay or Recurring Payments section, specify payee details, amount, frequency, and duration.You can view your transaction history in the banking app by navigating to the Transactions section.No, you only view in application only.To report a lost or stolen card, go to the app's Card Services or Support section, select the card in question, and report it immediately.To apply for a new credit card or loan through the app, find the Apply or Credit/Loan section, provide necessary details, and follow the application process.Yes, banking app allow you to block or unblock your debit/credit card for added security and convenience.To activate a new debit/credit card, go to the app's Card Services or Manage Cards section, select the new card, and follow the activation instructions.Yes, you can often apply for an overdraft facility through the app by navigating to the Services or Overdraft section and following the application process.To check your account balance on the app, go to the Accounts or Balance section, and your current balance will be displayed. Yes, banking app offer a feature to set spending limits on your debit/credit card for better financial control and security.Yes, you can often request a new checkbook through the app by visiting the Services or Request Checkbook section and following the steps.To change your mobile number or email address on the app, access the Profile or Settings section, select Contact Information, and update the details.If you encounter an error while using the app, try restarting it first. If the issue persists, contact customer support for assistance. To set up account alerts and notifications, access the app's Settings or Notifications section, choose the alert types, and specify your preferences.Yes, banking app allow you to schedule future transactions by selecting the desired date and time during the transfer process.To redeem credit card reward points, access the app's Rewards or Redeem Points section, choose the rewards, and follow the redemption process.Yes, you can often apply for a fixed deposit or investment through the app by visiting the Investments or Fixed Deposit section and following the application process.To update communication preferences, access the app's Profile or Settings section, select Communication Preferences, and customize your settings accordingly.Yes, banking app offer a feature to request a temporary increase in your card's spending limit for specific transactions or time periods. To find the nearest ATM or branch, use the app's Locator or Find Us feature, and it will display nearby locations.To dispute a transaction made through the app, contact customer support immediately and provide details to initiate the dispute process.Yes, many banking apps offer the option to apply for new insurance policies for added convenience and financial services.To set up a travel notification for your card, go to the app's Card Services or Travel Notifications section, specify your travel dates and destinations.Yes, many banking apps allow you to download and export transaction data in formats like CSV for budgeting and financial management.To change your app's login PIN or pattern, go to the app's Security or Settings section, select Change PIN/Pattern, and follow the instructions.Some banking apps offer a feature to split expenses and bills with friends, allowing you to divide costs and make payments collaboratively. banking app offer a feature to split expenses and bills with friends, allowing you to divide costs and make payments collaboratively.To check the status of a loan or credit card application, access the app's Applications or Status section, and look for your specific application. Alternatively, contact customer support for assistance.Yes, you can make bill payments through the app by selecting the Bill Pay or Payments section and following the payment process for your utility, credit card, or other bills.To contact customer support through the app, look for the Support, Help, or Contact Us section. You may find options for chat, email, or phone support.Yes, banking app are available in multiple languages to cater to a diverse range of users and provide a better user experience.If your device supports fingerprint authentication and you have set up your fingerprint as a security method, you should see the option to enable or disable it within the app's security settings. Yes, you can set up recurring transfers to external bank accounts for regular payments through the banking app. ans the question$text", + "max_tokens": 250, + "temperature": 0, + "top_p": 1 + }); + request.headers.addAll(headers); + http.StreamedResponse response = await request.send(); + if (response.statusCode == 200) { + responce = await response.stream.bytesToString(); + // print("responce"); print(responce); + + return responce; + } else { + print(response.reasonPhrase); + return "Error"; + } + } +bool load=false; + @override + Widget build(BuildContext context) { + double width = MediaQuery.of(context).size.width; + double height = MediaQuery.of(context).size.height; + return Stack( + children: [ Image.asset("assets/background.jpg",width: width,height: height,fit: BoxFit.cover,), + + Scaffold(backgroundColor: Colors.transparent + , + appBar: AppBar( + title: Text("FAQ"), + ),body:Padding( + padding: const EdgeInsets.all(8.0), + child: Text(ans,style: TextStyle(color: Colors.white,fontSize: 20),), + ), + floatingActionButton: FloatingActionButton( + onPressed: () async { + setState(() { + load=true; + }); + await listeneng(); + + output = await send(speechToText); + var output2 = json.decode(output); + print("output"); + print(output2); + // var output3=json.decode(output2['choices'][0]['text']); + ans = output2['choices'][0]['text'].toString(); + setState(() { + load=false; + }); + }, + child: Icon(Icons.search), + ), + ), + ], + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/Screens/login.dart b/Team Captains/GenAIRush/finovo/lib/Screens/login.dart new file mode 100644 index 00000000..614d53d0 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/Screens/login.dart @@ -0,0 +1,325 @@ +import 'package:finovo/Data/data.dart'; +import 'package:finovo/Screens/Home.dart'; +import 'package:finovo/services/Auth.dart'; +import 'package:finovo/services/crud.dart'; +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:firebase_auth/firebase_auth.dart'; + +class LoginPageWidget extends StatefulWidget { + const LoginPageWidget({super.key}); + + @override + State createState() => _LoginPageWidgetState(); +} + +class _LoginPageWidgetState extends State { + @override + final TextEditingController emailController = TextEditingController(); + final TextEditingController passwordController = TextEditingController(); + bool load = false; + bool selected = true; + User? user; + Widget build(BuildContext context) { + double width = MediaQuery.of(context).size.width; + double height = MediaQuery.of(context).size.height; + return SafeArea( + child: Stack( + children: [ + Image.asset("assets/background.jpg",width: width,height: height,fit: BoxFit.cover,), + Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: Colors.transparent, + body: SingleChildScrollView( + child: Column( + children: [ + SizedBox( + height: height / 100, + ), + // Align( + // alignment: Alignment.center, + // child: Image.asset( + // "assets/images/logo.png", + // scale: 3, + // ), + // ), + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height / 1.1, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: height / 8, + ), + Text( + 'Login', + style: GoogleFonts.bebasNeue( + fontWeight: FontWeight.w500, + fontSize: 40, + color: Colors.white), + ), + SizedBox( + height: 20, + ), + Padding( + padding: const EdgeInsets.only(left: 25, right: 25), + child: Column( + children: [ + SizedBox( + height: 20, + ), + Padding( + padding: const EdgeInsets.only( + left: 22, right: 22, top: 8), + child: Padding( + padding: const EdgeInsets.all(8), + child: TextField( + controller: emailController, + style: TextStyle(color: Colors.white), + onChanged: (String value) {}, + decoration: InputDecoration( + border: OutlineInputBorder( + borderRadius: + BorderRadius.circular(25), + ), + enabledBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.green), + borderRadius: + BorderRadius.circular(25), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + width: 3, color: Colors.green), + borderRadius: + BorderRadius.circular(25), + ), + fillColor: Colors.white, + focusColor: Colors.white, + // hintText: "Email", + label: const Text( + "Email", + style: TextStyle(color: Colors.white), + ), + hintStyle: + TextStyle(color: Colors.white)), + ), + ), + ), + const SizedBox( + height: 10, + ), + Padding( + padding: const EdgeInsets.only( + left: 22, right: 22, bottom: 8, top: 8), + child: Padding( + padding: const EdgeInsets.all(8), + child: TextField( + controller: passwordController, + style: TextStyle(color: Colors.white), + obscureText: true, + onChanged: (String value) {}, + decoration: InputDecoration( + border: OutlineInputBorder( + borderRadius: + BorderRadius.circular(25), + ), + enabledBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.green), + borderRadius: + BorderRadius.circular(25), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + width: 3, color: Colors.green), + borderRadius: + BorderRadius.circular(25), + ), + fillColor: Colors.white, + // hintText: "Password", + label: Text( + "Password", + style: TextStyle(color: Colors.white), + ), + hintStyle: + TextStyle(color: Colors.white)), + ), + ), + ), + Padding( + padding: + const EdgeInsets.only(left: 35, right: 35), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () {}, + child: const Text( + "Forgot Password?", + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.bold, + color: Colors.blue, + ), + ), + ), + InkWell( + onTap: () { + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => + // const PhoneAuth())); + }, + child: Column( + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + const Text( + "Don’t have an account?", + style: TextStyle( + fontSize: 12.0, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + GestureDetector( + onTap: () { + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => + // const PhoneAuth())); + }, + child: const Text( + "Sign Up", + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.bold, + color: Colors.blue, + ), + ), + ), + ], + ), + ), + ], + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () {}, + child: Padding( + padding: EdgeInsets.only( + top: 0.0, + left: width / 10, + right: width / 10, + bottom: 20.0), + child: InkWell( + onTap: () async { + setState(() { + load = !load; + selected = !selected; + }); + // AuthService().signInUser( + // context: context, + // email: emailController.text, + // password: passwordController.text); + user = await FireAuth + .signInUsingEmailPassword( + email: emailController.text, + password: passwordController.text, + context: context); + Mydata.accnumber = await Crud().read(emailController.text); + + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const Home()), + ); + }, + child: AnimatedContainer( + width: selected ? width : height / 15, + height: height / 20, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color.fromARGB( + 255, 105, 104, 104), + blurRadius: 10, + spreadRadius: -2, + offset: Offset(-2, -2), + ), + BoxShadow( + color: Color.fromARGB( + 255, 117, 116, 116), + blurRadius: 20, + spreadRadius: -2, + offset: Offset(2, 2), + ), + ], + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(20.0), + ), + ), + duration: + const Duration(milliseconds: 500), + child: Column( + children: [ + load + ? Container( + width: width / 1.2, + height: 40, + child: Center( + child: + CircularProgressIndicator()), + ) + : Padding( + padding: EdgeInsets.only( + top: height / 65, + right: 20.0), + child: Row( + mainAxisAlignment: + MainAxisAlignment + .center, + children: [ + Text( + "LOG IN", //one8@gmail.com one812345 + style: GoogleFonts + .bebasNeue( + fontSize: 20, + color: Colors + .amber), + ), + ], + ), + ), + ], + ), + ), + ), + ), + ), + ], + ), + ), + ], + ), + ) + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/core/app_export.dart b/Team Captains/GenAIRush/finovo/lib/core/app_export.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/core/app_export.dart @@ -0,0 +1 @@ + diff --git a/Team Captains/GenAIRush/finovo/lib/core/constants/constants.dart b/Team Captains/GenAIRush/finovo/lib/core/constants/constants.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/core/constants/constants.dart @@ -0,0 +1 @@ + diff --git a/Team Captains/GenAIRush/finovo/lib/core/utils/color_constant.dart b/Team Captains/GenAIRush/finovo/lib/core/utils/color_constant.dart new file mode 100644 index 00000000..147b334b --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/core/utils/color_constant.dart @@ -0,0 +1,75 @@ +import 'dart:ui'; +import 'package:flutter/material.dart'; + +class ColorConstant { + static Color whiteA700B2 = fromHex('#b2ffffff'); + + static Color red700 = fromHex('#d13329'); + + static Color green600 = fromHex('#359766'); + + static Color gray300Cc = fromHex('#cce6e3e7'); + + static Color pinkA200 = fromHex('#fe5c73'); + + static Color black900 = fromHex('#000000'); + + static Color blueGray800 = fromHex('#343c6a'); + + static Color blueGray900 = fromHex('#182651'); + + static Color indigo60014 = fromHex('#14314ca3'); + + static Color blueGray400 = fromHex('#888ea2'); + + static Color blueGray600 = fromHex('#505887'); + + static Color teal50 = fromHex('#dfeaf2'); + + static Color gray300 = fromHex('#e3e4e8'); + + static Color blueGray80001 = fromHex('#333b69'); + + static Color gray100 = fromHex('#f4f6fa'); + + static Color tealA400 = fromHex('#15dba9'); + + static Color gray10003 = fromHex('#f4f6f9'); + + static Color indigo300 = fromHex('#7a8fd0'); + + static Color gray10002 = fromHex('#f2f4f7'); + + static Color indigo100 = fromHex('#c6cfeb'); + + static Color gray10005 = fromHex('#f3f3f5'); + + static Color indigo200 = fromHex('#8e9ed6'); + + static Color gray10004 = fromHex('#f4f5f7'); + + static Color whiteA70026 = fromHex('#26ffffff'); + + static Color gray10001 = fromHex('#f4f4f6'); + + static Color blueGray40002 = fromHex('#888888'); + + static Color blueGray40001 = fromHex('#8c8f9d'); + + static Color indigo700 = fromHex('#2943a1'); + + static Color whiteA700 = fromHex('#ffffff'); + + static Color indigo500 = fromHex('#425ebd'); + + static Color indigo600 = fromHex('#314ca3'); + + static Color indigo30001 = fromHex('#718ebf'); + + static Color fromHex(String hexString) { + final buffer = StringBuffer(); + if (hexString.length == 6 || hexString.length == 7) buffer.write('ff'); + buffer.write(hexString.replaceFirst('#', '')); + return Color(int.parse(buffer.toString(), radix: 16)); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/core/utils/date_time_utils.dart b/Team Captains/GenAIRush/finovo/lib/core/utils/date_time_utils.dart new file mode 100644 index 00000000..8c960b84 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/core/utils/date_time_utils.dart @@ -0,0 +1,17 @@ +import 'package:intl/date_symbol_data_local.dart'; +import 'package:intl/intl.dart'; + +const String DD_MM_YYYY = 'dd/MM/yyyy'; + +extension DateTimeExtension on DateTime { + /// Return a string representing [date] formatted according to our locale + String format([ + String pattern = DD_MM_YYYY, + String? locale, + ]) { + if (locale != null && locale.isNotEmpty) { + initializeDateFormatting(locale); + } + return DateFormat(pattern, locale).format(this); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/core/utils/image_constant.dart b/Team Captains/GenAIRush/finovo/lib/core/utils/image_constant.dart new file mode 100644 index 00000000..24a763f6 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/core/utils/image_constant.dart @@ -0,0 +1,165 @@ +class ImageConstant { + static String imgGroup346chart = 'assets/images/img_group346chart.svg'; + + static String imgGroup1049 = 'assets/images/img_group1049.svg'; + + static String imgUser45x45 = 'assets/images/img_user_45x45.svg'; + + static String imgCar = 'assets/images/img_car.svg'; + + static String imgFileBlueGray400 = 'assets/images/img_file_blue_gray_400.svg'; + + static String imgLogoIndigo600 = 'assets/images/img_logo_indigo_600.png'; + + static String imgRefresh = 'assets/images/img_refresh.svg'; + + static String imgGroup1032 = 'assets/images/img_group1032.svg'; + + static String imgEllipse32WhiteA700 = + 'assets/images/img_ellipse32_white_a700.svg'; + + static String imgBag = 'assets/images/img_bag.svg'; + + static String imgInfo = 'assets/images/img_info.svg'; + + static String imgEllipse1850x503 = 'assets/images/img_ellipse18_50x50_3.png'; + + static String imgArrowleft = 'assets/images/img_arrowleft.svg'; + + static String imgArrowdown = 'assets/images/img_arrowdown.svg'; + + static String imgContrast = 'assets/images/img_contrast.svg'; + + static String imgGraph1 = 'assets/images/img_graph1.svg'; + + static String imgCheckmarkBlueGray400 = + 'assets/images/img_checkmark_blue_gray_400.svg'; + + static String imgSettings21 = 'assets/images/img_settings21.svg'; + + static String imgQuestionBlueGray400 = + 'assets/images/img_question_blue_gray_400.svg'; + + static String imgLock = 'assets/images/img_lock.svg'; + + static String imgMenu = 'assets/images/img_menu.svg'; + + static String imgClock = 'assets/images/img_clock.svg'; + + static String imgArrowGreen600 = 'assets/images/img_arrow_green_600.svg'; + + static String imgVideocamera = 'assets/images/img_videocamera.svg'; + + static String imgAirplane = 'assets/images/img_airplane.svg'; + + static String imgReply = 'assets/images/img_reply.svg'; + + static String imgArrowrightBlueGray400 = + 'assets/images/img_arrowright_blue_gray_400.svg'; + + static String imgArrow = 'assets/images/img_arrow.svg'; + + static String imgEllipse3735x35 = 'assets/images/img_ellipse37_35x35.png'; + + static String imgGroup1045 = 'assets/images/img_group1045.svg'; + + static String imgContrast45x45 = 'assets/images/img_contrast_45x45.svg'; + + static String imgUser = 'assets/images/img_user.svg'; + + static String imgGroup9320 = 'assets/images/img_group9320.svg'; + + static String imgGoogle45x45 = 'assets/images/img_google_45x45.svg'; + + static String imgLightbulb = 'assets/images/img_lightbulb.svg'; + + static String imgLink = 'assets/images/img_link.svg'; + + static String imgClock45x45 = 'assets/images/img_clock_45x45.svg'; + + static String imgSend = 'assets/images/img_send.svg'; + + static String imgGroup = 'assets/images/img_group.svg'; + + static String imgTicket18x18 = 'assets/images/img_ticket_18x18.svg'; + + static String imgEllipse1850x501 = 'assets/images/img_ellipse18_50x50_1.png'; + + static String imgLogo = 'assets/images/img_logo.png'; + + static String imgGroup438 = 'assets/images/img_group438.svg'; + + static String imgSettings = 'assets/images/img_settings.svg'; + + static String imgGroup9321 = 'assets/images/img_group9321.svg'; + + static String imgEllipse28170x170 = 'assets/images/img_ellipse28_170x170.png'; + + static String imgUserBlueGray400 = 'assets/images/img_user_blue_gray_400.svg'; + + static String imgArrowrightIndigo600 = + 'assets/images/img_arrowright_indigo_600.svg'; + + static String imgGroup747 = 'assets/images/img_group747.svg'; + + static String imgSignal = 'assets/images/img_signal.svg'; + + static String imgGroup9322 = 'assets/images/img_group9322.svg'; + + static String imgGroup27 = 'assets/images/img_group27.svg'; + + static String imgMap = 'assets/images/img_map.svg'; + + static String imgArrowleftIndigo600 = + 'assets/images/img_arrowleft_indigo_600.svg'; + + static String imgTransfer1 = 'assets/images/img_transfer1.svg'; + + static String imgGroup761 = 'assets/images/img_group761.svg'; + + static String imgGoogleBlueA200 = 'assets/images/img_google_blue_a200.svg'; + + static String imgBag45x45 = 'assets/images/img_bag_45x45.svg'; + + static String imgFloatingicon = 'assets/images/img_floatingicon.svg'; + + static String imgAlarm = 'assets/images/img_alarm.svg'; + + static String imgVolume = 'assets/images/img_volume.svg'; + + static String imgSearch = 'assets/images/img_search.svg'; + + static String imgFile = 'assets/images/img_file.svg'; + + static String imgGroup9319 = 'assets/images/img_group9319.svg'; + + static String imgLocation = 'assets/images/img_location.svg'; + + static String imgEllipse1850x502 = 'assets/images/img_ellipse18_50x50_2.png'; + + static String imgCheckmark = 'assets/images/img_checkmark.svg'; + + static String imgGoogle = 'assets/images/img_google.svg'; + + static String imgGroup27Indigo600 = + 'assets/images/img_group27_indigo_600.svg'; + + static String imgTicket = 'assets/images/img_ticket.svg'; + + static String imgChipcard = 'assets/images/img_chipcard.png'; + + static String imgQuestion = 'assets/images/img_question.svg'; + + static String imgService1 = 'assets/images/img_service1.svg'; + + static String imgEllipse32 = 'assets/images/img_ellipse32.svg'; + + static String imgMinimize = 'assets/images/img_minimize.svg'; + + static String imgHome = 'assets/images/img_home.svg'; + + static String imgUserBlueGray90001 = + 'assets/images/img_user_blue_gray_900_01.svg'; + + static String imageNotFound = 'assets/images/image_not_found.png'; +} diff --git a/Team Captains/GenAIRush/finovo/lib/core/utils/size_utils.dart b/Team Captains/GenAIRush/finovo/lib/core/utils/size_utils.dart new file mode 100644 index 00000000..6542b09d --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/core/utils/size_utils.dart @@ -0,0 +1,120 @@ +import 'package:flutter/material.dart'; + +// This is where the magic happens. +// This functions are responsible to make UI responsive across all the mobile devices. + +Size size = WidgetsBinding.instance.window.physicalSize / + WidgetsBinding.instance.window.devicePixelRatio; + +// Caution! If you think these are static values and are used to build a static UI, you mustn’t. +// These are the Viewport values of your Figma Design. +// These are used in the code as a reference to create your UI Responsively. +const num FIGMA_DESIGN_WIDTH = 375; +const num FIGMA_DESIGN_HEIGHT = 812; +const num FIGMA_DESIGN_STATUS_BAR = 44; + +///This method is used to get device viewport width. +get width { + return size.width; +} + +///This method is used to get device viewport height. +get height { + num statusBar = + MediaQueryData.fromWindow(WidgetsBinding.instance.window).viewPadding.top; + num bottomBar = MediaQueryData.fromWindow(WidgetsBinding.instance.window) + .viewPadding + .bottom; + num screenHeight = size.height - statusBar - bottomBar; + return screenHeight; +} + +///This method is used to set padding/margin (for the left and Right side) & width of the screen or widget according to the Viewport width. +double getHorizontalSize(double px) { + return ((px * width) / FIGMA_DESIGN_WIDTH); +} + +///This method is used to set padding/margin (for the top and bottom side) & height of the screen or widget according to the Viewport height. +double getVerticalSize(double px) { + return ((px * height) / (FIGMA_DESIGN_HEIGHT - FIGMA_DESIGN_STATUS_BAR)); +} + +///This method is used to set smallest px in image height and width +double getSize(double px) { + var height = getVerticalSize(px); + var width = getHorizontalSize(px); + if (height < width) { + return height.toInt().toDouble(); + } else { + return width.toInt().toDouble(); + } +} + +///This method is used to set text font size according to Viewport +double getFontSize(double px) { + return getSize(px); +} + +///This method is used to set padding responsively +EdgeInsetsGeometry getPadding({ + double? all, + double? left, + double? top, + double? right, + double? bottom, +}) { + return getMarginOrPadding( + all: all, + left: left, + top: top, + right: right, + bottom: bottom, + ); +} + +///This method is used to set margin responsively +EdgeInsetsGeometry getMargin({ + double? all, + double? left, + double? top, + double? right, + double? bottom, +}) { + return getMarginOrPadding( + all: all, + left: left, + top: top, + right: right, + bottom: bottom, + ); +} + +///This method is used to get padding or margin responsively +EdgeInsetsGeometry getMarginOrPadding({ + double? all, + double? left, + double? top, + double? right, + double? bottom, +}) { + if (all != null) { + left = all; + top = all; + right = all; + bottom = all; + } + return EdgeInsets.only( + left: getHorizontalSize( + left ?? 0, + ), + top: getVerticalSize( + top ?? 0, + ), + right: getHorizontalSize( + right ?? 0, + ), + bottom: getVerticalSize( + bottom ?? 0, + ), + ); +} diff --git a/Team Captains/GenAIRush/finovo/lib/main.dart b/Team Captains/GenAIRush/finovo/lib/main.dart new file mode 100644 index 00000000..b3e5273d --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/main.dart @@ -0,0 +1,38 @@ +import 'package:finovo/Screens/Home.dart'; +import 'package:finovo/Screens/addpayee.dart'; +import 'package:finovo/Screens/login.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/material.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); +await Firebase.initializeApp(); + + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Finovo', + theme: ThemeData( + // This is the theme of your application. + // + // Try running your application with "flutter run". You'll see the + // application has a blue toolbar. Then, without quitting the app, try + // changing the primarySwatch below to Colors.green and then invoke + // "hot reload" (press "r" in the console where you ran "flutter run", + // or simply save your changes to "hot reload" in a Flutter IDE). + // Notice that the counter didn't reset back to zero; the application + // is not restarted. + primarySwatch: Colors.blue, + ), + home: const LoginPageWidget(), + ); + } +} + diff --git a/Team Captains/GenAIRush/finovo/lib/model/Transactions.dart b/Team Captains/GenAIRush/finovo/lib/model/Transactions.dart new file mode 100644 index 00000000..add1ef13 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/model/Transactions.dart @@ -0,0 +1,14 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; + +class Transactionsclass { + String fromacc; + String toacc; + String amount; + Timestamp date; + Transactionsclass({ + required this.amount, + required this.date, + required this.fromacc, + required this.toacc, + }); +} diff --git a/Team Captains/GenAIRush/finovo/lib/presentation/editProfile/Editprofile.dart b/Team Captains/GenAIRush/finovo/lib/presentation/editProfile/Editprofile.dart new file mode 100644 index 00000000..45392d77 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/presentation/editProfile/Editprofile.dart @@ -0,0 +1,174 @@ +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:finovo/widgets/custom_button.dart'; +import 'package:finovo/widgets/custom_text_form_field.dart'; +import 'package:flutter/material.dart'; + + +// ignore_for_file: must_be_immutable +class SettingEditProfilePage extends StatefulWidget { + @override + _SettingEditProfilePageState createState() => _SettingEditProfilePageState(); +} + +class _SettingEditProfilePageState extends State + with AutomaticKeepAliveClientMixin { + TextEditingController languageController = TextEditingController(); + + TextEditingController languageOneController = TextEditingController(); + + TextEditingController emailOneController = TextEditingController(); + + TextEditingController passwordOneController = TextEditingController(); + + List dropdownItemList = [ + "Item One", + "Item Two", + "Item Three", + ]; + + TextEditingController group572Controller = TextEditingController(); + + TextEditingController group572OneController = TextEditingController(); + + TextEditingController group572TwoController = TextEditingController(); + + TextEditingController zipcodeController = TextEditingController(); + + TextEditingController group572ThreeController = TextEditingController(); + + @override + bool get wantKeepAlive => true; + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: Colors.transparent, + resizeToAvoidBottomInset: false, + body: SizedBox( + width: size.width, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: getPadding( + left: 20, + top: 25, + right: 20, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + + Padding( + padding: getPadding( + top: 22, + ), + child: Text( + "Your Name", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13Bluegray400, + ), + ), + CustomTextFormField( + focusNode: FocusNode(), + controller: languageController, + hintText: "Charlene Reed ", + margin: getMargin( + top: 8, + ), + ), + Padding( + padding: getPadding( + top: 16, + ), + child: Text( + "User Name", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13Bluegray400, + ), + ), + CustomTextFormField( + focusNode: FocusNode(), + controller: languageOneController, + hintText: "Charlene Reed ", + margin: getMargin( + top: 8, + ), + ), + Padding( + padding: getPadding( + top: 16, + ), + child: Text( + "Email", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13Bluegray400, + ), + ), + CustomTextFormField( + focusNode: FocusNode(), + controller: emailOneController, + hintText: "user@gmail.com ", + margin: getMargin( + top: 8, + ), + ), + Padding( + padding: getPadding( + top: 16, + ), + child: Text( + "Password", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13Bluegray400, + ), + ), + CustomTextFormField( + focusNode: FocusNode(), + controller: passwordOneController, + hintText: "**********", + margin: getMargin( + top: 8, + ), + textInputType: TextInputType.visiblePassword, + isObscureText: true, + ), + + + Padding( + padding: getPadding( + top: 17, + ), + + ), + + CustomButton( + height: getVerticalSize( + 40, + ), + text: "Save", + margin: getMargin( + top: 20, + ), + shape: ButtonShape.RoundedBorder7, + padding: ButtonPadding.PaddingAll11, + fontStyle: ButtonFontStyle.InterMedium15WhiteA700, + ), + ], + ), + ), + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/home_screen.dart b/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/home_screen.dart new file mode 100644 index 00000000..09716779 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/home_screen.dart @@ -0,0 +1,143 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/theme/app_decoration.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:finovo/widgets/app_bar/appbar_circleimage.dart'; +import 'package:finovo/widgets/app_bar/appbar_image.dart'; +import 'package:finovo/widgets/app_bar/appbar_title.dart'; +import 'package:finovo/widgets/app_bar/custom_app_bar.dart'; + +import '../home_screen/widgets/listbalance_item_widget.dart'; +import '../home_screen/widgets/listvideocamera_item_widget.dart'; + +import 'package:flutter/material.dart'; + + +// ignore_for_file: must_be_immutable +class HomeScreen extends StatelessWidget { + TextEditingController group420Controller = TextEditingController(); + + GlobalKey _scaffoldKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + key: _scaffoldKey, + backgroundColor: ColorConstant.gray100, + appBar: CustomAppBar( + height: getVerticalSize(122), + centerTitle: true, + title: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row(children: [ + AppbarImage( + height: getSize(24), + width: getSize(24), + //svgPath: ImageConstant.imgMenu, + margin: getMargin(top: 5, bottom: 6), + onTap: () { + onTapMenu(context); + }), + AppbarTitle( + text: "HomePage", + margin: getMargin(left: 133, top: 13, bottom: 6)), + AppbarCircleimage( + //imagePath: ImageConstant.imgEllipse3735x35, + margin: getMargin(left: 82)) + ]), + SizedBox( + height: 30, + ) + ]), + styleType: Style.bgFillWhiteA700), + body: SizedBox( + width: size.width, + child: SingleChildScrollView( + child: Padding( + padding: getPadding(left: 24, top: 24, bottom: 5), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: getPadding(right: 24), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text("My Card", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterSemiBold16), + GestureDetector( + onTap: () { + onTapTxtSeeAll(context); + }, + child: Padding( + padding: getPadding(bottom: 2), + child: Text("", + overflow: + TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle + .txtInterSemiBold14))) + ])), + Align( + alignment: Alignment.centerRight, + child: Container( + height: getVerticalSize(184), + child: ListView.separated( + padding: getPadding(top: 14), + scrollDirection: Axis.horizontal, + separatorBuilder: (context, index) { + return SizedBox( + height: getVerticalSize(20)); + }, + itemCount: 1, + itemBuilder: (context, index) { + return ListbalanceItemWidget(); + }))), + Padding( + padding: getPadding(top: 22), + child: Text("Transaction", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterSemiBold16)), + Container( + margin: getMargin(top: 16, right: 24), + padding: getPadding( + left: 19, top: 20, right: 19, bottom: 20), + decoration: AppDecoration.fillWhiteA700 + .copyWith( + borderRadius: BorderRadiusStyle + .roundedBorder15), + child: ListView.separated( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + separatorBuilder: (context, index) { + return SizedBox( + height: getVerticalSize(12)); + }, + itemCount: 3, + itemBuilder: (context, index) { + return ListvideocameraItemWidget(); + })), + + + + + + + + + ])))))); + } + + onTapTxtSeeAll(BuildContext context) {} + + onTapMenu(BuildContext context) { + _scaffoldKey.currentState?.openDrawer(); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/widgets/listbalance_item_widget.dart b/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/widgets/listbalance_item_widget.dart new file mode 100644 index 00000000..f509c917 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/widgets/listbalance_item_widget.dart @@ -0,0 +1,182 @@ +import 'package:finovo/Data/data.dart'; +import 'package:finovo/core/utils/image_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/theme/app_decoration.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:finovo/widgets/custom_image_view.dart'; +import 'package:flutter/material.dart'; + + +// ignore: must_be_immutable +class ListbalanceItemWidget extends StatelessWidget { + ListbalanceItemWidget(); + + @override + Widget build(BuildContext context) { + return IntrinsicWidth( + child: Align( + alignment: Alignment.center, + child: Container( + margin: getMargin( + right: 40, + ), + decoration: AppDecoration.fillIndigo600.copyWith( + borderRadius: BorderRadiusStyle.roundedBorder15, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Align( + alignment: Alignment.center, + child: Padding( + padding: getPadding( + top: 17, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "Balance", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular11, + ), + Padding( + padding: getPadding( + top: 2, + ), + child: Text( + Mydata.balance, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular16, + ), + ), + ], + ), + + ], + ), + ), + ), + Padding( + padding: getPadding( + left: 20, + top: 19, + ), + child: Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "CARD HOLDER", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular10, + ), + Padding( + padding: getPadding( + top: 4, + ), + child: Text( + Mydata.name, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13, + ), + ), + ], + ), + Padding( + padding: getPadding( + left: 50, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "VALID THRU", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular10, + ), + Padding( + padding: getPadding( + top: 4, + ), + child: Text( + "12/22", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13, + ), + ), + ], + ), + ), + ], + ), + ), + Container( + margin: getMargin( + top: 14, + ), + padding: getPadding( + left: 17, + top: 15, + right: 17, + bottom: 15, + ), + decoration: + AppDecoration.gradientWhiteA70026WhiteA70026.copyWith( + borderRadius: BorderRadiusStyle.customBorderBL15, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: getPadding( + left: 3, + bottom: 1, + ), + child: Text( + Mydata.accnumber.toString(), + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular15, + ), + ), + CustomImageView( + svgPath: ImageConstant.imgContrast, + height: getVerticalSize( + 18, + ), + width: getHorizontalSize( + 27, + ), + margin: getMargin( + left: 57, + bottom: 1, + ), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/widgets/listvideocamera_item_widget.dart b/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/widgets/listvideocamera_item_widget.dart new file mode 100644 index 00000000..6212fe8a --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/presentation/home_screen/widgets/listvideocamera_item_widget.dart @@ -0,0 +1,72 @@ +import 'package:finovo/core/utils/image_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:finovo/widgets/custom_icon_button.dart'; +import 'package:finovo/widgets/custom_image_view.dart'; +import 'package:flutter/material.dart'; + + +// ignore: must_be_immutable +class ListvideocameraItemWidget extends StatelessWidget { + ListvideocameraItemWidget(); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + CustomIconButton( + height: 50, + width: 50, + shape: IconButtonShape.CircleBorder25, + child: CustomImageView( + svgPath: ImageConstant.imgVideocamera, + ), + ), + Padding( + padding: getPadding( + left: 15, + top: 8, + bottom: 5, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterMedium14Bluegray900, + ), + Padding( + padding: getPadding( + top: 3, + ), + child: Text( + "", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular12, + ), + ), + ], + ), + ), + Spacer(), + Padding( + padding: getPadding( + top: 18, + bottom: 18, + ), + child: Text( + "", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterMedium11, + ), + ), + ], + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/presentation/setting_preference_page/setting_preference_page.dart b/Team Captains/GenAIRush/finovo/lib/presentation/setting_preference_page/setting_preference_page.dart new file mode 100644 index 00000000..67ae0899 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/presentation/setting_preference_page/setting_preference_page.dart @@ -0,0 +1,102 @@ +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:finovo/widgets/custom_button.dart'; +import 'package:finovo/widgets/custom_text_form_field.dart'; +import 'package:flutter/material.dart'; + + +// ignore_for_file: must_be_immutable +class SettingPreferencePage extends StatefulWidget { + @override + _SettingPreferencePageState createState() => _SettingPreferencePageState(); +} + +class _SettingPreferencePageState extends State + with AutomaticKeepAliveClientMixin { + TextEditingController currencyOneController = TextEditingController(); + + TextEditingController timezoneOneController = TextEditingController(); + + @override + bool get wantKeepAlive => true; + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: Colors.transparent, + resizeToAvoidBottomInset: false, + body: SizedBox( + width: size.width, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: getPadding( + left: 20, + top: 23, + right: 20, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Account Number", + + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13Bluegray400, + ), + CustomTextFormField( + focusNode: FocusNode(), + controller: currencyOneController, + hintText: "A/c", + margin: getMargin( + top: 7, + ), + ), + Padding( + padding: getPadding( + top: 16, + ), + child: Text( + "Name", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterRegular13Bluegray400, + ), + ), + CustomTextFormField( + focusNode: FocusNode(), + controller: timezoneOneController, + hintText: "Enter payee name", + margin: getMargin( + top: 8, + ), + textInputAction: TextInputAction.done, + ), + + CustomButton( + height: getVerticalSize( + 40, + ), + text: "Save", + margin: getMargin( + top: 17, + ), + shape: ButtonShape.RoundedBorder7, + padding: ButtonPadding.PaddingAll11, + fontStyle: ButtonFontStyle.InterMedium15WhiteA700, + ), + ], + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/services/Auth.dart b/Team Captains/GenAIRush/finovo/lib/services/Auth.dart new file mode 100644 index 00000000..e060fc31 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/services/Auth.dart @@ -0,0 +1,57 @@ +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/material.dart'; + +class FireAuth { + static Future registerUsingEmailPassword({ + required String name, + required String email, + required String password, + }) async { + FirebaseAuth auth = FirebaseAuth.instance; + User? user; + try { + UserCredential userCredential = await auth.createUserWithEmailAndPassword( + email: email, + password: password, + ); + user = userCredential.user; + await user!.updateProfile(displayName: name); + await user.reload(); + user = auth.currentUser; + } on FirebaseAuthException catch (e) { + if (e.code == 'weak-password') { + print('The password provided is too weak.'); + } else if (e.code == 'email-already-in-use') { + print('The account already exists for that email.'); + } + } catch (e) { + print(e); + } + return user; + } + + static Future signInUsingEmailPassword({ + required String email, + required String password, + required BuildContext context, + }) async { + FirebaseAuth auth = FirebaseAuth.instance; + User? user; + + try { + UserCredential userCredential = await auth.signInWithEmailAndPassword( + email: email, + password: password, + ); + user = userCredential.user; + } on FirebaseAuthException catch (e) { + if (e.code == 'user-not-found') { + print('No user found for that email.'); + } else if (e.code == 'wrong-password') { + print('Wrong password provided.'); + } + } + + return user; + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/services/crud.dart b/Team Captains/GenAIRush/finovo/lib/services/crud.dart new file mode 100644 index 00000000..1e2fb193 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/services/crud.dart @@ -0,0 +1,167 @@ +import 'dart:convert'; + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:finovo/Data/data.dart'; +import 'package:finovo/model/Transactions.dart'; +import 'package:flutter/material.dart'; + +class Crud { + final db = FirebaseFirestore.instance; + + Future read(String mail) async { + int accnumber = 0; + await FirebaseFirestore.instance + .collection('accounts') + .get() + .then((QuerySnapshot querySnapshot) { + // Process the data in the query snapshot + + if (querySnapshot.size == 0) { + } else { + querySnapshot.docs.forEach((doc) { + var rawdata = doc.data() as Map; + + if (mail == rawdata['Mail']) { + accnumber = rawdata['Account number']; + Mydata.balance = rawdata['Balance'].toString(); + Mydata.name = rawdata['Name'].toString(); + } + }); + } + }); + return accnumber; + } + + Future getpayeenaccnumber(String name) async { + int accnumber = 0; + await FirebaseFirestore.instance + .collection('accounts') + .get() + .then((QuerySnapshot querySnapshot) { + // Process the data in the query snapshot + + if (querySnapshot.size == 0) { + } else { + querySnapshot.docs.forEach((doc) { + var rawdata = doc.data() as Map; + if (Mydata.accnumber == rawdata['Account number']) { + print(rawdata['Payee name']); + for (var i = 0; i < rawdata['Payee name'].length; i++) { + if (name == rawdata['Payee name'][i]) { + accnumber = rawdata['Payee'][i]; + print(accnumber); + } + } + } + }); + } + }); + return accnumber; + } + + Future gettransactions() async { + int accnumber = 0; + List transaction = []; + await FirebaseFirestore.instance + .collection('Transactions') + .get() + .then((QuerySnapshot querySnapshot) { + // Process the data in the query snapshot + + if (querySnapshot.size == 0) { + } else { + querySnapshot.docs.forEach((doc) { + var rawdata = doc.data() as Map; + // print(doc.id); + if (Mydata.accnumber == rawdata['t24'][0]) { + List data = rawdata['t24']; + Transactionsclass t = Transactionsclass( + amount: data[2].toString(), + date: data[3], + fromacc: data[0].toString(), + toacc: data[1].toString()); + transaction.add(t); + print(t); + } + }); + } + }); + Mydata.transaction = transaction; + } + + void write( + String fromacc, String toacc, String amount, BuildContext context) async { + final docRef = db.collection('Transactions').doc(); + var appt = { + "t24": [fromacc, toacc, amount, DateTime.now()] + }; + await FirebaseFirestore.instance + .collection('accounts') + .get() + .then((QuerySnapshot querySnapshot) { + // Process the data in the query snapshot + + if (querySnapshot.size == 0) { + } else { + querySnapshot.docs.forEach((doc) { + var rawdata = doc.data() as Map; + if (Mydata.accnumber == rawdata['Account number']) { + if (int.parse(rawdata['Balance'].toString()) < int.parse(amount)) { + const snackBar = SnackBar( + content: Text('You have low Balance'), + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + + return; + } + } + }); + } + }); + var balance; + var recbalance; + FirebaseFirestore.instance + .collection('accounts') + .doc(toacc) + .get() + .then((var querySnapshot) { + var rdata = querySnapshot.data() as Map; + // var rdatajson=json.decode(rdata.toString()); + recbalance = rdata['Balance']; + }); + await FirebaseFirestore.instance + .collection('accounts') + .get() + .then((QuerySnapshot querySnapshot) { + // Process the data in the query snapshot + + if (querySnapshot.size == 0) { + } else { + querySnapshot.docs.forEach((doc) { + var rawdata = doc.data() as Map; + + if (Mydata.accnumber == rawdata['Account number']) { + balance = rawdata['Balance']; + FirebaseFirestore.instance + .collection('accounts') + .doc(Mydata.accnumber.toString()) + .update({ + 'Balance': int.parse(balance.toString()) - int.parse(amount) + }); + FirebaseFirestore.instance + .collection('accounts') + .doc(toacc) + .update({ + 'Balance': int.parse(recbalance.toString()) + int.parse(amount) + }); + Mydata.balance = + (int.parse(Mydata.balance) - int.parse(amount)).toString(); + } + }); + } + }); + await docRef.set(appt).then( + (value) => print("Appointment booked successfully!"), + onError: (e) => print("Error booking appointment: $e")); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/theme/app_decoration.dart b/Team Captains/GenAIRush/finovo/lib/theme/app_decoration.dart new file mode 100644 index 00000000..bdd653cb --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/theme/app_decoration.dart @@ -0,0 +1,141 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + + +class AppDecoration { + static BoxDecoration get fillGray10001 => BoxDecoration( + color: ColorConstant.gray10001, + ); + static BoxDecoration get fillIndigo600 => BoxDecoration( + color: ColorConstant.indigo600, + ); + static BoxDecoration get outlineBluegray400 => BoxDecoration( + border: Border.all( + color: ColorConstant.blueGray400, + width: getHorizontalSize( + 1, + ), + ), + ); + static BoxDecoration get fillGray10003 => BoxDecoration( + color: ColorConstant.gray10003, + ); + static BoxDecoration get fillGreen600 => BoxDecoration( + color: ColorConstant.green600, + ); + static BoxDecoration get fillIndigo500 => BoxDecoration( + color: ColorConstant.indigo500, + ); + static BoxDecoration get txtFillIndigo600 => BoxDecoration( + color: ColorConstant.indigo600, + ); + static BoxDecoration get fillWhiteA700 => BoxDecoration( + color: ColorConstant.whiteA700, + ); + static BoxDecoration get outlineGray300 => BoxDecoration( + color: ColorConstant.whiteA700, + border: Border( + right: BorderSide( + color: ColorConstant.gray300, + width: getHorizontalSize( + 1, + ), + ), + ), + ); + static BoxDecoration get fillGray10005 => BoxDecoration( + color: ColorConstant.gray10005, + ); + static BoxDecoration get fillIndigo300 => BoxDecoration( + color: ColorConstant.indigo300, + ); + static BoxDecoration get fillGray100 => BoxDecoration( + color: ColorConstant.gray100, + ); + static BoxDecoration get gradientWhiteA70026WhiteA70026 => BoxDecoration( + gradient: LinearGradient( + begin: Alignment( + 0.5, + 0, + ), + end: Alignment( + 0.5, + 1, + ), + colors: [ + ColorConstant.whiteA70026, + ColorConstant.whiteA70026, + ], + ), + ); +} + +class BorderRadiusStyle { + static BorderRadius customBorderBL15 = BorderRadius.only( + bottomLeft: Radius.circular( + getHorizontalSize( + 15, + ), + ), + bottomRight: Radius.circular( + getHorizontalSize( + 15, + ), + ), + ); + + static BorderRadius roundedBorder15 = BorderRadius.circular( + getHorizontalSize( + 15, + ), + ); + + static BorderRadius circleBorder25 = BorderRadius.circular( + getHorizontalSize( + 25, + ), + ); + + static BorderRadius circleBorder85 = BorderRadius.circular( + getHorizontalSize( + 85, + ), + ); + + static BorderRadius circleBorder20 = BorderRadius.circular( + getHorizontalSize( + 20, + ), + ); + + static BorderRadius roundedBorder10 = BorderRadius.circular( + getHorizontalSize( + 10, + ), + ); + + static BorderRadius txtCircleBorder25 = BorderRadius.circular( + getHorizontalSize( + 25, + ), + ); +} + +// Comment/Uncomment the below code based on your Flutter SDK version. + +// For Flutter SDK Version 3.7.2 or greater. + +double get strokeAlignInside => BorderSide.strokeAlignInside; + +double get strokeAlignCenter => BorderSide.strokeAlignCenter; + +double get strokeAlignOutside => BorderSide.strokeAlignOutside; + +// For Flutter SDK Version 3.7.1 or less. + +// StrokeAlign get strokeAlignInside => StrokeAlign.inside; +// +// StrokeAlign get strokeAlignCenter => StrokeAlign.center; +// +// StrokeAlign get strokeAlignOutside => StrokeAlign.outside; diff --git a/Team Captains/GenAIRush/finovo/lib/theme/app_style.dart b/Team Captains/GenAIRush/finovo/lib/theme/app_style.dart new file mode 100644 index 00000000..68116de7 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/theme/app_style.dart @@ -0,0 +1,528 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + + +class AppStyle { + static TextStyle txtInterSemiBold16Indigo600 = TextStyle( + color: ColorConstant.indigo600, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterMedium12Red700 = TextStyle( + color: ColorConstant.red700, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular1274 = TextStyle( + color: ColorConstant.whiteA700B2, + fontSize: getFontSize( + 12.74, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterBold25 = TextStyle( + color: ColorConstant.indigo600, + fontSize: getFontSize( + 25, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w700, + ); + + static TextStyle txtInterMedium12Indigo30001 = TextStyle( + color: ColorConstant.indigo30001, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterSemiBold16Bluegray800 = TextStyle( + color: ColorConstant.blueGray800, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterBold28 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 28, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w700, + ); + + static TextStyle txtInterSemiBold28 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 28, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterMedium11Green600 = TextStyle( + color: ColorConstant.green600, + fontSize: getFontSize( + 11, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular12Bluegray800 = TextStyle( + color: ColorConstant.blueGray800, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular12Bluegray600 = TextStyle( + color: ColorConstant.blueGray600, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtPoppinsSemiBold12 = TextStyle( + color: ColorConstant.blueGray40001, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Poppins', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtRobotoRegular20 = TextStyle( + color: ColorConstant.black900, + fontSize: getFontSize( + 20, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular1158 = TextStyle( + color: ColorConstant.whiteA700B2, + fontSize: getFontSize( + 11.58, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium13Bluegray400 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium18 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 18, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular10 = TextStyle( + color: ColorConstant.whiteA700B2, + fontSize: getFontSize( + 10, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium12 = TextStyle( + color: ColorConstant.indigo600, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterBold14 = TextStyle( + color: ColorConstant.indigo600, + fontSize: getFontSize( + 14, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w700, + ); + + static TextStyle txtInterMedium12TealA400 = TextStyle( + color: ColorConstant.tealA400, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium13 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterBold16 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w700, + ); + + static TextStyle txtInterMedium11 = TextStyle( + color: ColorConstant.red700, + fontSize: getFontSize( + 11, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium16 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium13Bluegray800 = TextStyle( + color: ColorConstant.blueGray800, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium14 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 14, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterBold12 = TextStyle( + color: ColorConstant.indigo700, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w700, + ); + + static TextStyle txtInterRegular1505 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 15.05, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium12Green600 = TextStyle( + color: ColorConstant.green600, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular13Bluegray400 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium12Bluegray400 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular11 = TextStyle( + color: ColorConstant.whiteA700B2, + fontSize: getFontSize( + 11, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular12 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular13 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular15 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 15, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular16 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterSemiBold16Bluegray80001 = TextStyle( + color: ColorConstant.blueGray80001, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterRegular18 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 18, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium11Indigo500 = TextStyle( + color: ColorConstant.indigo500, + fontSize: getFontSize( + 11, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium12PinkA200 = TextStyle( + color: ColorConstant.pinkA200, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular11Bluegray400 = TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 11, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular11WhiteA700 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 11, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium14Bluegray80001 = TextStyle( + color: ColorConstant.blueGray80001, + fontSize: getFontSize( + 14, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterMedium13Indigo600 = TextStyle( + color: ColorConstant.indigo600, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular12Bluegray900 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium1452 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 14.52, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterRegular1737 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 17.37, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterRegular1853 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 18.53, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterMedium14Bluegray900 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 14, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterSemiBold14Green600 = TextStyle( + color: ColorConstant.green600, + fontSize: getFontSize( + 14, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterMedium13Red700 = TextStyle( + color: ColorConstant.red700, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterSemiBold14 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 14, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterBold1341 = TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 13.41, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w700, + ); + + static TextStyle txtInterMedium12Indigo500 = TextStyle( + color: ColorConstant.indigo500, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtInterSemiBold16 = TextStyle( + color: Colors.white, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); + + static TextStyle txtInterMedium13Green600 = TextStyle( + color: ColorConstant.green600, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + ); + + static TextStyle txtRobotoRegular16 = TextStyle( + color: ColorConstant.blueGray40002, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Roboto', + fontWeight: FontWeight.w400, + ); + + static TextStyle txtInterSemiBold20 = TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 20, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w600, + ); +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_circleimage.dart b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_circleimage.dart new file mode 100644 index 00000000..b8004989 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_circleimage.dart @@ -0,0 +1,46 @@ +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:finovo/theme/app_decoration.dart'; +import 'package:finovo/widgets/custom_image_view.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class AppbarCircleimage extends StatelessWidget { + AppbarCircleimage({this.imagePath, this.svgPath, this.margin, this.onTap}); + + String? imagePath; + + String? svgPath; + + EdgeInsetsGeometry? margin; + + Function? onTap; + + @override + Widget build(BuildContext context) { + return InkWell( + borderRadius: BorderRadiusStyle.roundedBorder15, + onTap: () { + onTap?.call(); + }, + child: Padding( + padding: margin ?? EdgeInsets.zero, + child: CustomImageView( + svgPath: svgPath, + imagePath: imagePath, + height: getSize( + 35, + ), + width: getSize( + 35, + ), + fit: BoxFit.contain, + radius: BorderRadius.circular( + getHorizontalSize( + 17, + ), + ), + ), + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_image.dart b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_image.dart new file mode 100644 index 00000000..751104b1 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_image.dart @@ -0,0 +1,44 @@ +import 'package:finovo/widgets/custom_image_view.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class AppbarImage extends StatelessWidget { + AppbarImage( + {required this.height, + required this.width, + this.imagePath, + this.svgPath, + this.margin, + this.onTap}); + + double height; + + double width; + + String? imagePath; + + String? svgPath; + + EdgeInsetsGeometry? margin; + + Function? onTap; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + onTap?.call(); + }, + child: Padding( + padding: margin ?? EdgeInsets.zero, + child: CustomImageView( + svgPath: svgPath, + imagePath: imagePath, + height: height, + width: width, + fit: BoxFit.contain, + ), + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_searchview.dart b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_searchview.dart new file mode 100644 index 00000000..b11af8cc --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_searchview.dart @@ -0,0 +1,65 @@ +import 'package:finovo/core/utils/image_constant.dart'; +import 'package:finovo/widgets/custom_image_view.dart'; +import 'package:finovo/widgets/custom_search_view.dart'; +import 'package:flutter/material.dart'; + +import '../../core/utils/size_utils.dart'; + + +// ignore: must_be_immutable +class AppbarSearchview extends StatelessWidget { + AppbarSearchview({this.hintText, this.controller, this.margin}); + + String? hintText; + + TextEditingController? controller; + + EdgeInsetsGeometry? margin; + + @override + Widget build(BuildContext context) { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: CustomSearchView( + width: getHorizontalSize( + 327, + ), + focusNode: FocusNode(), + controller: controller, + hintText: hintText, + prefix: Container( + margin: getMargin( + left: 16, + top: 12, + right: 10, + bottom: 12, + ), + child: CustomImageView( + svgPath: ImageConstant.imgSearch, + ), + ), + prefixConstraints: BoxConstraints( + maxHeight: getVerticalSize( + 40, + ), + ), + suffix: Padding( + padding: EdgeInsets.only( + right: getHorizontalSize( + 15, + ), + ), + child: IconButton( + onPressed: () { + controller!.clear(); + }, + icon: Icon( + Icons.clear, + color: Colors.grey.shade600, + ), + ), + ), + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_title.dart b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_title.dart new file mode 100644 index 00000000..8f68ed37 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/appbar_title.dart @@ -0,0 +1,34 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/theme/app_style.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class AppbarTitle extends StatelessWidget { + AppbarTitle({required this.text, this.margin, this.onTap}); + + String text; + + EdgeInsetsGeometry? margin; + + Function? onTap; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + onTap?.call(); + }, + child: Padding( + padding: margin ?? EdgeInsets.zero, + child: Text( + text, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtInterSemiBold20.copyWith( + color: ColorConstant.blueGray900, + ), + ), + ), + ); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/custom_app_bar.dart b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/custom_app_bar.dart new file mode 100644 index 00000000..148149ac --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/app_bar/custom_app_bar.dart @@ -0,0 +1,72 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + +// ignore: must_be_immutable +class CustomAppBar extends StatelessWidget with PreferredSizeWidget { + CustomAppBar( + {required this.height, + this.styleType, + this.leadingWidth, + this.leading, + this.title, + this.centerTitle, + this.actions}); + + double height; + + Style? styleType; + + double? leadingWidth; + + Widget? leading; + + Widget? title; + + bool? centerTitle; + + List? actions; + + @override + Widget build(BuildContext context) { + return AppBar( + elevation: 0, + toolbarHeight: height, + automaticallyImplyLeading: false, + backgroundColor: Colors.transparent, + flexibleSpace: _getStyle(), + leadingWidth: leadingWidth ?? 0, + leading: leading, + title: title, + titleSpacing: 0, + centerTitle: centerTitle ?? false, + actions: actions, + ); + } + + @override + Size get preferredSize => Size( + size.width, + height, + ); + _getStyle() { + switch (styleType) { + case Style.bgFillWhiteA700: + return Container( + height: getVerticalSize( + 122, + ), + width: double.maxFinite, + decoration: BoxDecoration( + color: ColorConstant.whiteA700, + ), + ); + default: + return null; + } + } +} + +enum Style { + bgFillWhiteA700, +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/custom_button.dart b/Team Captains/GenAIRush/finovo/lib/widgets/custom_button.dart new file mode 100644 index 00000000..6bd40fec --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/custom_button.dart @@ -0,0 +1,316 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + +class CustomButton extends StatelessWidget { + CustomButton( + {this.shape, + this.padding, + this.variant, + this.fontStyle, + this.alignment, + this.margin, + this.onTap, + this.width, + this.height, + this.text, + this.prefixWidget, + this.suffixWidget}); + + ButtonShape? shape; + + ButtonPadding? padding; + + ButtonVariant? variant; + + ButtonFontStyle? fontStyle; + + Alignment? alignment; + + EdgeInsetsGeometry? margin; + + VoidCallback? onTap; + + double? width; + + double? height; + + String? text; + + Widget? prefixWidget; + + Widget? suffixWidget; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment!, + child: _buildButtonWidget(), + ) + : _buildButtonWidget(); + } + + _buildButtonWidget() { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: TextButton( + onPressed: onTap, + style: _buildTextButtonStyle(), + child: _buildButtonWithOrWithoutIcon(), + ), + ); + } + + _buildButtonWithOrWithoutIcon() { + if (prefixWidget != null || suffixWidget != null) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + prefixWidget ?? SizedBox(), + Text( + text ?? "", + textAlign: TextAlign.center, + style: _setFontStyle(), + ), + suffixWidget ?? SizedBox(), + ], + ); + } else { + return Text( + text ?? "", + textAlign: TextAlign.center, + style: _setFontStyle(), + ); + } + } + + _buildTextButtonStyle() { + return TextButton.styleFrom( + fixedSize: Size( + width ?? double.maxFinite, + height ?? getVerticalSize(40), + ), + padding: _setPadding(), + backgroundColor: _setColor(), + side: _setTextButtonBorder(), + shadowColor: _setTextButtonShadowColor(), + shape: RoundedRectangleBorder( + borderRadius: _setBorderRadius(), + ), + ); + } + + _setPadding() { + switch (padding) { + case ButtonPadding.PaddingAll14: + return getPadding( + all: 15, + ); + case ButtonPadding.PaddingT11: + return getPadding( + left: 12, + top: 12, + bottom: 12, + ); + case ButtonPadding.PaddingAll11: + return getPadding( + all: 10, + ); + default: + return getPadding( + all: 5, + ); + } + } + + _setColor() { + switch (variant) { + case ButtonVariant.FillIndigo60014: + return ColorConstant.indigo60014; + case ButtonVariant.OutlineGray300cc: + return ColorConstant.indigo600; + case ButtonVariant.OutlineIndigo500: + return null; + default: + return ColorConstant.indigo600; + } + } + + _setTextButtonBorder() { + switch (variant) { + case ButtonVariant.OutlineIndigo500: + return BorderSide( + color: ColorConstant.indigo500, + width: getHorizontalSize( + 1.00, + ), + ); + case ButtonVariant.FillIndigo60014: + case ButtonVariant.FillIndigo600: + case ButtonVariant.OutlineGray300cc: + return null; + default: + return null; + } + } + + _setTextButtonShadowColor() { + switch (variant) { + case ButtonVariant.OutlineGray300cc: + return ColorConstant.gray300Cc; + case ButtonVariant.OutlineIndigo500: + case ButtonVariant.FillIndigo60014: + case ButtonVariant.FillIndigo600: + return null; + default: + return null; + } + } + + _setBorderRadius() { + switch (shape) { + case ButtonShape.RoundedBorder15: + return BorderRadius.circular( + getHorizontalSize( + 15.00, + ), + ); + case ButtonShape.CircleBorder25: + return BorderRadius.circular( + getHorizontalSize( + 25.00, + ), + ); + case ButtonShape.CircleBorder20: + return BorderRadius.circular( + getHorizontalSize( + 20.00, + ), + ); + case ButtonShape.RoundedBorder7: + return BorderRadius.circular( + getHorizontalSize( + 7.00, + ), + ); + case ButtonShape.Square: + return BorderRadius.circular(0); + default: + return BorderRadius.circular( + getHorizontalSize( + 12.00, + ), + ); + } + } + + _setFontStyle() { + switch (fontStyle) { + case ButtonFontStyle.InterMedium16: + return TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + height: getVerticalSize( + 1.25, + ), + ); + case ButtonFontStyle.InterRegular18: + return TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 18, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + height: getVerticalSize( + 1.22, + ), + ); + case ButtonFontStyle.InterMedium13WhiteA700: + return TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + height: getVerticalSize( + 1.23, + ), + ); + case ButtonFontStyle.InterMedium12WhiteA700: + return TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + height: getVerticalSize( + 1.25, + ), + ); + case ButtonFontStyle.InterMedium15WhiteA700: + return TextStyle( + color: ColorConstant.whiteA700, + fontSize: getFontSize( + 15, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + height: getVerticalSize( + 1.27, + ), + ); + default: + return TextStyle( + color: ColorConstant.indigo500, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + height: getVerticalSize( + 1.25, + ), + ); + } + } +} + +enum ButtonShape { + Square, + RoundedBorder12, + RoundedBorder15, + CircleBorder25, + CircleBorder20, + RoundedBorder7, +} + +enum ButtonPadding { + PaddingAll3, + PaddingAll14, + PaddingT11, + PaddingAll11, +} + +enum ButtonVariant { + OutlineIndigo500, + FillIndigo60014, + FillIndigo600, + OutlineGray300cc, +} + +enum ButtonFontStyle { + InterMedium12Indigo500_1, + InterMedium16, + InterRegular18, + InterMedium13WhiteA700, + InterMedium12WhiteA700, + InterMedium15WhiteA700, +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/custom_drop_down.dart b/Team Captains/GenAIRush/finovo/lib/widgets/custom_drop_down.dart new file mode 100644 index 00000000..06f4e67c --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/custom_drop_down.dart @@ -0,0 +1,192 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + + +class CustomDropDown extends StatelessWidget { + CustomDropDown( + {this.shape, + this.padding, + this.variant, + this.fontStyle, + this.alignment, + this.width, + this.margin, + this.focusNode, + this.icon, + this.hintText, + this.prefix, + this.prefixConstraints, + this.items, + this.onChanged, + this.validator}); + + DropDownShape? shape; + + DropDownPadding? padding; + + DropDownVariant? variant; + + DropDownFontStyle? fontStyle; + + Alignment? alignment; + + double? width; + + EdgeInsetsGeometry? margin; + + FocusNode? focusNode; + + Widget? icon; + + String? hintText; + + Widget? prefix; + + BoxConstraints? prefixConstraints; + + List? items; + + Function(String)? onChanged; + + FormFieldValidator? validator; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment ?? Alignment.center, + child: _buildDropDownWidget(), + ) + : _buildDropDownWidget(); + } + + _buildDropDownWidget() { + return Container( + width: width ?? double.maxFinite, + margin: margin, + child: DropdownButtonFormField( + focusNode: focusNode, + icon: icon, + style: _setFontStyle(), + decoration: _buildDecoration(), + items: items?.map>((String value) { + return DropdownMenuItem( + value: value, + child: Text( + value, + overflow: TextOverflow.ellipsis, + ), + ); + }).toList(), + onChanged: (value) { + onChanged!(value.toString()); + }, + validator: validator, + ), + ); + } + + _buildDecoration() { + return InputDecoration( + hintText: hintText ?? "", + hintStyle: _setFontStyle(), + border: _setBorderStyle(), + enabledBorder: _setBorderStyle(), + focusedBorder: _setBorderStyle(), + prefixIcon: prefix, + prefixIconConstraints: prefixConstraints, + fillColor: _setFillColor(), + filled: _setFilled(), + isDense: true, + contentPadding: _setPadding(), + ); + } + + _setFontStyle() { + switch (fontStyle) { + default: + return TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + height: getVerticalSize( + 1.25, + ), + ); + } + } + + _setOutlineBorderRadius() { + switch (shape) { + default: + return BorderRadius.circular( + getHorizontalSize( + 10.00, + ), + ); + } + } + + _setBorderStyle() { + switch (variant) { + case DropDownVariant.None: + return InputBorder.none; + default: + return OutlineInputBorder( + borderRadius: _setOutlineBorderRadius(), + borderSide: BorderSide( + color: ColorConstant.gray10005, + width: 1, + ), + ); + } + } + + _setFillColor() { + switch (variant) { + default: + return ColorConstant.whiteA700; + } + } + + _setFilled() { + switch (variant) { + case DropDownVariant.None: + return false; + default: + return true; + } + } + + _setPadding() { + switch (padding) { + default: + return getPadding( + left: 12, + top: 12, + bottom: 12, + ); + } + } +} + +enum DropDownShape { + RoundedBorder10, +} + +enum DropDownPadding { + PaddingT12, +} + +enum DropDownVariant { + None, + OutlineGray10005, +} + +enum DropDownFontStyle { + InterRegular12Bluegray900, +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/custom_icon_button.dart b/Team Captains/GenAIRush/finovo/lib/widgets/custom_icon_button.dart new file mode 100644 index 00000000..d0d80a7b --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/custom_icon_button.dart @@ -0,0 +1,211 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + + +class CustomIconButton extends StatelessWidget { + CustomIconButton( + {this.shape, + this.padding, + this.variant, + this.alignment, + this.margin, + this.width, + this.height, + this.child, + this.onTap}); + + IconButtonShape? shape; + + IconButtonPadding? padding; + + IconButtonVariant? variant; + + Alignment? alignment; + + EdgeInsetsGeometry? margin; + + double? width; + + double? height; + + Widget? child; + + VoidCallback? onTap; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment ?? Alignment.center, + child: _buildIconButtonWidget(), + ) + : _buildIconButtonWidget(); + } + + _buildIconButtonWidget() { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: IconButton( + visualDensity: VisualDensity( + vertical: -4, + horizontal: -4, + ), + iconSize: getSize(height ?? 0), + padding: EdgeInsets.all(0), + icon: Container( + alignment: Alignment.center, + width: getSize(width ?? 0), + height: getSize(height ?? 0), + padding: _setPadding(), + decoration: _buildDecoration(), + child: child, + ), + onPressed: onTap, + ), + ); + } + + _buildDecoration() { + return BoxDecoration( + color: _setColor(), + border: _setBorder(), + borderRadius: _setBorderRadius(), + boxShadow: _setBoxShadow(), + ); + } + + _setPadding() { + switch (padding) { + case IconButtonPadding.PaddingAll15: + return getPadding( + all: 15, + ); + case IconButtonPadding.PaddingAll9: + return getPadding( + all: 9, + ); + default: + return getPadding( + all: 12, + ); + } + } + + _setColor() { + switch (variant) { + case IconButtonVariant.OutlineGray300cc: + return ColorConstant.whiteA700; + case IconButtonVariant.FillIndigo600: + return ColorConstant.indigo600; + case IconButtonVariant.OutlineRed700: + case IconButtonVariant.OutlineGreen600: + return null; + default: + return ColorConstant.gray10001; + } + } + + _setBorder() { + switch (variant) { + case IconButtonVariant.OutlineRed700: + return Border.all( + color: ColorConstant.red700, + width: getHorizontalSize( + 2.00, + ), + ); + case IconButtonVariant.OutlineGreen600: + return Border.all( + color: ColorConstant.green600, + width: getHorizontalSize( + 2.00, + ), + ); + case IconButtonVariant.FillGray10001: + case IconButtonVariant.OutlineGray300cc: + case IconButtonVariant.FillIndigo600: + return null; + default: + return null; + } + } + + _setBorderRadius() { + switch (shape) { + case IconButtonShape.CircleBorder25: + return BorderRadius.circular( + getHorizontalSize( + 25.00, + ), + ); + case IconButtonShape.CircleBorder20: + return BorderRadius.circular( + getHorizontalSize( + 20.00, + ), + ); + case IconButtonShape.RoundedBorder17: + return BorderRadius.circular( + getHorizontalSize( + 17.00, + ), + ); + default: + return BorderRadius.circular( + getHorizontalSize( + 12.00, + ), + ); + } + } + + _setBoxShadow() { + switch (variant) { + case IconButtonVariant.OutlineGray300cc: + return [ + BoxShadow( + color: ColorConstant.gray300Cc, + spreadRadius: getHorizontalSize( + 2.00, + ), + blurRadius: getHorizontalSize( + 2.00, + ), + offset: Offset( + 4, + 4, + ), + ), + ]; + case IconButtonVariant.FillGray10001: + case IconButtonVariant.OutlineRed700: + case IconButtonVariant.OutlineGreen600: + case IconButtonVariant.FillIndigo600: + return null; + default: + return null; + } + } +} + +enum IconButtonShape { + RoundedBorder12, + CircleBorder25, + CircleBorder20, + RoundedBorder17, +} + +enum IconButtonPadding { + PaddingAll12, + PaddingAll15, + PaddingAll9, +} + +enum IconButtonVariant { + FillGray10001, + OutlineGray300cc, + OutlineRed700, + OutlineGreen600, + FillIndigo600, +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/custom_image_view.dart b/Team Captains/GenAIRush/finovo/lib/widgets/custom_image_view.dart new file mode 100644 index 00000000..352f5945 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/custom_image_view.dart @@ -0,0 +1,154 @@ +// ignore_for_file: must_be_immutable + +import 'dart:io'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CustomImageView extends StatelessWidget { + ///[url] is required parameter for fetching network image + String? url; + + ///[imagePath] is required parameter for showing png,jpg,etc image + String? imagePath; + + ///[svgPath] is required parameter for showing svg image + String? svgPath; + + ///[file] is required parameter for fetching image file + File? file; + + double? height; + double? width; + Color? color; + BoxFit? fit; + final String placeHolder; + Alignment? alignment; + VoidCallback? onTap; + EdgeInsetsGeometry? margin; + BorderRadius? radius; + BoxBorder? border; + + ///a [CustomImageView] it can be used for showing any type of images + /// it will shows the placeholder image if image is not found on network image + CustomImageView({ + Key? key, + this.url, + this.imagePath, + this.svgPath, + this.file, + this.height, + this.width, + this.color, + this.fit, + this.alignment, + this.onTap, + this.radius, + this.margin, + this.border, + this.placeHolder = 'assets/images/image_not_found.png', + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment!, + child: _buildWidget(), + ) + : _buildWidget(); + } + + Widget _buildWidget() { + return Padding( + padding: margin ?? EdgeInsets.zero, + child: InkWell( + onTap: onTap, + child: _buildCircleImage(), + ), + ); + } + + ///build the image with border radius + _buildCircleImage() { + if (radius != null) { + return ClipRRect( + borderRadius: radius, + child: _buildImageWithBorder(), + ); + } else { + return _buildImageWithBorder(); + } + } + + ///build the image with border and border radius style + _buildImageWithBorder() { + if (border != null) { + return Container( + decoration: BoxDecoration( + border: border, + borderRadius: radius, + ), + child: _buildImageView(), + ); + } else { + return _buildImageView(); + } + } + + Widget _buildImageView() { + if (svgPath != null && svgPath!.isNotEmpty) { + return SizedBox( + height: height, + width: width, + child: SvgPicture.asset( + svgPath!, + height: height, + width: width, + fit: fit ?? BoxFit.contain, + color: color, + ), + ); + } else if (file != null && file!.path.isNotEmpty) { + return Image.file( + file!, + height: height, + width: width, + fit: fit ?? BoxFit.cover, + color: color, + ); + } else if (url != null && url!.isNotEmpty) { + return CachedNetworkImage( + height: height, + width: width, + fit: fit, + imageUrl: url!, + color: color, + placeholder: (context, url) => SizedBox( + height: 30, + width: 30, + child: LinearProgressIndicator( + color: Colors.grey.shade200, + backgroundColor: Colors.grey.shade100, + ), + ), + errorWidget: (context, url, error) => Image.asset( + placeHolder, + height: height, + width: width, + fit: fit ?? BoxFit.cover, + ), + ); + } else if (imagePath != null && imagePath!.isNotEmpty) { + return Image.asset( + imagePath!, + height: height, + width: width, + fit: fit ?? BoxFit.cover, + color: color, + ); + } + return const SizedBox(); + } +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/custom_search_view.dart b/Team Captains/GenAIRush/finovo/lib/widgets/custom_search_view.dart new file mode 100644 index 00000000..b620b746 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/custom_search_view.dart @@ -0,0 +1,176 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + + +class CustomSearchView extends StatelessWidget { + CustomSearchView( + {this.shape, + this.padding, + this.variant, + this.fontStyle, + this.alignment, + this.width, + this.margin, + this.controller, + this.focusNode, + this.hintText, + this.prefix, + this.prefixConstraints, + this.suffix, + this.suffixConstraints}); + + SearchViewShape? shape; + + SearchViewPadding? padding; + + SearchViewVariant? variant; + + SearchViewFontStyle? fontStyle; + + Alignment? alignment; + + double? width; + + EdgeInsetsGeometry? margin; + + TextEditingController? controller; + + FocusNode? focusNode; + + String? hintText; + + Widget? prefix; + + BoxConstraints? prefixConstraints; + + Widget? suffix; + + BoxConstraints? suffixConstraints; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment ?? Alignment.center, + child: _buildSearchViewWidget(), + ) + : _buildSearchViewWidget(); + } + + _buildSearchViewWidget() { + return Container( + width: width ?? double.maxFinite, + margin: margin, + child: TextFormField( + controller: controller, + focusNode: focusNode, + style: _setFontStyle(), + decoration: _buildDecoration(), + ), + ); + } + + _buildDecoration() { + return InputDecoration( + hintText: hintText ?? "", + hintStyle: _setFontStyle(), + border: _setBorderStyle(), + enabledBorder: _setBorderStyle(), + focusedBorder: _setBorderStyle(), + disabledBorder: _setBorderStyle(), + prefixIcon: prefix, + prefixIconConstraints: prefixConstraints, + suffixIcon: suffix, + suffixIconConstraints: suffixConstraints, + fillColor: _setFillColor(), + filled: _setFilled(), + isDense: true, + contentPadding: _setPadding(), + ); + } + + _setFontStyle() { + switch (fontStyle) { + default: + return TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 13, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + height: getVerticalSize( + 1.23, + ), + ); + } + } + + _setOutlineBorderRadius() { + switch (shape) { + default: + return BorderRadius.circular( + getHorizontalSize( + 20.00, + ), + ); + } + } + + _setBorderStyle() { + switch (variant) { + case SearchViewVariant.None: + return InputBorder.none; + default: + return OutlineInputBorder( + borderRadius: _setOutlineBorderRadius(), + borderSide: BorderSide.none, + ); + } + } + + _setFillColor() { + switch (variant) { + default: + return ColorConstant.gray10001; + } + } + + _setFilled() { + switch (variant) { + case SearchViewVariant.None: + return false; + default: + return true; + } + } + + _setPadding() { + switch (padding) { + default: + return getPadding( + top: 12, + right: 12, + bottom: 12, + ); + } + } +} + +enum SearchViewShape { + CircleBorder20, +} + +enum SearchViewPadding { + PaddingT10, +} + +enum SearchViewVariant { + None, + FillGray10001, +} + +enum SearchViewFontStyle { + InterRegular13Bluegray400, +} diff --git a/Team Captains/GenAIRush/finovo/lib/widgets/custom_text_form_field.dart b/Team Captains/GenAIRush/finovo/lib/widgets/custom_text_form_field.dart new file mode 100644 index 00000000..48294688 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/lib/widgets/custom_text_form_field.dart @@ -0,0 +1,252 @@ +import 'package:finovo/core/utils/color_constant.dart'; +import 'package:finovo/core/utils/size_utils.dart'; +import 'package:flutter/material.dart'; + + +class CustomTextFormField extends StatelessWidget { + CustomTextFormField( + {this.shape, + this.padding, + this.variant, + this.fontStyle, + this.alignment, + this.width, + this.margin, + this.controller, + this.focusNode, + this.isObscureText = false, + this.textInputAction = TextInputAction.next, + this.textInputType = TextInputType.text, + this.maxLines, + this.hintText, + this.prefix, + this.prefixConstraints, + this.suffix, + this.suffixConstraints, + this.validator}); + + TextFormFieldShape? shape; + + TextFormFieldPadding? padding; + + TextFormFieldVariant? variant; + + TextFormFieldFontStyle? fontStyle; + + Alignment? alignment; + + double? width; + + EdgeInsetsGeometry? margin; + + TextEditingController? controller; + + FocusNode? focusNode; + + bool? isObscureText; + + TextInputAction? textInputAction; + + TextInputType? textInputType; + + int? maxLines; + + String? hintText; + + Widget? prefix; + + BoxConstraints? prefixConstraints; + + Widget? suffix; + + BoxConstraints? suffixConstraints; + + FormFieldValidator? validator; + + @override + Widget build(BuildContext context) { + return alignment != null + ? Align( + alignment: alignment ?? Alignment.center, + child: _buildTextFormFieldWidget(), + ) + : _buildTextFormFieldWidget(); + } + + _buildTextFormFieldWidget() { + return Container( + width: width ?? double.maxFinite, + margin: margin, + child: TextFormField( + controller: controller, + focusNode: focusNode, + style: _setFontStyle(), + obscureText: isObscureText!, + textInputAction: textInputAction, + keyboardType: textInputType, + maxLines: maxLines ?? 1, + decoration: _buildDecoration(), + validator: validator, + ), + ); + } + + _buildDecoration() { + return InputDecoration( + hintText: hintText ?? "", + hintStyle: _setFontStyle(), + border: _setBorderStyle(), + enabledBorder: _setBorderStyle(), + focusedBorder: _setBorderStyle(), + disabledBorder: _setBorderStyle(), + prefixIcon: prefix, + prefixIconConstraints: prefixConstraints, + suffixIcon: suffix, + suffixIconConstraints: suffixConstraints, + fillColor: _setFillColor(), + filled: _setFilled(), + isDense: true, + contentPadding: _setPadding(), + ); + } + + _setFontStyle() { + switch (fontStyle) { + case TextFormFieldFontStyle.InterMedium16: + return TextStyle( + color: ColorConstant.blueGray400, + fontSize: getFontSize( + 16, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w500, + height: getVerticalSize( + 1.25, + ), + ); + default: + return TextStyle( + color: ColorConstant.blueGray900, + fontSize: getFontSize( + 12, + ), + fontFamily: 'Inter', + fontWeight: FontWeight.w400, + height: getVerticalSize( + 1.25, + ), + ); + } + } + + _setOutlineBorderRadius() { + switch (shape) { + case TextFormFieldShape.RoundedBorder15: + return BorderRadius.circular( + getHorizontalSize( + 15.00, + ), + ); + default: + return BorderRadius.circular( + getHorizontalSize( + 10.00, + ), + ); + } + } + + _setBorderStyle() { + switch (variant) { + case TextFormFieldVariant.FillIndigo60014: + return OutlineInputBorder( + borderRadius: _setOutlineBorderRadius(), + borderSide: BorderSide.none, + ); + case TextFormFieldVariant.OutlineTeal50: + return OutlineInputBorder( + borderRadius: _setOutlineBorderRadius(), + borderSide: BorderSide( + color: ColorConstant.teal50, + width: 1, + ), + ); + case TextFormFieldVariant.None: + return InputBorder.none; + default: + return OutlineInputBorder( + borderRadius: _setOutlineBorderRadius(), + borderSide: BorderSide( + color: ColorConstant.gray10005, + width: 1, + ), + ); + } + } + + _setFillColor() { + switch (variant) { + case TextFormFieldVariant.FillIndigo60014: + return ColorConstant.indigo60014; + case TextFormFieldVariant.OutlineTeal50: + return ColorConstant.whiteA700; + default: + return ColorConstant.whiteA700; + } + } + + _setFilled() { + switch (variant) { + case TextFormFieldVariant.FillIndigo60014: + return true; + case TextFormFieldVariant.OutlineTeal50: + return true; + case TextFormFieldVariant.None: + return false; + default: + return true; + } + } + + _setPadding() { + switch (padding) { + case TextFormFieldPadding.PaddingAll15: + return getPadding( + all: 15, + ); + case TextFormFieldPadding.PaddingT14: + return getPadding( + left: 15, + top: 15, + bottom: 15, + ); + default: + return getPadding( + all: 12, + ); + } + } +} + +enum TextFormFieldShape { + RoundedBorder10, + RoundedBorder15, +} + +enum TextFormFieldPadding { + PaddingAll14, + PaddingAll15, + PaddingT14, +} + +enum TextFormFieldVariant { + None, + OutlineGray10005, + FillIndigo60014, + OutlineTeal50, +} + +enum TextFormFieldFontStyle { + InterRegular12Bluegray900, + InterMedium16, +} diff --git a/Team Captains/GenAIRush/finovo/linux/.gitignore b/Team Captains/GenAIRush/finovo/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/Team Captains/GenAIRush/finovo/linux/CMakeLists.txt b/Team Captains/GenAIRush/finovo/linux/CMakeLists.txt new file mode 100644 index 00000000..6bb4f622 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/CMakeLists.txt @@ -0,0 +1,138 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "finovo") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.finovo") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/Team Captains/GenAIRush/finovo/linux/flutter/CMakeLists.txt b/Team Captains/GenAIRush/finovo/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugin_registrant.cc b/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..f6f23bfe --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugin_registrant.h b/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugins.cmake b/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..f16b4c34 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/Team Captains/GenAIRush/finovo/linux/main.cc b/Team Captains/GenAIRush/finovo/linux/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/Team Captains/GenAIRush/finovo/linux/my_application.cc b/Team Captains/GenAIRush/finovo/linux/my_application.cc new file mode 100644 index 00000000..7a17adb4 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "finovo"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "finovo"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/Team Captains/GenAIRush/finovo/linux/my_application.h b/Team Captains/GenAIRush/finovo/linux/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/Team Captains/GenAIRush/finovo/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/Team Captains/GenAIRush/finovo/macos/.gitignore b/Team Captains/GenAIRush/finovo/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/Team Captains/GenAIRush/finovo/macos/Flutter/Flutter-Debug.xcconfig b/Team Captains/GenAIRush/finovo/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..c2efd0b6 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/Team Captains/GenAIRush/finovo/macos/Flutter/Flutter-Release.xcconfig b/Team Captains/GenAIRush/finovo/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..c2efd0b6 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/Team Captains/GenAIRush/finovo/macos/Flutter/GeneratedPluginRegistrant.swift b/Team Captains/GenAIRush/finovo/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..fbe9a64b --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,28 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import cloud_firestore +import firebase_auth +import firebase_core +import path_provider_foundation +import shared_preferences_macos +import sign_in_with_apple +import speech_to_text_macos +import sqflite +import url_launcher_macos + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) + FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + SignInWithApplePlugin.register(with: registry.registrar(forPlugin: "SignInWithApplePlugin")) + SpeechToTextMacosPlugin.register(with: registry.registrar(forPlugin: "SpeechToTextMacosPlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) +} diff --git a/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/project.pbxproj b/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..2ee936f5 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,573 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* finovo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "finovo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* finovo.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* finovo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..76d4e017 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner.xcworkspace/contents.xcworkspacedata b/Team Captains/GenAIRush/finovo/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Team Captains/GenAIRush/finovo/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/AppDelegate.swift b/Team Captains/GenAIRush/finovo/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..d53ef643 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 00000000..82b6f9d9 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 00000000..13b35eba Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 00000000..0a3f5fa4 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 00000000..bdb57226 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 00000000..f083318e Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 00000000..326c0e72 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 00000000..2f1632cf Binary files /dev/null and b/Team Captains/GenAIRush/finovo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Base.lproj/MainMenu.xib b/Team Captains/GenAIRush/finovo/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 00000000..80e867a4 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Configs/AppInfo.xcconfig b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..b402674d --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = finovo + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.finovo + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Debug.xcconfig b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Release.xcconfig b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Warnings.xcconfig b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/DebugProfile.entitlements b/Team Captains/GenAIRush/finovo/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Info.plist b/Team Captains/GenAIRush/finovo/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/MainFlutterWindow.swift b/Team Captains/GenAIRush/finovo/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/Team Captains/GenAIRush/finovo/macos/Runner/Release.entitlements b/Team Captains/GenAIRush/finovo/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/Team Captains/GenAIRush/finovo/pubspec.lock b/Team Captains/GenAIRush/finovo/pubspec.lock new file mode 100644 index 00000000..c3bc2a89 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/pubspec.lock @@ -0,0 +1,1170 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "9ebe81588e666f7e2b21309f2b5653bd9642d7f27fd0a6894278d2ff40cb9481" + url: "https://pub.dev" + source: hosted + version: "1.3.2" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: e764e48ef036cabdf84319ba7b8b5871b6b43266e14de787cb43f77639089ae5 + url: "https://pub.dev" + source: hosted + version: "3.2.1" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: "8e2b5befefec5063bee8f209fda21751f6328d405d4237c70f21104568b2fee7" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: d4351c7eb16767df129b0474a5ebc4e028870379c063e8ba265a56aa00831e70 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + chat_gpt_sdk: + dependency: "direct main" + description: + name: chat_gpt_sdk + sha256: "64bc89a7ff086e2b814643003d37de617c777780239539b00da58810afa2337e" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + sha256: "095a8c0e67da96610b6f4e6da7ac5853bc86d7664409ab71d7b934469ca99c6f" + url: "https://pub.dev" + source: hosted + version: "4.8.0" + cloud_firestore_platform_interface: + dependency: "direct main" + description: + name: cloud_firestore_platform_interface + sha256: dd5d1c3ed9a09e620ac59351f20fa635e112101bdc6f90e84b29c5a19fa1bf59 + url: "https://pub.dev" + source: hosted + version: "5.15.0" + cloud_firestore_web: + dependency: "direct main" + description: + name: cloud_firestore_web + sha256: "51f22dfbe07638075287e171b469ef545bee9f5fa0f8d0ed4aa98aceb0259a5d" + url: "https://pub.dev" + source: hosted + version: "3.6.0" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" + url: "https://pub.dev" + source: hosted + version: "0.3.3+4" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + url: "https://pub.dev" + source: hosted + version: "1.0.5" + dart_openai: + dependency: "direct main" + description: + name: dart_openai + sha256: "5cd769602d35a258667f0af7ee4177b6505ae8e4e7f5c38dbc87d0cfbd762a7b" + url: "https://pub.dev" + source: hosted + version: "1.9.91" + dio: + dependency: transitive + description: + name: dio + sha256: "3866d67f93523161b643187af65f5ac08bc991a5bcdaf41a2d587fe4ccb49993" + url: "https://pub.dev" + source: hosted + version: "5.3.0" + dropdown_button2: + dependency: "direct main" + description: + name: dropdown_button2 + sha256: "4458d81bfd24207f3d58f66f78097064e02f810f94cf1bc80bf20fe7685ebc80" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + equatable: + dependency: transitive + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + fetch_api: + dependency: transitive + description: + name: fetch_api + sha256: "7896632eda5af40c4459d673ad601df21d4c3ae6a45997e300a92ca63ec9fe4c" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + fetch_client: + dependency: transitive + description: + name: fetch_client + sha256: "83c07b07a63526a43630572c72715707ca113a8aa3459efbc7b2d366b79402af" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + ffi: + dependency: transitive + description: + name: ffi + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + url: "https://pub.dev" + source: hosted + version: "2.0.2" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + file_picker: + dependency: "direct main" + description: + name: file_picker + sha256: d8e9ca7e5d1983365c277f12c21b4362df6cf659c99af146ad4d04eb33033013 + url: "https://pub.dev" + source: hosted + version: "5.2.6" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + sha256: "19508428ca37f611ae47067ee6ebb3ba5a27014941177cc224f71bf7d0720cdd" + url: "https://pub.dev" + source: hosted + version: "4.6.2" + firebase_auth_platform_interface: + dependency: "direct main" + description: + name: firebase_auth_platform_interface + sha256: e46e136a6f6eec88b30f12445ff7f5b19b23b7ede694921ced4f8eba8eb634f6 + url: "https://pub.dev" + source: hosted + version: "6.15.2" + firebase_auth_web: + dependency: "direct main" + description: + name: firebase_auth_web + sha256: "553bd576d793d05b920971a2c7ab02bd049d4971153702074ea2555877efd392" + url: "https://pub.dev" + source: hosted + version: "5.5.2" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: e9b36b391690cf329c6fb1de220045e97c13784c303820cd33962319580a56c6 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + firebase_core_platform_interface: + dependency: "direct main" + description: + name: firebase_core_platform_interface + sha256: b63e3be6c96ef5c33bdec1aab23c91eb00696f6452f0519401d640938c94cba2 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + firebase_core_web: + dependency: "direct main" + description: + name: firebase_core_web + sha256: "8c0f4c87d20e2d001a5915df238c1f9c88704231f591324205f5a5d2a7740a45" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + fl_chart: + dependency: "direct main" + description: + name: fl_chart + sha256: cf46edb10b096dc6197e561f6bb7929371baaaff2bca7848982670a152e3d23f + url: "https://pub.dev" + source: hosted + version: "0.55.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_animate: + dependency: "direct main" + description: + name: flutter_animate + sha256: f611a67082d4c5ff9b8b7737ec7e675a22af70a94c8c3c22109f14b078d4d2bf + url: "https://pub.dev" + source: hosted + version: "4.1.1+1" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: "direct main" + description: + name: flutter_cache_manager + sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + flutter_chatgpt_api: + dependency: "direct main" + description: + name: flutter_chatgpt_api + sha256: da502656b43b7e87d2d4e4e1203bc1a6164ca45647ccfe81cdea7063dda34b5b + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + flutter_plugin_android_lifecycle: + dependency: "direct main" + description: + name: flutter_plugin_android_lifecycle + sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf + url: "https://pub.dev" + source: hosted + version: "2.0.9" + flutter_spinkit: + dependency: "direct main" + description: + name: flutter_spinkit + sha256: "77a2117c0517ff909221f3160b8eb20052ab5216107581168af574ac1f05dff8" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: f991fdb1533c3caeee0cdc14b04f50f0c3916f0dbcbc05237ccbe4e3c6b93f3f + url: "https://pub.dev" + source: hosted + version: "2.0.5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + font_awesome_flutter: + dependency: "direct main" + description: + name: font_awesome_flutter + sha256: "7811c8b4e7455d2f60ef30022a6a07376de2858b47aecbe2861965b348fe2016" + url: "https://pub.dev" + source: hosted + version: "10.1.0" + from_css_color: + dependency: "direct main" + description: + name: from_css_color + sha256: "5e4d1795c8d10af94e51dd97636b2a29170a132be1aceba103e9866028d20823" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + go_router: + dependency: "direct main" + description: + name: go_router + sha256: "00d1b67d6e9fa443331da229084dd3eb04407f5a2dff22940bd7bba6af5722c3" + url: "https://pub.dev" + source: hosted + version: "7.1.1" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: "927573f2e8a8d65c17931e21918ad0ab0666b1b636537de7c4932bdb487b190f" + url: "https://pub.dev" + source: hosted + version: "4.0.3" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "7940fdc3b1035db4d65d387c1bdd6f9574deaa6777411569c05ecc25672efacd" + url: "https://pub.dev" + source: hosted + version: "0.2.1" + google_mlkit_commons: + dependency: transitive + description: + name: google_mlkit_commons + sha256: "42173a8ba89f386486cc5b8249e84da4a4b861daa70498373627d985eb418689" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + google_mlkit_translation: + dependency: "direct main" + description: + name: google_mlkit_translation + sha256: "175a0cb801b5fa01140f62344bbda6a8dcbb7977ae057f1dab1b74eddc60d71c" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: "750d08ffb4cd469f13068d15844ffd1d60c7ac1ca3c815918ba4ce4af22a2ddb" + url: "https://pub.dev" + source: hosted + version: "6.0.2" + google_sign_in_android: + dependency: "direct main" + description: + name: google_sign_in_android + sha256: "6a740e8498920ecf5fc2849ae0e4412536d700230bc3169493a1d031fdfe1cca" + url: "https://pub.dev" + source: hosted + version: "6.1.8" + google_sign_in_ios: + dependency: "direct main" + description: + name: google_sign_in_ios + sha256: "2e1df687b17f7fddcaf9a0c7f994d0d19b5d41e8ce1d943013befd0a0ae67403" + url: "https://pub.dev" + source: hosted + version: "5.6.1" + google_sign_in_platform_interface: + dependency: "direct main" + description: + name: google_sign_in_platform_interface + sha256: "95a9e0a8701b5485f2ca330fd1fc6f918f5ce088042ce1019c5e389d8574ae4c" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + google_sign_in_web: + dependency: "direct main" + description: + name: google_sign_in_web + sha256: "9f883b9b525297663510dfbbe8b04d39715aa0abba430851f501b7d1e4b0f465" + url: "https://pub.dev" + source: hosted + version: "0.11.0+2" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" + http: + dependency: transitive + description: + name: http + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + url: "https://pub.dev" + source: hosted + version: "0.13.6" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: f3712cd190227fb92e0960cb0ce22928ba042c7183b16864ade83b259adf8ea6 + url: "https://pub.dev" + source: hosted + version: "0.8.5+3" + image_picker_android: + dependency: "direct main" + description: + name: image_picker_android + sha256: "822f71a53336bf1e638dbf955047080ca49ba0197f52c4fece9cf584c368648a" + url: "https://pub.dev" + source: hosted + version: "0.8.5+3" + image_picker_for_web: + dependency: "direct main" + description: + name: image_picker_for_web + sha256: "7d319fb74955ca46d9bf7011497860e3923bb67feebcf068f489311065863899" + url: "https://pub.dev" + source: hosted + version: "2.1.10" + image_picker_ios: + dependency: "direct main" + description: + name: image_picker_ios + sha256: "1768087441bd69ca632249d212c26fa8d530552d37b4896a4dd8d6781435c147" + url: "https://pub.dev" + source: hosted + version: "0.8.6+1" + image_picker_platform_interface: + dependency: "direct main" + description: + name: image_picker_platform_interface + sha256: "7cef2f28f4f2fef99180f636c3d446b4ccbafd6ba0fad2adc9a80c4040f656b8" + url: "https://pub.dev" + source: hosted + version: "2.6.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 + url: "https://pub.dev" + source: hosted + version: "0.18.0" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" + json_path: + dependency: "direct main" + description: + name: json_path + sha256: e1ff18e87737fd5bee5d3408a58c51452b3351ab1292fdcf4ee597ab480123e2 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + lints: + dependency: transitive + description: + name: lints + sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime_type: + dependency: "direct main" + description: + name: mime_type + sha256: "2ad6e67d3d2de9ac0f8ef5352d998fd103cb21351ae8c02fb0c78b079b37d275" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + page_transition: + dependency: "direct main" + description: + name: page_transition + sha256: "12776be3ffb2d080095e912fc4e820a85be8846913a93261148b75256b9c7691" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4 + url: "https://pub.dev" + source: hosted + version: "2.0.14" + path_provider_android: + dependency: "direct main" + description: + name: path_provider_android + sha256: da97262be945a72270513700a92b39dd2f4a54dad55d061687e2e37a6390366a + url: "https://pub.dev" + source: hosted + version: "2.0.25" + path_provider_foundation: + dependency: "direct main" + description: + name: path_provider_foundation + sha256: ad4c4d011830462633f03eb34445a45345673dfd4faf1ab0b4735fbd93b19183 + url: "https://pub.dev" + source: hosted + version: "2.2.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 + url: "https://pub.dev" + source: hosted + version: "2.1.11" + path_provider_platform_interface: + dependency: "direct main" + description: + name: path_provider_platform_interface + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" + url: "https://pub.dev" + source: hosted + version: "2.1.7" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + percent_indicator: + dependency: "direct main" + description: + name: percent_indicator + sha256: cec41f67181fbd5322aa68b355621d1a4eea827426b8eeb613f6cbe195ff7b4a + url: "https://pub.dev" + source: hosted + version: "4.2.2" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: "direct main" + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + provider: + dependency: "direct main" + description: + name: provider + sha256: e1e7413d70444ea3096815a60fe5da1b11bda8a9dc4769252cc82c53536f8bcc + url: "https://pub.dev" + source: hosted + version: "6.0.4" + quiver: + dependency: transitive + description: + name: quiver + sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + url: "https://pub.dev" + source: hosted + version: "3.2.1" + rfc_6901: + dependency: transitive + description: + name: rfc_6901 + sha256: "8d97680dada633146cf75ab9382f2ce2b7e4bd63ceecd867416cf43b5832b988" + url: "https://pub.dev" + source: hosted + version: "0.1.1" + rxdart: + dependency: "direct main" + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a" + url: "https://pub.dev" + source: hosted + version: "2.0.15" + shared_preferences_android: + dependency: "direct main" + description: + name: shared_preferences_android + sha256: "8304d8a1f7d21a429f91dee552792249362b68a331ac5c3c1caf370f658873f6" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + shared_preferences_ios: + dependency: "direct main" + description: + name: shared_preferences_ios + sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + sha256: "81b6a60b2d27020eb0fc41f4cebc91353047309967901a79ee8203e40c42ed46" + url: "https://pub.dev" + source: hosted + version: "2.0.5" + shared_preferences_platform_interface: + dependency: "direct main" + description: + name: shared_preferences_platform_interface + sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d + url: "https://pub.dev" + source: hosted + version: "2.2.0" + shared_preferences_web: + dependency: "direct main" + description: + name: shared_preferences_web + sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + sign_in_with_apple: + dependency: "direct main" + description: + name: sign_in_with_apple + sha256: ac3b113767dfdd765078c507dad9d4d9fe96b669cc7bd88fc36fc15376fb3400 + url: "https://pub.dev" + source: hosted + version: "4.3.0" + sign_in_with_apple_platform_interface: + dependency: "direct main" + description: + name: sign_in_with_apple_platform_interface + sha256: a5883edee09ed6be19de19e7d9f618a617fe41a6fa03f76d082dfb787e9ea18d + url: "https://pub.dev" + source: hosted + version: "1.0.0" + sign_in_with_apple_web: + dependency: "direct main" + description: + name: sign_in_with_apple_web + sha256: "44b66528f576e77847c14999d5e881e17e7223b7b0625a185417829e5306f47a" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + smooth_page_indicator: + dependency: "direct main" + description: + name: smooth_page_indicator + sha256: "8c301bc686892306cd41672c1880167f140c16be305d5ede8201fefd9fcda829" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + speech_to_text: + dependency: "direct main" + description: + name: speech_to_text + sha256: ff8fbd31d039bdbac6c7ec9f0516d37df2cbea62c45198326d3b64034e6fb920 + url: "https://pub.dev" + source: hosted + version: "6.1.1" + speech_to_text_macos: + dependency: transitive + description: + name: speech_to_text_macos + sha256: "6b5575e5a8346be1779838b0a482c259474965b5943668830b479147a75b5bfc" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + speech_to_text_platform_interface: + dependency: transitive + description: + name: speech_to_text_platform_interface + sha256: "13d90215a7554b9a8c1ce47c0a1739af8eacd2cf196ca66351e54dfd2172746d" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + sqflite: + dependency: "direct main" + description: + name: sqflite + sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" + url: "https://pub.dev" + source: hosted + version: "2.2.6" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "8f7603f3f8f126740bc55c4ca2d1027aab4b74a1267a3e31ce51fe40e3b65b8f" + url: "https://pub.dev" + source: hosted + version: "2.4.5+1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: "direct main" + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + timeago: + dependency: "direct main" + description: + name: timeago + sha256: "3a38963615f1178531afa7177199e37522cf8dcbd93a144b597e32ec6d84bd9f" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + translator: + dependency: "direct main" + description: + name: translator + sha256: "225ee22fc482736c593be5c232c0c5884b16d7cc42945c51ac73d9a0441dddcc" + url: "https://pub.dev" + source: hosted + version: "0.1.7" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + url: "https://pub.dev" + source: hosted + version: "6.1.10" + url_launcher_android: + dependency: "direct main" + description: + name: url_launcher_android + sha256: a52628068d282d01a07cd86e6ba99e497aa45ce8c91159015b2416907d78e411 + url: "https://pub.dev" + source: hosted + version: "6.0.27" + url_launcher_ios: + dependency: "direct main" + description: + name: url_launcher_ios + sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "1c4fdc0bfea61a70792ce97157e5cc17260f61abbe4f39354513f39ec6fd73b1" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + url_launcher_platform_interface: + dependency: "direct main" + description: + name: url_launcher_platform_interface + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4 + url: "https://pub.dev" + source: hosted + version: "2.0.18" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: ea8d3fc7b2e0f35de38a7465063ecfcf03d8217f7962aa2a6717132cb5d43a79 + url: "https://pub.dev" + source: hosted + version: "1.1.5" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: a5eaa5d19e123ad4f61c3718ca1ed921c4e6254238d9145f82aa214955d9aced + url: "https://pub.dev" + source: hosted + version: "1.1.5" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "15edc42f7eaa478ce854eaf1fbb9062a899c0e4e56e775dd73b7f4709c97c4ca" + url: "https://pub.dev" + source: hosted + version: "1.1.5" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + video_player: + dependency: "direct main" + description: + name: video_player + sha256: "868a139229acb5018d22aded3eb9cb4767ff43a8216573c086b6c535a4957481" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + video_player_android: + dependency: "direct main" + description: + name: video_player_android + sha256: e7de6fabe5d96048cd8f4d710f25c3df84bb3cab8b22da6c082bd8f39e316984 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + video_player_avfoundation: + dependency: "direct main" + description: + name: video_player_avfoundation + sha256: "90468226c8687adf7b567d9bb42c25588783c4d30509af1fbd663b2dd049f700" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + video_player_platform_interface: + dependency: "direct main" + description: + name: video_player_platform_interface + sha256: a8c4dcae2a7a6e7cc1d7f9808294d968eca1993af34a98e95b9bdfa959bec684 + url: "https://pub.dev" + source: hosted + version: "6.1.0" + video_player_web: + dependency: "direct main" + description: + name: video_player_web + sha256: fb3bbeaf0302cb0c31340ebd6075487939aa1fe3b379d1a8784ef852b679940e + url: "https://pub.dev" + source: hosted + version: "2.0.15" + win32: + dependency: transitive + description: + name: win32 + sha256: a6f0236dbda0f63aa9a25ad1ff9a9d8a4eaaa5012da0dc59d21afdb1dc361ca4 + url: "https://pub.dev" + source: hosted + version: "3.1.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: e0b1147eec179d3911f1f19b59206448f78195ca1d20514134e10641b7d7fbff + url: "https://pub.dev" + source: hosted + version: "1.0.1" + xml: + dependency: transitive + description: + name: xml + sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + url: "https://pub.dev" + source: hosted + version: "6.2.2" +sdks: + dart: ">=2.19.6 <3.0.0" + flutter: ">=3.7.0-0" diff --git a/Team Captains/GenAIRush/finovo/pubspec.yaml b/Team Captains/GenAIRush/finovo/pubspec.yaml new file mode 100644 index 00000000..c0ff8857 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/pubspec.yaml @@ -0,0 +1,164 @@ +name: finovo +description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=2.19.6 <3.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + auto_size_text: 3.0.0 + cached_network_image: 3.2.1 + cloud_firestore: 4.8.0 + cloud_firestore_platform_interface: 5.15.0 + cloud_firestore_web: 3.6.0 + dropdown_button2: 2.0.0 + file_picker: 5.2.6 + firebase_auth: 4.6.2 + firebase_auth_platform_interface: 6.15.2 + firebase_auth_web: 5.5.2 + firebase_core: ^2.13.1 + firebase_core_platform_interface: 4.8.0 + firebase_core_web: 2.5.0 + fl_chart: 0.55.0 + flutter_animate: 4.1.1+1 + flutter_cache_manager: 3.3.0 + flutter_plugin_android_lifecycle: 2.0.9 + flutter_spinkit: 5.1.0 + font_awesome_flutter: 10.1.0 + from_css_color: 2.0.0 + go_router: 7.1.1 + google_fonts: 4.0.3 + google_sign_in: 6.0.2 + google_sign_in_android: 6.1.8 + google_sign_in_ios: 5.6.1 + google_sign_in_platform_interface: 2.4.0 + google_sign_in_web: 0.11.0+2 + image_picker: 0.8.5+3 + image_picker_android: 0.8.5+3 + image_picker_for_web: 2.1.10 + image_picker_ios: 0.8.6+1 + image_picker_platform_interface: 2.6.2 + intl: 0.18.0 + json_path: 0.4.1 + mime_type: 1.0.0 + page_transition: 2.0.4 + path_provider: 2.0.14 + path_provider_android: 2.0.25 + path_provider_foundation: 2.2.2 + path_provider_platform_interface: 2.0.6 + percent_indicator: 4.2.2 + plugin_platform_interface: 2.1.3 + provider: 6.0.4 + rxdart: 0.27.7 + shared_preferences: 2.0.15 + shared_preferences_android: 2.1.0 + shared_preferences_ios: 2.1.1 + shared_preferences_platform_interface: 2.2.0 + shared_preferences_web: 2.1.0 + sign_in_with_apple: 4.3.0 + sign_in_with_apple_platform_interface: 1.0.0 + sign_in_with_apple_web: 1.0.1 + smooth_page_indicator: 1.0.1 + sqflite: 2.2.6 + stream_transform: 2.1.0 + timeago: 3.2.2 + url_launcher: 6.1.10 + url_launcher_android: 6.0.27 + url_launcher_ios: 6.1.4 + url_launcher_platform_interface: 2.1.2 + video_player: 2.6.0 + video_player_android: 2.4.3 + video_player_avfoundation: 2.4.2 + video_player_platform_interface: 6.1.0 + video_player_web: 2.0.15 + flutter_chatgpt_api: ^1.1.0 + + + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + chat_gpt_sdk: ^2.1.2 + dart_openai: ^1.9.91 + speech_to_text: ^6.1.1 + google_mlkit_translation: ^0.8.0 + translator: ^0.1.7 + flutter_svg: ^2.0.5 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/background.jpg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/Team Captains/GenAIRush/finovo/test/widget_test.dart b/Team Captains/GenAIRush/finovo/test/widget_test.dart new file mode 100644 index 00000000..a44ebdb1 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:finovo/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/Team Captains/GenAIRush/finovo/web/favicon.png b/Team Captains/GenAIRush/finovo/web/favicon.png new file mode 100644 index 00000000..8aaa46ac Binary files /dev/null and b/Team Captains/GenAIRush/finovo/web/favicon.png differ diff --git a/Team Captains/GenAIRush/finovo/web/icons/Icon-192.png b/Team Captains/GenAIRush/finovo/web/icons/Icon-192.png new file mode 100644 index 00000000..b749bfef Binary files /dev/null and b/Team Captains/GenAIRush/finovo/web/icons/Icon-192.png differ diff --git a/Team Captains/GenAIRush/finovo/web/icons/Icon-512.png b/Team Captains/GenAIRush/finovo/web/icons/Icon-512.png new file mode 100644 index 00000000..88cfd48d Binary files /dev/null and b/Team Captains/GenAIRush/finovo/web/icons/Icon-512.png differ diff --git a/Team Captains/GenAIRush/finovo/web/icons/Icon-maskable-192.png b/Team Captains/GenAIRush/finovo/web/icons/Icon-maskable-192.png new file mode 100644 index 00000000..eb9b4d76 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/web/icons/Icon-maskable-192.png differ diff --git a/Team Captains/GenAIRush/finovo/web/icons/Icon-maskable-512.png b/Team Captains/GenAIRush/finovo/web/icons/Icon-maskable-512.png new file mode 100644 index 00000000..d69c5669 Binary files /dev/null and b/Team Captains/GenAIRush/finovo/web/icons/Icon-maskable-512.png differ diff --git a/Team Captains/GenAIRush/finovo/web/index.html b/Team Captains/GenAIRush/finovo/web/index.html new file mode 100644 index 00000000..6e61c1ad --- /dev/null +++ b/Team Captains/GenAIRush/finovo/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + finovo + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/web/manifest.json b/Team Captains/GenAIRush/finovo/web/manifest.json new file mode 100644 index 00000000..3699d86e --- /dev/null +++ b/Team Captains/GenAIRush/finovo/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "finovo", + "short_name": "finovo", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/Team Captains/GenAIRush/finovo/windows/.gitignore b/Team Captains/GenAIRush/finovo/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/Team Captains/GenAIRush/finovo/windows/CMakeLists.txt b/Team Captains/GenAIRush/finovo/windows/CMakeLists.txt new file mode 100644 index 00000000..d8924b30 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/CMakeLists.txt @@ -0,0 +1,101 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(finovo LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "finovo") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/Team Captains/GenAIRush/finovo/windows/flutter/CMakeLists.txt b/Team Captains/GenAIRush/finovo/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..930d2071 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugin_registrant.cc b/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..ec8e8d45 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,17 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); +} diff --git a/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugin_registrant.h b/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugins.cmake b/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..02d26c31 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/flutter/generated_plugins.cmake @@ -0,0 +1,25 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + firebase_core + url_launcher_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/Team Captains/GenAIRush/finovo/windows/runner/CMakeLists.txt b/Team Captains/GenAIRush/finovo/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/Team Captains/GenAIRush/finovo/windows/runner/Runner.rc b/Team Captains/GenAIRush/finovo/windows/runner/Runner.rc new file mode 100644 index 00000000..8cf26d64 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "finovo" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "finovo" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "finovo.exe" "\0" + VALUE "ProductName", "finovo" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/Team Captains/GenAIRush/finovo/windows/runner/flutter_window.cpp b/Team Captains/GenAIRush/finovo/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..b25e363e --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/flutter_window.cpp @@ -0,0 +1,66 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/Team Captains/GenAIRush/finovo/windows/runner/flutter_window.h b/Team Captains/GenAIRush/finovo/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/Team Captains/GenAIRush/finovo/windows/runner/main.cpp b/Team Captains/GenAIRush/finovo/windows/runner/main.cpp new file mode 100644 index 00000000..a3ac2a06 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"finovo", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/Team Captains/GenAIRush/finovo/windows/runner/resource.h b/Team Captains/GenAIRush/finovo/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Team Captains/GenAIRush/finovo/windows/runner/resources/app_icon.ico b/Team Captains/GenAIRush/finovo/windows/runner/resources/app_icon.ico new file mode 100644 index 00000000..c04e20ca Binary files /dev/null and b/Team Captains/GenAIRush/finovo/windows/runner/resources/app_icon.ico differ diff --git a/Team Captains/GenAIRush/finovo/windows/runner/runner.exe.manifest b/Team Captains/GenAIRush/finovo/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..a42ea768 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/Team Captains/GenAIRush/finovo/windows/runner/utils.cpp b/Team Captains/GenAIRush/finovo/windows/runner/utils.cpp new file mode 100644 index 00000000..f5bf9fa0 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/utils.cpp @@ -0,0 +1,64 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, utf8_string.data(), + target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/Team Captains/GenAIRush/finovo/windows/runner/utils.h b/Team Captains/GenAIRush/finovo/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/Team Captains/GenAIRush/finovo/windows/runner/win32_window.cpp b/Team Captains/GenAIRush/finovo/windows/runner/win32_window.cpp new file mode 100644 index 00000000..041a3855 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/Team Captains/GenAIRush/finovo/windows/runner/win32_window.h b/Team Captains/GenAIRush/finovo/windows/runner/win32_window.h new file mode 100644 index 00000000..c86632d8 --- /dev/null +++ b/Team Captains/GenAIRush/finovo/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responsponds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/Team Captains/README.md b/Team Captains/README.md new file mode 100644 index 00000000..34714ecb --- /dev/null +++ b/Team Captains/README.md @@ -0,0 +1,14 @@ +#### Team Name - Team Captains +#### Problem Statement - Next Generation Banking System +#### Team Leader Email - kj20021007@gmail.com + +## A Brief of the Prototype: +This application aims to completely change the banking experience with a simple, single sstop solution to the most troublesome aspects of online banking. A smooth and modern user interface, security mesures, and accessibility that helps include underserved people is the main reason behind the development of this prototype +## Tech Stack: + Flutter, ChatGpt API, ML, Python, Firebase, Firestore + +## Step-by-Step Code Execution Instructions: + cd Team Captains > cd GenAIRush > cd finovo > flutter pub get > flutter run + +## What I Learned: +Broad knowledge of various technologies is essential when working with integration of various APIs, and ML models etc. Front end enhances thr user experience and should be focussed on but the backend is perhaps even more important. \ No newline at end of file diff --git a/Team Captains/ml.ipynb b/Team Captains/ml.ipynb new file mode 100644 index 00000000..ffdb3c58 Binary files /dev/null and b/Team Captains/ml.ipynb differ