├── ios ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist └── .gitignore ├── images ├── person.png ├── chat_logo.png ├── openai_logo.jpg ├── success.svg └── bubbles.svg ├── android ├── gradle.properties ├── app │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable-v21 │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── values │ │ │ │ │ └── styles.xml │ │ │ │ └── values-night │ │ │ │ │ └── styles.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── chatgpt_app │ │ │ │ │ └── MainActivity.kt │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle └── build.gradle ├── lib ├── constants │ ├── api_consts.dart │ └── constants.dart ├── services │ ├── assets_manager.dart │ ├── services.dart │ └── api_services.dart ├── models │ ├── chat_models.dart │ └── models.dart ├── widgets │ ├── text_widget.dart │ ├── drop_down.dart │ └── chat_widget.dart ├── providers │ ├── models_provider.dart │ └── chat_provider.dart ├── main.dart └── screens │ ├── splash_screen.dart │ ├── chat_screen.dart │ └── keyGenerate_screen.dart ├── .gitignore ├── test └── widget_test.dart ├── .github └── workflows │ └── dart.yml ├── analysis_options.yaml ├── README.md ├── .metadata ├── pubspec.yaml ├── pubspec.lock └── assets ├── loadingBar.json └── loading.json /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /images/person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/images/person.png -------------------------------------------------------------------------------- /images/chat_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/images/chat_logo.png -------------------------------------------------------------------------------- /images/openai_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/images/openai_logo.jpg -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chamidilshan/ChatGPT-App/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/chatgpt_app/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.chatgpt_app 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/constants/api_consts.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:chatgpt_app/screens/keyGenerate_screen.dart'; 3 | 4 | String Base_url = 'https://api.openai.com/v1'; 5 | String Api_key = ''; 6 | 7 | -------------------------------------------------------------------------------- /lib/constants/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:chatgpt_app/widgets/text_widget.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | Color scaffoldBackgroundColor = Color(0xFFFFFFFF); 5 | Color cardcolor = Color(0xFFF7F7F8); -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip 6 | -------------------------------------------------------------------------------- /lib/services/assets_manager.dart: -------------------------------------------------------------------------------- 1 | class AssetsManager{ 2 | static String imagePath = "/images"; 3 | static String person = "$imagePath/person.png"; 4 | static String botImage = "$imagePath/chat_logo.png"; 5 | static String openAILogo = "$imagePath/openai_logo.jpg"; 6 | } -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /lib/models/chat_models.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ChatModel { 4 | final String msg; 5 | final int chatIndex; 6 | 7 | ChatModel({required this.msg, required this.chatIndex}); 8 | 9 | factory ChatModel.fromJson(Map json) => ChatModel( 10 | msg: json["msg"], 11 | chatIndex: json["chatIndex"], 12 | ); 13 | } -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /images/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/models/models.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class ModelsModel { 6 | final String id; 7 | final int created; 8 | final String root; 9 | 10 | ModelsModel({ 11 | required this.id, 12 | required this.root, 13 | required this.created, 14 | }); 15 | 16 | factory ModelsModel.fromJson(Map json) => ModelsModel( 17 | id: json["id"], 18 | root: json["root"], 19 | created: json["created"], 20 | ); 21 | 22 | static List modelsFromSnapshot(List modelSnapshot) { 23 | return modelSnapshot.map((data) => ModelsModel.fromJson(data)).toList(); 24 | } 25 | } -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /lib/widgets/text_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TextWidget extends StatelessWidget { 4 | const TextWidget({ 5 | Key? key, 6 | required this.label, 7 | this.fontSize = 18.0, 8 | this.color, 9 | this.fontWeight 10 | }) : 11 | super(key: key); 12 | 13 | final String label; 14 | final double fontSize; 15 | final Color? color; 16 | final FontWeight? fontWeight; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Text( 21 | label, 22 | style: TextStyle( 23 | color: color ?? Colors.black, 24 | fontSize: fontSize, 25 | fontWeight: fontWeight ?? FontWeight.normal, 26 | ), 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.6.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.1.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /lib/providers/models_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:chatgpt_app/services/api_services.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:chatgpt_app/models/models.dart'; 4 | 5 | class ModelsProvider with ChangeNotifier { 6 | String currentModel = "gpt-3.5-turbo-0301"; 7 | String get getCurrentModel { 8 | return currentModel; 9 | } 10 | 11 | void setCurrentModel(String newModel) { 12 | currentModel = newModel; 13 | notifyListeners(); 14 | } 15 | 16 | List modelsList = []; 17 | 18 | List get getModelsList { 19 | return modelsList; 20 | } 21 | 22 | Future> getAllModels() async { 23 | modelsList = await ApiService.getModels(); 24 | return modelsList; 25 | } 26 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /images/bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /lib/providers/chat_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | import 'package:chatgpt_app/models/models.dart'; 5 | import 'package:chatgpt_app/services/api_services.dart'; 6 | 7 | import '../models/chat_models.dart'; 8 | 9 | class ChatProvider with ChangeNotifier { 10 | List chatList = []; 11 | List get getChatList { 12 | return chatList; 13 | } 14 | 15 | void addUserMessage({required String msg}) { 16 | chatList.add(ChatModel(msg: msg, chatIndex: 0)); 17 | notifyListeners(); 18 | } 19 | 20 | Future sendMessageAndGetAnswers( 21 | {required String msg, required String chosenModelId}) async { 22 | if (chosenModelId.toLowerCase().startsWith("gpt")) { 23 | chatList.addAll(await ApiService.sendMessageGPT( 24 | message: msg, 25 | modelId: chosenModelId, 26 | )); 27 | } else { 28 | chatList.addAll(await ApiService.sendMessage( 29 | message: msg, 30 | modelId: chosenModelId, 31 | )); 32 | } 33 | notifyListeners(); 34 | } 35 | } -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:chatgpt_app/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /lib/services/services.dart: -------------------------------------------------------------------------------- 1 | import 'package:chatgpt_app/widgets/drop_down.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:chatgpt_app/widgets/text_widget.dart'; 4 | import 'package:chatgpt_app/constants/constants.dart'; 5 | 6 | class Services{ 7 | static Future showModalSheet({required BuildContext context}) async{ 8 | 9 | await showModalBottomSheet( 10 | shape: RoundedRectangleBorder( 11 | borderRadius: BorderRadius.vertical( 12 | top: Radius.circular(20.0), 13 | ) 14 | ), 15 | backgroundColor: scaffoldBackgroundColor, 16 | context: context, 17 | builder: (context){ 18 | return Padding( 19 | padding: const EdgeInsets.all(20.0), 20 | child: Row( 21 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 22 | children: [ 23 | Flexible( 24 | child: TextWidget( 25 | label: 'Chosen Model: ', 26 | fontSize: 16.0, 27 | ), 28 | ), 29 | Flexible( 30 | flex: 2, 31 | child: DropDownWidget(), 32 | ), 33 | ], 34 | ), 35 | ); 36 | } 37 | ); 38 | } 39 | } -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:chatgpt_app/providers/models_provider.dart'; 2 | import 'package:chatgpt_app/screens/keyGenerate_screen.dart'; 3 | import 'package:chatgpt_app/screens/splash_screen.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'providers/chat_provider.dart'; 6 | import 'package:animated_text_kit/animated_text_kit.dart'; 7 | import 'package:provider/provider.dart'; 8 | import 'constants/constants.dart'; 9 | import 'screens/chat_screen.dart'; 10 | 11 | void main() { 12 | runApp(const MyApp()); 13 | } 14 | 15 | class MyApp extends StatelessWidget { 16 | const MyApp({super.key}); 17 | 18 | // This widget is the root of your application. 19 | @override 20 | Widget build(BuildContext context) { 21 | return MultiProvider( 22 | providers: [ 23 | ChangeNotifierProvider( 24 | create: (_) => ModelsProvider(), 25 | ), 26 | ChangeNotifierProvider( 27 | create: (_) => ChatProvider(), 28 | ), 29 | ], 30 | child: MaterialApp( 31 | title: 'ChatGPT App', 32 | debugShowCheckedModeBanner: false, 33 | theme: ThemeData( 34 | scaffoldBackgroundColor: scaffoldBackgroundColor, 35 | appBarTheme: AppBarTheme( 36 | color: cardcolor, 37 | ) 38 | ), 39 | home: ChatScreen(), 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /.github/workflows/dart.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | name: Dart 7 | 8 | on: 9 | push: 10 | branches: [ "master" ] 11 | pull_request: 12 | branches: [ "master" ] 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - uses: actions/checkout@v3 20 | 21 | # Note: This workflow uses the latest stable version of the Dart SDK. 22 | # You can specify other versions if desired, see documentation here: 23 | # https://github.com/dart-lang/setup-dart/blob/main/README.md 24 | # - uses: dart-lang/setup-dart@v1 25 | - uses: dart-lang/setup-dart@9a04e6d73cca37bd455e0608d7e5092f881fd603 26 | 27 | - name: Install dependencies 28 | run: dart pub get 29 | 30 | # Uncomment this step to verify the use of 'dart format' on each commit. 31 | # - name: Verify formatting 32 | # run: dart format --output=none --set-exit-if-changed . 33 | 34 | # Consider passing '--fatal-infos' for slightly stricter analysis. 35 | - name: Analyze project source 36 | run: dart analyze 37 | 38 | # Your project will need to have tests in test/ and a dependency on 39 | # package:test for this step to succeed. Note that Flutter projects will 40 | # want to change this to 'flutter test'. 41 | - name: Run tests 42 | run: dart test 43 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ChatGPT App 2 | 3 | Introducing ChatGPT app, a Flutter app that lets you chat with OpenAI's language model. With its sleek and user-friendly interface, this app takes your chat experience to the next level. Its easy-to-use input field and ability to save API keys make chatting with the AI language model a breeze. 4 | 5 | ## Features 6 | - Live previews 7 | - Cross platform 8 | - User-friendly interface 9 | - Option to save API key 10 | - Real time response 11 | 12 | ## Screenshots 13 | 14 | ![ChatGPT APP](https://user-images.githubusercontent.com/89196733/218802241-b56b8741-da3e-484c-866e-350b021c70e7.jpg) 15 | 16 | 17 | 18 | ## Installation 19 | 20 | 1. Clone the repository 21 | 22 | ```bash 23 | git clone https://github.com/Chamidilshan/ChatGPT-App.git 24 | 25 | ``` 26 | 2. Install dependencies 27 | 28 | ```bash 29 | flutter pub get 30 | 31 | ``` 32 | 3. Run the app 33 | 34 | ```bash 35 | flutter run 36 | 37 | ``` 38 | 39 | ## Configuration : 40 | 41 | To use this app, you need to generate an API key from OpenAI. Once you have the API key, you can enter it in the app and start chatting. After you saved your API key, you won't need to enter it again in the future. 42 | ## Acknowledgements 43 | 44 | - This app was made possible with the help of Flutter and OpenAI API. We are grateful for their support and resources. 45 | 46 | 47 | 48 | ## Join with app! 49 | - ChatGPT app is a one-of-a-kind chat experience that is guaranteed to keep you engaged. 50 | 51 | - If you love what you see, don't forget to give this project a star. Your support means the world to us! 52 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled. 5 | 6 | version: 7 | revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 8 | channel: stable 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 17 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 18 | - platform: android 19 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 20 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 21 | - platform: ios 22 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 23 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 24 | - platform: linux 25 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 26 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 27 | - platform: macos 28 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 29 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 30 | - platform: web 31 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 32 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 33 | - platform: windows 34 | create_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 35 | base_revision: b8f7f1f9869bb2d116aa6a70dbeac61000b52849 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Chatgpt App 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | chatgpt_app 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | CADisableMinimumFrameDurationOnPhone 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /lib/screens/splash_screen.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:chatgpt_app/screens/chat_screen.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:lottie/lottie.dart'; 5 | 6 | class SplashScreen extends StatelessWidget { 7 | const SplashScreen({Key? key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | Timer( 12 | Duration(seconds: 8), 13 | () => Navigator.of(context).pushReplacement( 14 | MaterialPageRoute( 15 | builder: (BuildContext) => ChatScreen()) 16 | ) 17 | ); 18 | return Scaffold( 19 | backgroundColor: Colors.white, 20 | body: Column( 21 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 22 | children: [ 23 | Column( 24 | children: [ 25 | Padding( 26 | padding: const EdgeInsets.all(8.0), 27 | child: Image( 28 | image: AssetImage('images/chat_logo.png'), 29 | width: 125.0, 30 | ), 31 | ), 32 | SizedBox( 33 | height: 20.0, 34 | ), 35 | Text( 36 | 'ChatGPT', 37 | style: Theme.of(context).textTheme.headline4!.copyWith(color: Colors.black), 38 | ), 39 | ], 40 | ), 41 | SizedBox( 42 | height: 80.0, 43 | ), 44 | Padding( 45 | padding: const EdgeInsets.only(left: 40.0, right: 40.0), 46 | child: Column( 47 | children: [ 48 | // Text( 49 | // 'Loading your chat assistant', 50 | // style: TextStyle( 51 | // color: Colors.grey 52 | // ), 53 | // ), 54 | Lottie.asset('assets/loadingBar.json'), 55 | // Lottie.network( 56 | // 'https://assets6.lottiefiles.com/packages/lf20_7prnsonq.json', 57 | // ), 58 | ], 59 | ), 60 | ), 61 | ], 62 | ), 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/widgets/drop_down.dart: -------------------------------------------------------------------------------- 1 | import 'package:chatgpt_app/models/models.dart'; 2 | import 'package:chatgpt_app/providers/models_provider.dart'; 3 | import 'package:chatgpt_app/services/api_services.dart'; 4 | import 'package:chatgpt_app/widgets/text_widget.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:chatgpt_app/constants/constants.dart'; 7 | import 'package:provider/provider.dart'; 8 | 9 | class DropDownWidget extends StatefulWidget { 10 | const DropDownWidget({Key? key}) : super(key: key); 11 | 12 | @override 13 | State createState() => _DropDownWidgetState(); 14 | } 15 | 16 | class _DropDownWidgetState extends State { 17 | 18 | String ?currentModels; 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | final modelsProvider = Provider.of(context, listen: false); 23 | currentModels = modelsProvider.getCurrentModel; 24 | return FutureBuilder>( 25 | future: modelsProvider.getAllModels(), 26 | builder: (context, snapshot) { 27 | if (snapshot.hasError) { 28 | return Center( 29 | child: TextWidget( 30 | label: snapshot.error.toString(), 31 | ), 32 | ); 33 | } 34 | return snapshot.data == null || snapshot.data!.isEmpty ? SizedBox 35 | .shrink() : 36 | FittedBox( 37 | child: DropdownButton( 38 | dropdownColor: scaffoldBackgroundColor, 39 | iconEnabledColor: Colors.white, 40 | items: List>.generate( 41 | snapshot.data!.length, (index) => DropdownMenuItem( 42 | value: snapshot.data![index].id, 43 | child: TextWidget( 44 | label: snapshot.data![index].id, 45 | fontSize: 15.0, 46 | ) 47 | ), 48 | ), 49 | value: currentModels, 50 | onChanged: (value) { 51 | setState(() { 52 | currentModels = value.toString(); 53 | }); 54 | modelsProvider.setCurrentModel(value.toString(),); 55 | }, 56 | ), 57 | ); 58 | }); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion flutter.compileSdkVersion 30 | ndkVersion flutter.ndkVersion 31 | 32 | compileOptions { 33 | sourceCompatibility JavaVersion.VERSION_1_8 34 | targetCompatibility JavaVersion.VERSION_1_8 35 | } 36 | 37 | kotlinOptions { 38 | jvmTarget = '1.8' 39 | } 40 | 41 | sourceSets { 42 | main.java.srcDirs += 'src/main/kotlin' 43 | } 44 | 45 | defaultConfig { 46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 47 | applicationId "com.example.chatgpt_app" 48 | // You can update the following values to match your application needs. 49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. 50 | minSdkVersion flutter.minSdkVersion 51 | targetSdkVersion flutter.targetSdkVersion 52 | versionCode flutterVersionCode.toInteger() 53 | versionName flutterVersionName 54 | } 55 | 56 | buildTypes { 57 | release { 58 | // TODO: Add your own signing config for the release build. 59 | // Signing with the debug keys for now, so `flutter run --release` works. 60 | signingConfig signingConfigs.debug 61 | } 62 | } 63 | } 64 | 65 | flutter { 66 | source '../..' 67 | } 68 | 69 | dependencies { 70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 71 | } 72 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 25 | 33 | 37 | 41 | 42 | 43 | 44 | 45 | 46 | 48 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /lib/widgets/chat_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:animated_text_kit/animated_text_kit.dart'; 2 | import 'package:chatgpt_app/constants/constants.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:chatgpt_app/widgets/text_widget.dart'; 5 | 6 | class ChatWidget extends StatelessWidget { 7 | const ChatWidget({ 8 | Key? key, 9 | required this.msg, 10 | required this.chatIndex 11 | }) : 12 | super(key: key); 13 | 14 | final String msg; 15 | final int chatIndex; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return Column( 20 | crossAxisAlignment: CrossAxisAlignment.start, 21 | children: [ 22 | Material( 23 | color: chatIndex == 0 ? scaffoldBackgroundColor: cardcolor, 24 | child: Padding( 25 | padding: const EdgeInsets.all(8.0), 26 | child: Column( 27 | children: [ 28 | Row( 29 | crossAxisAlignment: CrossAxisAlignment.start, 30 | children: [ 31 | Image.asset( chatIndex == 0 ? 'images/person.png' : 'images/chat_logo.png', 32 | height: 30.0, 33 | width: 30.0, 34 | ), 35 | SizedBox( 36 | width: 10.0, 37 | ), 38 | Expanded( 39 | child: chatIndex == 0 40 | ?TextWidget( 41 | label: msg, 42 | ): DefaultTextStyle( 43 | style: TextStyle( 44 | color: Colors.black, 45 | fontWeight: FontWeight.normal, 46 | fontSize: 16 47 | ), 48 | child: AnimatedTextKit( 49 | isRepeatingAnimation: false, 50 | repeatForever: true, 51 | displayFullTextOnTap: false, 52 | totalRepeatCount: 0, 53 | stopPauseOnTap: true, 54 | animatedTexts: [TyperAnimatedText(msg.trim(),),],)), 55 | ), 56 | // chatIndex == 0 ? SizedBox.shrink() 57 | // :Column( 58 | // children: [ 59 | // Row( 60 | // mainAxisAlignment: MainAxisAlignment.end, 61 | // // mainAxisAlignment: MainAxisAlignment.end, 62 | // // mainAxisSize: MainAxisSize.min, 63 | // children: [ 64 | // IconButton( 65 | // onPressed: () {}, 66 | // highlightColor: Colors.green.withOpacity(0.3), 67 | // icon: Icon( 68 | // Icons.thumb_up_alt_outlined, 69 | // color: Colors.white, 70 | // size: 20.0, 71 | // ), 72 | // ), 73 | // // SizedBox( 74 | // // width: 5.0, 75 | // // ), 76 | // IconButton( 77 | // onPressed: () {}, 78 | // highlightColor: Colors.green.withOpacity(0.3), 79 | // icon: Icon( 80 | // Icons.thumb_down_outlined, 81 | // color: Colors.white, 82 | // size: 20.0, 83 | // ), 84 | // ) 85 | // ], 86 | // ), 87 | // ], 88 | // ) 89 | ], 90 | ), 91 | SizedBox( 92 | height: 5.0, 93 | ), 94 | ], 95 | ), 96 | ), 97 | ) 98 | ], 99 | ); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /lib/services/api_services.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | import 'dart:math'; 4 | 5 | import 'package:chatgpt_app/constants/api_consts.dart'; 6 | import 'package:chatgpt_app/models/models.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'package:http/http.dart' as http; 9 | import 'package:chatgpt_app/services/api_services.dart'; 10 | 11 | import '../models/chat_models.dart'; 12 | 13 | class ApiService { 14 | static Future> getModels() async { 15 | try { 16 | var response = await http.get( 17 | Uri.parse("$Base_url/models"), 18 | headers: {'Authorization': 'Bearer $Api_key'}, 19 | ); 20 | 21 | Map jsonResponse = jsonDecode(response.body); 22 | 23 | if (jsonResponse['error'] != null) { 24 | // print("jsonResponse['error'] ${jsonResponse['error']["message"]}"); 25 | throw HttpException(jsonResponse['error']["message"]); 26 | } 27 | // print("jsonResponse $jsonResponse"); 28 | List temp = []; 29 | for (var value in jsonResponse["data"]) { 30 | temp.add(value); 31 | // log("temp ${value["id"]}"); 32 | } 33 | return ModelsModel.modelsFromSnapshot(temp); 34 | } catch (error) { 35 | //log("error $error"); 36 | rethrow; 37 | } 38 | } 39 | 40 | // Send Message using ChatGPT API 41 | static Future> sendMessageGPT( 42 | {required String message, required String modelId}) async { 43 | try { 44 | //log("modelId $modelId"); 45 | var response = await http.post( 46 | Uri.parse("$Base_url/chat/completions"), 47 | headers: { 48 | 'Authorization': 'Bearer $Api_key', 49 | "Content-Type": "application/json" 50 | }, 51 | body: jsonEncode( 52 | { 53 | "model": modelId, 54 | "messages": [ 55 | { 56 | "role": "user", 57 | "content": message, 58 | } 59 | ] 60 | }, 61 | ), 62 | ); 63 | 64 | Map jsonResponse = jsonDecode(response.body); 65 | 66 | if (jsonResponse['error'] != null) { 67 | // print("jsonResponse['error'] ${jsonResponse['error']["message"]}"); 68 | throw HttpException(jsonResponse['error']["message"]); 69 | } 70 | List chatList = []; 71 | if (jsonResponse["choices"].length > 0) { 72 | // log("jsonResponse[choices]text ${jsonResponse["choices"][0]["text"]}"); 73 | chatList = List.generate( 74 | jsonResponse["choices"].length, 75 | (index) => ChatModel( 76 | msg: jsonResponse["choices"][index]["message"]["content"], 77 | chatIndex: 1, 78 | ), 79 | ); 80 | } 81 | return chatList; 82 | } catch (error) { 83 | //log("error $error"); 84 | rethrow; 85 | } 86 | } 87 | 88 | 89 | // Send Message fct 90 | static Future> sendMessage( 91 | {required String message, required String modelId}) async { 92 | try { 93 | //log("modelId $modelId"); 94 | var response = await http.post( 95 | Uri.parse("$Base_url/completions"), 96 | headers: { 97 | 'Authorization': 'Bearer $Api_key', 98 | "Content-Type": "application/json" 99 | }, 100 | body: jsonEncode( 101 | { 102 | "model": modelId, 103 | "prompt": message, 104 | "max_tokens": 300, 105 | }, 106 | ), 107 | ); 108 | 109 | Map jsonResponse = jsonDecode(response.body); 110 | 111 | if (jsonResponse['error'] != null) { 112 | // print("jsonResponse['error'] ${jsonResponse['error']["message"]}"); 113 | throw HttpException(jsonResponse['error']["message"]); 114 | } 115 | List chatList = []; 116 | if (jsonResponse["choices"].length > 0) { 117 | // log("jsonResponse[choices]text ${jsonResponse["choices"][0]["text"]}"); 118 | chatList = List.generate( 119 | jsonResponse["choices"].length, 120 | (index) => ChatModel( 121 | msg: jsonResponse["choices"][index]["text"], 122 | chatIndex: 1, 123 | ), 124 | ); 125 | } 126 | return chatList; 127 | } catch (error) { 128 | //log("error $error"); 129 | rethrow; 130 | } 131 | } 132 | } -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: chatgpt_app 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | # In Windows, build-name is used as the major, minor, and patch parts 19 | # of the product and file versions while build-number is used as the build suffix. 20 | version: 1.0.0+1 21 | 22 | environment: 23 | sdk: '>=2.18.5 <3.0.0' 24 | 25 | # Dependencies specify other packages that your package needs in order to work. 26 | # To automatically upgrade your package dependencies to the latest versions 27 | # consider running `flutter pub upgrade --major-versions`. Alternatively, 28 | # dependencies can be manually updated by changing the version numbers below to 29 | # the latest version available on pub.dev. To see which dependencies have newer 30 | # versions available, run `flutter pub outdated`. 31 | dependencies: 32 | flutter: 33 | sdk: flutter 34 | 35 | 36 | # The following adds the Cupertino Icons font to your application. 37 | # Use with the CupertinoIcons class for iOS style icons. 38 | cupertino_icons: ^1.0.2 39 | flutter_spinkit: ^5.1.0 40 | http: ^0.13.5 41 | provider: ^6.0.5 42 | animated_text_kit: ^4.2.2 43 | url_launcher: ^6.1.9 44 | shared_preferences: ^2.0.17 45 | flutter_svg: ^1.1.6 46 | get: ^4.6.5 47 | lottie: ^2.2.0 48 | 49 | dev_dependencies: 50 | flutter_test: 51 | sdk: flutter 52 | 53 | # The "flutter_lints" package below contains a set of recommended lints to 54 | # encourage good coding practices. The lint set provided by the package is 55 | # activated in the `analysis_options.yaml` file located at the root of your 56 | # package. See that file for information about deactivating specific lint 57 | # rules and activating additional ones. 58 | flutter_lints: ^2.0.0 59 | 60 | # For information on the generic Dart part of this file, see the 61 | # following page: https://dart.dev/tools/pub/pubspec 62 | 63 | # The following section is specific to Flutter packages. 64 | flutter: 65 | 66 | # The following line ensures that the Material Icons font is 67 | # included with your application, so that you can use the icons in 68 | # the material Icons class. 69 | uses-material-design: true 70 | 71 | # To add assets to your application, add an assets section, like this: 72 | assets: 73 | - images/ 74 | - assets/loading.json 75 | - assets/loadingBar.json 76 | # - images/a_dot_ham.jpeg 77 | 78 | # An image asset can refer to one or more resolution-specific "variants", see 79 | # https://flutter.dev/assets-and-images/#resolution-aware 80 | 81 | # For details regarding adding assets from package dependencies, see 82 | # https://flutter.dev/assets-and-images/#from-packages 83 | 84 | # To add custom fonts to your application, add a fonts section here, 85 | # in this "flutter" section. Each entry in this list should have a 86 | # "family" key with the font family name, and a "fonts" key with a 87 | # list giving the asset and other descriptors for the font. For 88 | # example: 89 | # fonts: 90 | # - family: Schyler 91 | # fonts: 92 | # - asset: fonts/Schyler-Regular.ttf 93 | # - asset: fonts/Schyler-Italic.ttf 94 | # style: italic 95 | # - family: Trajan Pro 96 | # fonts: 97 | # - asset: fonts/TrajanPro.ttf 98 | # - asset: fonts/TrajanPro_Bold.ttf 99 | # weight: 700 100 | # 101 | # For details regarding fonts from package dependencies, 102 | # see https://flutter.dev/custom-fonts/#from-packages 103 | -------------------------------------------------------------------------------- /lib/screens/chat_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:chatgpt_app/constants/constants.dart'; 2 | import 'package:chatgpt_app/screens/keyGenerate_screen.dart'; 3 | import 'package:chatgpt_app/services/api_services.dart'; 4 | import 'package:chatgpt_app/services/assets_manager.dart'; 5 | import 'package:chatgpt_app/widgets/chat_widget.dart'; 6 | import 'package:chatgpt_app/widgets/text_widget.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'package:chatgpt_app/services/assets_manager.dart'; 9 | import 'package:flutter_spinkit/flutter_spinkit.dart'; 10 | import 'dart:developer'; 11 | import 'package:chatgpt_app/services/services.dart'; 12 | import 'package:provider/provider.dart'; 13 | import 'package:url_launcher/url_launcher.dart'; 14 | 15 | import '../models/chat_models.dart'; 16 | import '../providers/chat_provider.dart'; 17 | import '../providers/models_provider.dart'; 18 | 19 | class ChatScreen extends StatefulWidget { 20 | const ChatScreen({Key? key}) : super(key: key); 21 | 22 | @override 23 | State createState() => _ChatScreenState(); 24 | } 25 | 26 | class _ChatScreenState extends State { 27 | 28 | bool isTyping = false; 29 | late TextEditingController textEditingController; 30 | late ScrollController _listScrollController; 31 | late FocusNode focusNode; 32 | 33 | @override 34 | void initState(){ 35 | _listScrollController = ScrollController(); 36 | textEditingController = TextEditingController(); 37 | focusNode = FocusNode(); 38 | super.initState(); 39 | } 40 | 41 | @override 42 | void dispose(){ 43 | _listScrollController.dispose(); 44 | textEditingController.dispose(); 45 | focusNode.dispose(); 46 | super.dispose(); 47 | } 48 | 49 | //List chatList = []; 50 | @override 51 | Widget build(BuildContext context) { 52 | final modelsProvider = Provider.of(context); 53 | final chatProvider = Provider.of(context); 54 | return Scaffold( 55 | appBar: AppBar( 56 | //backgroundColor: Colors.white, 57 | elevation: 2, 58 | // leading: Padding( 59 | // padding: const EdgeInsets.all(8.0), 60 | // child: Image.asset('images/openai_logo.jpg'), 61 | // ), 62 | title: const Text("ChatGPT"), 63 | titleTextStyle: TextStyle( 64 | color: Colors.black, 65 | fontSize: 18.0 66 | ), 67 | iconTheme: IconThemeData(color: Colors.black87), 68 | centerTitle: true, 69 | // actions: [ 70 | // IconButton( 71 | // onPressed: () async { 72 | // await Services.showModalSheet(context: context); 73 | // }, 74 | // icon: const Icon(Icons.more_vert_rounded, color: Colors.black), 75 | // ), 76 | // ], 77 | ), 78 | drawer: NavigationDrawerNew(), 79 | body: SafeArea( 80 | child: Padding( 81 | padding: const EdgeInsets.only(top: 8.0), 82 | child: Column( 83 | children: [ 84 | Flexible( 85 | child: ListView.builder( 86 | controller: _listScrollController, 87 | itemCount: chatProvider.getChatList.length, //chatList.length, 88 | itemBuilder: (context, index) { 89 | return Padding( 90 | padding: const EdgeInsets.only(top: 10.0), 91 | child: ChatWidget( 92 | msg: chatProvider 93 | .getChatList[index].msg, // chatList[index].msg, 94 | chatIndex: chatProvider.getChatList[index] 95 | .chatIndex, //chatList[index].chatIndex, 96 | ), 97 | ); 98 | }), 99 | ), 100 | if (isTyping) ...[ 101 | const SpinKitThreeBounce( 102 | color: Colors.black, 103 | size: 18, 104 | ), 105 | ], 106 | const SizedBox( 107 | height: 15, 108 | ), 109 | Padding( 110 | padding: const EdgeInsets.all(8.0), 111 | child: Material( 112 | shape: RoundedRectangleBorder( 113 | side: BorderSide( 114 | color: Colors.green, 115 | ), 116 | borderRadius: BorderRadius.circular(10.0), 117 | ), 118 | color: cardcolor, 119 | child: Padding( 120 | padding: const EdgeInsets.all(8.0), 121 | child: Row( 122 | children: [ 123 | Expanded( 124 | child: TextField( 125 | focusNode: focusNode, 126 | style: const TextStyle(color: Colors.black), 127 | controller: textEditingController, 128 | onSubmitted: (value) async { 129 | await sendMessageFCT( 130 | modelsProvider: modelsProvider, 131 | chatProvider: chatProvider); 132 | }, 133 | decoration: const InputDecoration.collapsed( 134 | hintText: "Ask me anything!", 135 | hintStyle: TextStyle(color: Colors.grey) 136 | ), 137 | ), 138 | ), 139 | IconButton( 140 | onPressed: () async { 141 | await sendMessageFCT( 142 | modelsProvider: modelsProvider, 143 | chatProvider: chatProvider); 144 | }, 145 | icon: Transform.rotate( 146 | angle: 320, 147 | child: Icon( 148 | Icons.send, 149 | color: Colors.black87, 150 | ), 151 | )) 152 | ], 153 | ), 154 | ), 155 | ), 156 | ), 157 | Padding( 158 | padding: const EdgeInsets.all(8.0), 159 | child: Text( 160 | 'Free Research Preview. Our goal is to make AI systems more natural and safe to interact with. Your feedback will help us improve.', 161 | style: TextStyle( 162 | color: Colors.grey, 163 | fontSize: 10.0, 164 | ), 165 | textAlign: TextAlign.center, 166 | ), 167 | ) 168 | ], 169 | ), 170 | ), 171 | ), 172 | ); 173 | } 174 | 175 | void scrollListToEND() { 176 | _listScrollController.animateTo( 177 | _listScrollController.position.maxScrollExtent, 178 | duration: const Duration(seconds: 2), 179 | curve: Curves.easeOut); 180 | } 181 | 182 | Future sendMessageFCT( 183 | {required ModelsProvider modelsProvider, 184 | required ChatProvider chatProvider}) async { 185 | if (isTyping) { 186 | ScaffoldMessenger.of(context).showSnackBar( 187 | const SnackBar( 188 | content: TextWidget( 189 | label: "You cant send multiple messages at a time", 190 | ), 191 | backgroundColor: Colors.red, 192 | ), 193 | ); 194 | return; 195 | } 196 | if (textEditingController.text.isEmpty) { 197 | ScaffoldMessenger.of(context).showSnackBar( 198 | const SnackBar( 199 | content: TextWidget( 200 | label: "Please type a message", 201 | ), 202 | backgroundColor: Colors.red, 203 | ), 204 | ); 205 | return; 206 | } 207 | try { 208 | String msg = textEditingController.text; 209 | setState(() { 210 | isTyping = true; 211 | // chatList.add(ChatModel(msg: textEditingController.text, chatIndex: 0)); 212 | chatProvider.addUserMessage(msg: msg); 213 | textEditingController.clear(); 214 | focusNode.unfocus(); 215 | }); 216 | await chatProvider.sendMessageAndGetAnswers( 217 | msg: msg, chosenModelId: modelsProvider.getCurrentModel); 218 | // chatList.addAll(await ApiService.sendMessage( 219 | // message: textEditingController.text, 220 | // modelId: modelsProvider.getCurrentModel, 221 | // )); 222 | setState(() {}); 223 | } catch (error) { 224 | log("error $error"); 225 | ScaffoldMessenger.of(context).showSnackBar(SnackBar( 226 | content: TextWidget( 227 | label: error.toString(), 228 | ), 229 | backgroundColor: Colors.red, 230 | )); 231 | } finally { 232 | setState(() { 233 | scrollListToEND(); 234 | isTyping = false; 235 | }); 236 | } 237 | } 238 | } 239 | 240 | class NavigationDrawerNew extends StatelessWidget { 241 | const NavigationDrawerNew({Key? key}) : super(key: key); 242 | 243 | @override 244 | Widget build(BuildContext context) { 245 | return Drawer( 246 | child: SingleChildScrollView( 247 | child: Column( 248 | crossAxisAlignment: CrossAxisAlignment.stretch, 249 | children: [ 250 | buildHeader(context), 251 | buildMenuItems(context), 252 | ], 253 | ), 254 | ), 255 | ); 256 | } 257 | Widget buildHeader(BuildContext context) => Container( 258 | padding: EdgeInsets.all(24.0), 259 | child: Wrap( 260 | runSpacing: 20.0, 261 | ), 262 | ); 263 | Widget buildMenuItems(BuildContext context) => Container( 264 | padding: EdgeInsets.only(top: 25.0), 265 | child: Wrap( 266 | runSpacing: 10.0, 267 | children: [ 268 | ListTile( 269 | leading: Icon(Icons.chat_outlined), 270 | title: Text('Chat with me'), 271 | onTap: () { 272 | Navigator.of(context).pushReplacement( 273 | MaterialPageRoute(builder: (context) => ChatScreen())); 274 | }, 275 | ), 276 | ListTile( 277 | leading: Icon(Icons.key_outlined), 278 | title: Text('Generate a Key'), 279 | onTap: () { 280 | Navigator.of(context).push( 281 | MaterialPageRoute(builder: (context) => GenerateKey()) 282 | ); 283 | }, 284 | ), 285 | ListTile( 286 | leading: Icon(Icons.discord_outlined), 287 | title: Text('OpenAI Discord'), 288 | onTap: () async { 289 | if(await launch('https://discord.com/invite/openai', 290 | )){ 291 | debugPrint('succesfully'); 292 | } 293 | }, 294 | ), 295 | Divider(color: Colors.black54), 296 | ListTile( 297 | leading: Icon(Icons.logout_outlined), 298 | title: Text('Log out'), 299 | onTap: () {}, 300 | ), 301 | ListTile( 302 | leading: Icon(Icons.settings_outlined), 303 | title: Text('Settings'), 304 | onTap: () {}, 305 | ), 306 | ], 307 | ), 308 | ); 309 | } 310 | 311 | 312 | 313 | -------------------------------------------------------------------------------- /lib/screens/keyGenerate_screen.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:chatgpt_app/screens/chat_screen.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:shared_preferences/shared_preferences.dart'; 6 | import 'package:url_launcher/url_launcher.dart'; 7 | import 'package:flutter/services.dart'; 8 | import 'package:chatgpt_app/constants/api_consts.dart'; 9 | import 'package:flutter_svg/flutter_svg.dart'; 10 | import 'package:get/get.dart'; 11 | 12 | class GenerateKey extends StatefulWidget { 13 | 14 | 15 | @override 16 | State createState() => _GenerateKeyState(); 17 | } 18 | class _GenerateKeyState extends State { 19 | 20 | TextEditingController pasteController = TextEditingController(); 21 | String ApiKey = ''; 22 | 23 | @override void initState() { 24 | getData(); 25 | } 26 | 27 | getData() async{ 28 | SharedPreferences prefs = await SharedPreferences.getInstance(); 29 | setState(() { 30 | ApiKey = prefs.getString('ApiKey')!; 31 | }); 32 | } 33 | 34 | @override 35 | void dispose(){ 36 | pasteController.dispose(); 37 | super.dispose(); 38 | } 39 | 40 | @override 41 | 42 | Widget build(BuildContext context) { 43 | return Scaffold( 44 | appBar: AppBar( 45 | iconTheme: IconThemeData(color: Colors.black87), 46 | ), 47 | drawer: NavigationDrawerNew(), 48 | body: SafeArea( 49 | child: Container( 50 | padding: EdgeInsets.only(left: 40.0, right: 40.0, top: 20.0), 51 | child: Column( 52 | crossAxisAlignment: CrossAxisAlignment.start, 53 | children: [ 54 | SizedBox( 55 | height: 40.0, 56 | ), 57 | Text( 58 | 'Generate a', style: TextStyle(fontSize: 20.0, color: Colors.black87), 59 | ), 60 | SizedBox( 61 | height: 5.0, 62 | ), 63 | Text( 64 | 'API Key', style: TextStyle(fontSize: 20.0, color: Colors.black87), 65 | ), 66 | SizedBox( 67 | height: 15.0, 68 | ), 69 | Text('To chat with me, get an API key from OpenAI. Simply click this button and follow the steps to generate a key. ' 70 | 'Then enter the key in our app to start chatting', 71 | style: TextStyle(fontSize: 12.0, color: Colors.black87), 72 | ), 73 | // Padding( 74 | // padding: const EdgeInsets.all(5.0), 75 | // child: Container( 76 | // padding: EdgeInsets.all(15.0), 77 | // child: Text('To chat with me you should generate a API key'), 78 | // decoration: BoxDecoration( 79 | // border: Border.all( 80 | // color: Colors.green, 81 | // width: 2.0 82 | // ), 83 | // borderRadius: BorderRadius.circular(20.0), 84 | // boxShadow: [ 85 | // BoxShadow( 86 | // color: Colors.green, 87 | // blurRadius: 10.0, 88 | // offset: Offset(0, 10), 89 | // ) 90 | // ], 91 | // color: Colors.white 92 | // ), 93 | // ), 94 | // ), 95 | SizedBox( 96 | height: 40.0, 97 | ), 98 | ElevatedButton( 99 | child: Text('Begin', 100 | style: TextStyle(fontSize: 12.0, color: Colors.black54), 101 | ), 102 | style: ElevatedButton.styleFrom( 103 | backgroundColor: Colors.white, 104 | //padding: EdgeInsets.all(20.0), 105 | fixedSize: Size(160, 40), 106 | textStyle: TextStyle( 107 | fontSize: 15.0, 108 | fontWeight: FontWeight.bold, 109 | ), 110 | onPrimary: Colors.black, 111 | elevation: 15.0, 112 | shape: StadiumBorder(), 113 | ), 114 | 115 | onPressed: () async{ 116 | //final url = 'https://google.com'; 117 | 118 | if(await launch('https://platform.openai.com/account/api-keys', 119 | )){ 120 | debugPrint('succesfully'); 121 | } 122 | }, 123 | ), 124 | SizedBox( 125 | height: 40.0, 126 | ), 127 | Container( 128 | child: Text( 129 | 'After copied your Api key paste and save it here', 130 | style: TextStyle(fontSize: 12.0, color: Colors.black87), 131 | ), 132 | ), 133 | SizedBox( 134 | height: 20.0, 135 | ), 136 | // Container( 137 | // padding: EdgeInsets.all(15.0), 138 | // child: Text('API Key'), 139 | // decoration: BoxDecoration( 140 | // border: Border.all( 141 | // color: Colors.deepOrange, 142 | // width: 2.0 143 | // ), 144 | // borderRadius: BorderRadius.circular(20.0) 145 | // ), 146 | // ), 147 | TextField( 148 | decoration: InputDecoration( 149 | border: OutlineInputBorder( 150 | borderRadius: BorderRadius.circular(20.0), 151 | borderSide: BorderSide( 152 | color: Colors.red, 153 | ), 154 | ), 155 | focusedBorder: OutlineInputBorder( 156 | borderRadius: BorderRadius.circular(20.0), 157 | borderSide: BorderSide( 158 | color: Colors.green, 159 | ), 160 | ), 161 | floatingLabelStyle: TextStyle( 162 | color: Colors.black87 163 | ), 164 | labelText: 'Paste your API Key', 165 | labelStyle: TextStyle( 166 | fontSize: 12.0, 167 | color: Colors.black87 168 | ), 169 | suffixIcon: IconButton( 170 | onPressed: () async { 171 | final clipPaste = await Clipboard.getData(Clipboard.kTextPlain); 172 | final text = clipPaste == null ? '' : clipPaste.text!; 173 | setState(() { 174 | pasteController.text = text; 175 | }); 176 | }, 177 | icon: Icon( 178 | Icons.content_paste, 179 | color: Colors.blueGrey, 180 | size: 15.0, 181 | ) 182 | ), 183 | ), 184 | controller: pasteController, 185 | ), 186 | SizedBox( 187 | height: 20.0, 188 | ), 189 | ElevatedButton( 190 | style: ElevatedButton.styleFrom( 191 | backgroundColor: Colors.white, 192 | //padding: EdgeInsets.all(20.0), 193 | fixedSize: Size(160, 40), 194 | textStyle: TextStyle( 195 | fontSize: 15.0, 196 | fontWeight: FontWeight.bold, 197 | ), 198 | onPrimary: Colors.black, 199 | elevation: 15.0, 200 | shape: StadiumBorder(), 201 | ), 202 | onPressed: () async { 203 | setState(() { 204 | Api_key = pasteController.text; 205 | print(Api_key); 206 | Timer( 207 | Duration(seconds: 3), 208 | () => Navigator.of(context).pushReplacement( 209 | MaterialPageRoute( 210 | builder: (BuildContext) => ChatScreen()) 211 | ) 212 | ); 213 | }); 214 | SharedPreferences prefs = await SharedPreferences.getInstance(); 215 | prefs.setString('ApiKey', Api_key); 216 | print(ApiKey); 217 | ScaffoldMessenger.of(context).showSnackBar( 218 | SnackBar( 219 | content: Padding( 220 | padding: const EdgeInsets.all(20.0), 221 | child: Stack( 222 | children: [ 223 | Container( 224 | padding: EdgeInsets.all(16.0), 225 | height: 90.0, 226 | decoration: BoxDecoration( 227 | color: Colors.green, 228 | borderRadius: BorderRadius.circular(20.0), 229 | ), 230 | child: Expanded( 231 | child: Column( 232 | crossAxisAlignment: CrossAxisAlignment.start, 233 | children: [ 234 | Text('Success',style: TextStyle( 235 | fontSize: 20.0, 236 | color: Colors.white, 237 | ), 238 | ), 239 | SizedBox( 240 | height: 5.0, 241 | ), 242 | Text('Your OpenAI API key has been saved successfully. You wont need to enter it again in the future.', 243 | style: TextStyle( 244 | fontSize: 12.0, 245 | color: Colors.white, 246 | ), 247 | maxLines: 2, 248 | overflow: TextOverflow.ellipsis, 249 | ), 250 | ], 251 | ), 252 | ) 253 | ), 254 | //SvgPicture.asset('images/bubbles.svg', 255 | // height: 48.0, 256 | // width: 40.0, 257 | // color: Colors.red, 258 | //), 259 | ], 260 | ), 261 | ), 262 | behavior: SnackBarBehavior.floating, 263 | backgroundColor: Colors.transparent, 264 | elevation: 0, 265 | duration: Duration(seconds: 2), 266 | ), 267 | 268 | ); 269 | }, 270 | child: Text( 271 | 'Save', 272 | style: TextStyle(fontSize: 12.0, color: Colors.black54), 273 | ), 274 | ), 275 | ], 276 | ), 277 | ), 278 | ), 279 | ); 280 | } 281 | } 282 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | animated_text_kit: 5 | dependency: "direct main" 6 | description: 7 | name: animated_text_kit 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "4.2.2" 11 | archive: 12 | dependency: transitive 13 | description: 14 | name: archive 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "3.3.6" 18 | async: 19 | dependency: transitive 20 | description: 21 | name: async 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "2.9.0" 25 | boolean_selector: 26 | dependency: transitive 27 | description: 28 | name: boolean_selector 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "2.1.0" 32 | characters: 33 | dependency: transitive 34 | description: 35 | name: characters 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.2.1" 39 | clock: 40 | dependency: transitive 41 | description: 42 | name: clock 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.1.1" 46 | collection: 47 | dependency: transitive 48 | description: 49 | name: collection 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.16.0" 53 | convert: 54 | dependency: transitive 55 | description: 56 | name: convert 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "3.1.1" 60 | crypto: 61 | dependency: transitive 62 | description: 63 | name: crypto 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "3.0.2" 67 | cupertino_icons: 68 | dependency: "direct main" 69 | description: 70 | name: cupertino_icons 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "1.0.5" 74 | fake_async: 75 | dependency: transitive 76 | description: 77 | name: fake_async 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "1.3.1" 81 | ffi: 82 | dependency: transitive 83 | description: 84 | name: ffi 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "2.0.1" 88 | file: 89 | dependency: transitive 90 | description: 91 | name: file 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "6.1.4" 95 | flutter: 96 | dependency: "direct main" 97 | description: flutter 98 | source: sdk 99 | version: "0.0.0" 100 | flutter_lints: 101 | dependency: "direct dev" 102 | description: 103 | name: flutter_lints 104 | url: "https://pub.dartlang.org" 105 | source: hosted 106 | version: "2.0.1" 107 | flutter_spinkit: 108 | dependency: "direct main" 109 | description: 110 | name: flutter_spinkit 111 | url: "https://pub.dartlang.org" 112 | source: hosted 113 | version: "5.1.0" 114 | flutter_svg: 115 | dependency: "direct main" 116 | description: 117 | name: flutter_svg 118 | url: "https://pub.dartlang.org" 119 | source: hosted 120 | version: "1.1.6" 121 | flutter_test: 122 | dependency: "direct dev" 123 | description: flutter 124 | source: sdk 125 | version: "0.0.0" 126 | flutter_web_plugins: 127 | dependency: transitive 128 | description: flutter 129 | source: sdk 130 | version: "0.0.0" 131 | get: 132 | dependency: "direct main" 133 | description: 134 | name: get 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "4.6.5" 138 | http: 139 | dependency: "direct main" 140 | description: 141 | name: http 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "0.13.5" 145 | http_parser: 146 | dependency: transitive 147 | description: 148 | name: http_parser 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "4.0.2" 152 | js: 153 | dependency: transitive 154 | description: 155 | name: js 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "0.6.4" 159 | lints: 160 | dependency: transitive 161 | description: 162 | name: lints 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "2.0.1" 166 | lottie: 167 | dependency: "direct main" 168 | description: 169 | name: lottie 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "2.2.0" 173 | matcher: 174 | dependency: transitive 175 | description: 176 | name: matcher 177 | url: "https://pub.dartlang.org" 178 | source: hosted 179 | version: "0.12.12" 180 | material_color_utilities: 181 | dependency: transitive 182 | description: 183 | name: material_color_utilities 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "0.1.5" 187 | meta: 188 | dependency: transitive 189 | description: 190 | name: meta 191 | url: "https://pub.dartlang.org" 192 | source: hosted 193 | version: "1.8.0" 194 | nested: 195 | dependency: transitive 196 | description: 197 | name: nested 198 | url: "https://pub.dartlang.org" 199 | source: hosted 200 | version: "1.0.0" 201 | path: 202 | dependency: transitive 203 | description: 204 | name: path 205 | url: "https://pub.dartlang.org" 206 | source: hosted 207 | version: "1.8.2" 208 | path_drawing: 209 | dependency: transitive 210 | description: 211 | name: path_drawing 212 | url: "https://pub.dartlang.org" 213 | source: hosted 214 | version: "1.0.1" 215 | path_parsing: 216 | dependency: transitive 217 | description: 218 | name: path_parsing 219 | url: "https://pub.dartlang.org" 220 | source: hosted 221 | version: "1.0.1" 222 | path_provider_linux: 223 | dependency: transitive 224 | description: 225 | name: path_provider_linux 226 | url: "https://pub.dartlang.org" 227 | source: hosted 228 | version: "2.1.8" 229 | path_provider_platform_interface: 230 | dependency: transitive 231 | description: 232 | name: path_provider_platform_interface 233 | url: "https://pub.dartlang.org" 234 | source: hosted 235 | version: "2.0.5" 236 | path_provider_windows: 237 | dependency: transitive 238 | description: 239 | name: path_provider_windows 240 | url: "https://pub.dartlang.org" 241 | source: hosted 242 | version: "2.1.3" 243 | petitparser: 244 | dependency: transitive 245 | description: 246 | name: petitparser 247 | url: "https://pub.dartlang.org" 248 | source: hosted 249 | version: "5.1.0" 250 | platform: 251 | dependency: transitive 252 | description: 253 | name: platform 254 | url: "https://pub.dartlang.org" 255 | source: hosted 256 | version: "3.1.0" 257 | plugin_platform_interface: 258 | dependency: transitive 259 | description: 260 | name: plugin_platform_interface 261 | url: "https://pub.dartlang.org" 262 | source: hosted 263 | version: "2.1.3" 264 | pointycastle: 265 | dependency: transitive 266 | description: 267 | name: pointycastle 268 | url: "https://pub.dartlang.org" 269 | source: hosted 270 | version: "3.6.2" 271 | process: 272 | dependency: transitive 273 | description: 274 | name: process 275 | url: "https://pub.dartlang.org" 276 | source: hosted 277 | version: "4.2.4" 278 | provider: 279 | dependency: "direct main" 280 | description: 281 | name: provider 282 | url: "https://pub.dartlang.org" 283 | source: hosted 284 | version: "6.0.5" 285 | shared_preferences: 286 | dependency: "direct main" 287 | description: 288 | name: shared_preferences 289 | url: "https://pub.dartlang.org" 290 | source: hosted 291 | version: "2.0.17" 292 | shared_preferences_android: 293 | dependency: transitive 294 | description: 295 | name: shared_preferences_android 296 | url: "https://pub.dartlang.org" 297 | source: hosted 298 | version: "2.0.15" 299 | shared_preferences_foundation: 300 | dependency: transitive 301 | description: 302 | name: shared_preferences_foundation 303 | url: "https://pub.dartlang.org" 304 | source: hosted 305 | version: "2.1.3" 306 | shared_preferences_linux: 307 | dependency: transitive 308 | description: 309 | name: shared_preferences_linux 310 | url: "https://pub.dartlang.org" 311 | source: hosted 312 | version: "2.1.3" 313 | shared_preferences_platform_interface: 314 | dependency: transitive 315 | description: 316 | name: shared_preferences_platform_interface 317 | url: "https://pub.dartlang.org" 318 | source: hosted 319 | version: "2.1.0" 320 | shared_preferences_web: 321 | dependency: transitive 322 | description: 323 | name: shared_preferences_web 324 | url: "https://pub.dartlang.org" 325 | source: hosted 326 | version: "2.0.4" 327 | shared_preferences_windows: 328 | dependency: transitive 329 | description: 330 | name: shared_preferences_windows 331 | url: "https://pub.dartlang.org" 332 | source: hosted 333 | version: "2.1.3" 334 | sky_engine: 335 | dependency: transitive 336 | description: flutter 337 | source: sdk 338 | version: "0.0.99" 339 | source_span: 340 | dependency: transitive 341 | description: 342 | name: source_span 343 | url: "https://pub.dartlang.org" 344 | source: hosted 345 | version: "1.9.0" 346 | stack_trace: 347 | dependency: transitive 348 | description: 349 | name: stack_trace 350 | url: "https://pub.dartlang.org" 351 | source: hosted 352 | version: "1.10.0" 353 | stream_channel: 354 | dependency: transitive 355 | description: 356 | name: stream_channel 357 | url: "https://pub.dartlang.org" 358 | source: hosted 359 | version: "2.1.0" 360 | string_scanner: 361 | dependency: transitive 362 | description: 363 | name: string_scanner 364 | url: "https://pub.dartlang.org" 365 | source: hosted 366 | version: "1.1.1" 367 | term_glyph: 368 | dependency: transitive 369 | description: 370 | name: term_glyph 371 | url: "https://pub.dartlang.org" 372 | source: hosted 373 | version: "1.2.1" 374 | test_api: 375 | dependency: transitive 376 | description: 377 | name: test_api 378 | url: "https://pub.dartlang.org" 379 | source: hosted 380 | version: "0.4.12" 381 | typed_data: 382 | dependency: transitive 383 | description: 384 | name: typed_data 385 | url: "https://pub.dartlang.org" 386 | source: hosted 387 | version: "1.3.1" 388 | url_launcher: 389 | dependency: "direct main" 390 | description: 391 | name: url_launcher 392 | url: "https://pub.dartlang.org" 393 | source: hosted 394 | version: "6.1.9" 395 | url_launcher_android: 396 | dependency: transitive 397 | description: 398 | name: url_launcher_android 399 | url: "https://pub.dartlang.org" 400 | source: hosted 401 | version: "6.0.23" 402 | url_launcher_ios: 403 | dependency: transitive 404 | description: 405 | name: url_launcher_ios 406 | url: "https://pub.dartlang.org" 407 | source: hosted 408 | version: "6.1.0" 409 | url_launcher_linux: 410 | dependency: transitive 411 | description: 412 | name: url_launcher_linux 413 | url: "https://pub.dartlang.org" 414 | source: hosted 415 | version: "3.0.2" 416 | url_launcher_macos: 417 | dependency: transitive 418 | description: 419 | name: url_launcher_macos 420 | url: "https://pub.dartlang.org" 421 | source: hosted 422 | version: "3.0.2" 423 | url_launcher_platform_interface: 424 | dependency: transitive 425 | description: 426 | name: url_launcher_platform_interface 427 | url: "https://pub.dartlang.org" 428 | source: hosted 429 | version: "2.1.1" 430 | url_launcher_web: 431 | dependency: transitive 432 | description: 433 | name: url_launcher_web 434 | url: "https://pub.dartlang.org" 435 | source: hosted 436 | version: "2.0.14" 437 | url_launcher_windows: 438 | dependency: transitive 439 | description: 440 | name: url_launcher_windows 441 | url: "https://pub.dartlang.org" 442 | source: hosted 443 | version: "3.0.3" 444 | vector_math: 445 | dependency: transitive 446 | description: 447 | name: vector_math 448 | url: "https://pub.dartlang.org" 449 | source: hosted 450 | version: "2.1.2" 451 | win32: 452 | dependency: transitive 453 | description: 454 | name: win32 455 | url: "https://pub.dartlang.org" 456 | source: hosted 457 | version: "3.1.3" 458 | xdg_directories: 459 | dependency: transitive 460 | description: 461 | name: xdg_directories 462 | url: "https://pub.dartlang.org" 463 | source: hosted 464 | version: "1.0.0" 465 | xml: 466 | dependency: transitive 467 | description: 468 | name: xml 469 | url: "https://pub.dartlang.org" 470 | source: hosted 471 | version: "6.1.0" 472 | sdks: 473 | dart: ">=2.18.5 <3.0.0" 474 | flutter: ">=3.3.0" 475 | -------------------------------------------------------------------------------- /assets/loadingBar.json: -------------------------------------------------------------------------------- 1 | {"v":"5.6.2","fr":30,"ip":0,"op":450,"w":1280,"h":720,"nm":"Loading","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"bola esquerda","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[621.125,360,0],"to":[0,-3,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":114.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":133,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":143.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":152,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":162,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":172.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":182,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":192,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":202.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":211,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":221,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":231.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":240,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":250,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,3.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":260.666,"s":[621.125,360,0],"to":[0,-3.917,0],"ti":[0,-0.917,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":269,"s":[621.125,342,0],"to":[0,0.917,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":279,"s":[621.125,365.5,0],"to":[0,3,0],"ti":[0,0.917,0]},{"t":289.666261798348,"s":[621.125,360,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[7,7],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,-31],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":300.00001221925,"op":300.00001221925,"st":0,"bm":0,"hidden":0},{"ddd":0,"ind":2,"ty":4,"nm":"bola central","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[640.125,360,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[640.125,360,0],"to":[0,-3,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.334,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.334,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61.334,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.334,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109.666,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":127,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":137.666,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":148.666,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":157.666,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":168.333,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":177.666,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":186.666,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":197.333,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":206.666,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":215.666,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":226.333,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":235.666,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":244.666,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":255.333,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":264.666,"s":[640.125,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":273.666,"s":[640.125,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":284.333,"s":[640.125,365,0],"to":[0,3,0],"ti":[0,0.833,0]},{"t":293.666261961272,"s":[640.125,360,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[7,7],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,-31],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":300.00001221925,"op":300.00001221925,"st":0,"bm":0,"hidden":0},{"ddd":0,"ind":3,"ty":4,"nm":"bola direita","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[657.875,360,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[657.875,360,0],"to":[0,-3,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.334,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.334,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.334,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56.668,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.668,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74.334,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83.668,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":103.666,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":133.666,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":143,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":153,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":163.666,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":173,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":183,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":191.666,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":201,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":211,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":221,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":230.334,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":240.334,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":249,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":258.334,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,3.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":268.334,"s":[657.875,360,0],"to":[0,-3.833,0],"ti":[0,-0.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":277,"s":[657.875,342,0],"to":[0,0.833,0],"ti":[0,-3,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":286.334,"s":[657.875,365,0],"to":[0,3,0],"ti":[0,0.833,0]},{"t":296.333762069921,"s":[657.875,360,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[7,7],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,-31],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":300.00001221925,"op":300.00001221925,"st":0,"bm":0,"hidden":0},{"ddd":0,"ind":4,"ty":4,"nm":"preenchimento","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[640.375,360.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[8.946,0.015],[0,0],[0.01,-6.16],[-8.946,-0.015],[0,0],[-0.01,6.16]],"o":[[0,0],[-8.946,-0.015],[-0.01,6.16],[0,0],[8.946,0.015],[0.01,-6.16]],"v":[[-323.653,21.098],[-904.898,20.148],[-918.115,31.151],[-904.935,42.457],[-323.689,43.406],[-310.41,32.279]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":270,"s":[{"i":[[8.946,0.015],[0,0],[0.01,-6.16],[-8.946,-0.015],[0,0],[-0.01,6.16]],"o":[[0,0],[-8.946,-0.015],[-0.01,6.16],[0,0],[8.946,0.015],[0.01,-6.16]],"v":[[290.724,21.285],[-290.521,20.335],[-306.738,31.463],[-290.558,42.644],[290.688,43.593],[306.904,32.466]],"c":true}]},{"t":299.00001217852,"s":[{"i":[[13.589,0],[0,0],[0.01,-6.16],[-12.38,0],[0,0],[-0.01,6.16]],"o":[[0,0],[-12.416,0],[-0.01,6.16],[0,0],[13.187,0],[0.01,-6.16]],"v":[[290.724,21.285],[-290.521,20.335],[-306.738,31.463],[-290.558,42.644],[290.688,43.593],[306.904,32.466]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Máscara 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[614.286,22.857],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":20,"ix":4},"nm":"Caminho do retângulo 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.071,32.357],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100.308],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Retângulo 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"vazio","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[640,360,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[614.286,22.857],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":20,"ix":4},"nm":"Caminho do retângulo 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.49411764705882355,0.8274509803921568,0.12941176470588237,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9529411764705882,0.9529411764705882,0.9529411764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.071,32.357],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100.308],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Retângulo 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300.00001221925,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1300; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | INFOPLIST_FILE = Runner/Info.plist; 293 | LD_RUNPATH_SEARCH_PATHS = ( 294 | "$(inherited)", 295 | "@executable_path/Frameworks", 296 | ); 297 | PRODUCT_BUNDLE_IDENTIFIER = com.example.chatgptApp; 298 | PRODUCT_NAME = "$(TARGET_NAME)"; 299 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 300 | SWIFT_VERSION = 5.0; 301 | VERSIONING_SYSTEM = "apple-generic"; 302 | }; 303 | name = Profile; 304 | }; 305 | 97C147031CF9000F007C117D /* Debug */ = { 306 | isa = XCBuildConfiguration; 307 | buildSettings = { 308 | ALWAYS_SEARCH_USER_PATHS = NO; 309 | CLANG_ANALYZER_NONNULL = YES; 310 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 311 | CLANG_CXX_LIBRARY = "libc++"; 312 | CLANG_ENABLE_MODULES = YES; 313 | CLANG_ENABLE_OBJC_ARC = YES; 314 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 315 | CLANG_WARN_BOOL_CONVERSION = YES; 316 | CLANG_WARN_COMMA = YES; 317 | CLANG_WARN_CONSTANT_CONVERSION = YES; 318 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 319 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 320 | CLANG_WARN_EMPTY_BODY = YES; 321 | CLANG_WARN_ENUM_CONVERSION = YES; 322 | CLANG_WARN_INFINITE_RECURSION = YES; 323 | CLANG_WARN_INT_CONVERSION = YES; 324 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 325 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 326 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 327 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 328 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 329 | CLANG_WARN_STRICT_PROTOTYPES = YES; 330 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 331 | CLANG_WARN_UNREACHABLE_CODE = YES; 332 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 333 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 334 | COPY_PHASE_STRIP = NO; 335 | DEBUG_INFORMATION_FORMAT = dwarf; 336 | ENABLE_STRICT_OBJC_MSGSEND = YES; 337 | ENABLE_TESTABILITY = YES; 338 | GCC_C_LANGUAGE_STANDARD = gnu99; 339 | GCC_DYNAMIC_NO_PIC = NO; 340 | GCC_NO_COMMON_BLOCKS = YES; 341 | GCC_OPTIMIZATION_LEVEL = 0; 342 | GCC_PREPROCESSOR_DEFINITIONS = ( 343 | "DEBUG=1", 344 | "$(inherited)", 345 | ); 346 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 347 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 348 | GCC_WARN_UNDECLARED_SELECTOR = YES; 349 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 350 | GCC_WARN_UNUSED_FUNCTION = YES; 351 | GCC_WARN_UNUSED_VARIABLE = YES; 352 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 353 | MTL_ENABLE_DEBUG_INFO = YES; 354 | ONLY_ACTIVE_ARCH = YES; 355 | SDKROOT = iphoneos; 356 | TARGETED_DEVICE_FAMILY = "1,2"; 357 | }; 358 | name = Debug; 359 | }; 360 | 97C147041CF9000F007C117D /* Release */ = { 361 | isa = XCBuildConfiguration; 362 | buildSettings = { 363 | ALWAYS_SEARCH_USER_PATHS = NO; 364 | CLANG_ANALYZER_NONNULL = YES; 365 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 366 | CLANG_CXX_LIBRARY = "libc++"; 367 | CLANG_ENABLE_MODULES = YES; 368 | CLANG_ENABLE_OBJC_ARC = YES; 369 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 370 | CLANG_WARN_BOOL_CONVERSION = YES; 371 | CLANG_WARN_COMMA = YES; 372 | CLANG_WARN_CONSTANT_CONVERSION = YES; 373 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 374 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 375 | CLANG_WARN_EMPTY_BODY = YES; 376 | CLANG_WARN_ENUM_CONVERSION = YES; 377 | CLANG_WARN_INFINITE_RECURSION = YES; 378 | CLANG_WARN_INT_CONVERSION = YES; 379 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 380 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 381 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 382 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 383 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 384 | CLANG_WARN_STRICT_PROTOTYPES = YES; 385 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 386 | CLANG_WARN_UNREACHABLE_CODE = YES; 387 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 388 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 389 | COPY_PHASE_STRIP = NO; 390 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 391 | ENABLE_NS_ASSERTIONS = NO; 392 | ENABLE_STRICT_OBJC_MSGSEND = YES; 393 | GCC_C_LANGUAGE_STANDARD = gnu99; 394 | GCC_NO_COMMON_BLOCKS = YES; 395 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 396 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 397 | GCC_WARN_UNDECLARED_SELECTOR = YES; 398 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 399 | GCC_WARN_UNUSED_FUNCTION = YES; 400 | GCC_WARN_UNUSED_VARIABLE = YES; 401 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 402 | MTL_ENABLE_DEBUG_INFO = NO; 403 | SDKROOT = iphoneos; 404 | SUPPORTED_PLATFORMS = iphoneos; 405 | SWIFT_COMPILATION_MODE = wholemodule; 406 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 407 | TARGETED_DEVICE_FAMILY = "1,2"; 408 | VALIDATE_PRODUCT = YES; 409 | }; 410 | name = Release; 411 | }; 412 | 97C147061CF9000F007C117D /* Debug */ = { 413 | isa = XCBuildConfiguration; 414 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 415 | buildSettings = { 416 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 417 | CLANG_ENABLE_MODULES = YES; 418 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 419 | ENABLE_BITCODE = NO; 420 | INFOPLIST_FILE = Runner/Info.plist; 421 | LD_RUNPATH_SEARCH_PATHS = ( 422 | "$(inherited)", 423 | "@executable_path/Frameworks", 424 | ); 425 | PRODUCT_BUNDLE_IDENTIFIER = com.example.chatgptApp; 426 | PRODUCT_NAME = "$(TARGET_NAME)"; 427 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 428 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 429 | SWIFT_VERSION = 5.0; 430 | VERSIONING_SYSTEM = "apple-generic"; 431 | }; 432 | name = Debug; 433 | }; 434 | 97C147071CF9000F007C117D /* Release */ = { 435 | isa = XCBuildConfiguration; 436 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 437 | buildSettings = { 438 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 439 | CLANG_ENABLE_MODULES = YES; 440 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 441 | ENABLE_BITCODE = NO; 442 | INFOPLIST_FILE = Runner/Info.plist; 443 | LD_RUNPATH_SEARCH_PATHS = ( 444 | "$(inherited)", 445 | "@executable_path/Frameworks", 446 | ); 447 | PRODUCT_BUNDLE_IDENTIFIER = com.example.chatgptApp; 448 | PRODUCT_NAME = "$(TARGET_NAME)"; 449 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 450 | SWIFT_VERSION = 5.0; 451 | VERSIONING_SYSTEM = "apple-generic"; 452 | }; 453 | name = Release; 454 | }; 455 | /* End XCBuildConfiguration section */ 456 | 457 | /* Begin XCConfigurationList section */ 458 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 459 | isa = XCConfigurationList; 460 | buildConfigurations = ( 461 | 97C147031CF9000F007C117D /* Debug */, 462 | 97C147041CF9000F007C117D /* Release */, 463 | 249021D3217E4FDB00AE95B9 /* Profile */, 464 | ); 465 | defaultConfigurationIsVisible = 0; 466 | defaultConfigurationName = Release; 467 | }; 468 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 469 | isa = XCConfigurationList; 470 | buildConfigurations = ( 471 | 97C147061CF9000F007C117D /* Debug */, 472 | 97C147071CF9000F007C117D /* Release */, 473 | 249021D4217E4FDB00AE95B9 /* Profile */, 474 | ); 475 | defaultConfigurationIsVisible = 0; 476 | defaultConfigurationName = Release; 477 | }; 478 | /* End XCConfigurationList section */ 479 | }; 480 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 481 | } 482 | -------------------------------------------------------------------------------- /assets/loading.json: -------------------------------------------------------------------------------- 1 | {"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":"#FFFFFF"},"fr":30,"ip":0,"op":120,"w":750,"h":500,"nm":"Comp 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":5,"nm":"0%","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":2,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[375,250,0],"ix":2},"a":{"a":0,"k":[-0.039,-3.333,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Slider Control","np":3,"mn":"ADBE Slider Control","ix":1,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0]},{"t":110,"s":[100]}],"ix":1}}]}],"t":{"d":{"k":[{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":0},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":1},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":2},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":3},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":4},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":5},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":6},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":7},{"s":{"s":50,"f":"FranklinGothic-Book","t":"0%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":8},{"s":{"s":50,"f":"FranklinGothic-Book","t":"1%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":9},{"s":{"s":50,"f":"FranklinGothic-Book","t":"2%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":10},{"s":{"s":50,"f":"FranklinGothic-Book","t":"3%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":11},{"s":{"s":50,"f":"FranklinGothic-Book","t":"4%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":12},{"s":{"s":50,"f":"FranklinGothic-Book","t":"5%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":13},{"s":{"s":50,"f":"FranklinGothic-Book","t":"6%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":14},{"s":{"s":50,"f":"FranklinGothic-Book","t":"7%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":15},{"s":{"s":50,"f":"FranklinGothic-Book","t":"8%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":16},{"s":{"s":50,"f":"FranklinGothic-Book","t":"9%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":17},{"s":{"s":50,"f":"FranklinGothic-Book","t":"10%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":18},{"s":{"s":50,"f":"FranklinGothic-Book","t":"11%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":19},{"s":{"s":50,"f":"FranklinGothic-Book","t":"12%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":20},{"s":{"s":50,"f":"FranklinGothic-Book","t":"13%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":21},{"s":{"s":50,"f":"FranklinGothic-Book","t":"14%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":22},{"s":{"s":50,"f":"FranklinGothic-Book","t":"15%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":23},{"s":{"s":50,"f":"FranklinGothic-Book","t":"16%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":24},{"s":{"s":50,"f":"FranklinGothic-Book","t":"17%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":25},{"s":{"s":50,"f":"FranklinGothic-Book","t":"18%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":26},{"s":{"s":50,"f":"FranklinGothic-Book","t":"19%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":27},{"s":{"s":50,"f":"FranklinGothic-Book","t":"20%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":28},{"s":{"s":50,"f":"FranklinGothic-Book","t":"21%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":29},{"s":{"s":50,"f":"FranklinGothic-Book","t":"22%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":30},{"s":{"s":50,"f":"FranklinGothic-Book","t":"23%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":31},{"s":{"s":50,"f":"FranklinGothic-Book","t":"24%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":32},{"s":{"s":50,"f":"FranklinGothic-Book","t":"25%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":33},{"s":{"s":50,"f":"FranklinGothic-Book","t":"26%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":34},{"s":{"s":50,"f":"FranklinGothic-Book","t":"27%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":35},{"s":{"s":50,"f":"FranklinGothic-Book","t":"28%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":36},{"s":{"s":50,"f":"FranklinGothic-Book","t":"29%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":37},{"s":{"s":50,"f":"FranklinGothic-Book","t":"30%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":38},{"s":{"s":50,"f":"FranklinGothic-Book","t":"31%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":39},{"s":{"s":50,"f":"FranklinGothic-Book","t":"32%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":40},{"s":{"s":50,"f":"FranklinGothic-Book","t":"33%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":41},{"s":{"s":50,"f":"FranklinGothic-Book","t":"33%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":42},{"s":{"s":50,"f":"FranklinGothic-Book","t":"34%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":43},{"s":{"s":50,"f":"FranklinGothic-Book","t":"35%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":44},{"s":{"s":10,"f":"FranklinGothic-Book","t":"36%","j":2,"tr":0,"lh":12,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":45},{"s":{"s":50,"f":"FranklinGothic-Book","t":"37%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":46},{"s":{"s":50,"f":"FranklinGothic-Book","t":"38%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":47},{"s":{"s":50,"f":"FranklinGothic-Book","t":"39%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":48},{"s":{"s":50,"f":"FranklinGothic-Book","t":"40%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":49},{"s":{"s":50,"f":"FranklinGothic-Book","t":"41%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":50},{"s":{"s":50,"f":"FranklinGothic-Book","t":"42%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":51},{"s":{"s":50,"f":"FranklinGothic-Book","t":"43%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":52},{"s":{"s":50,"f":"FranklinGothic-Book","t":"44%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":53},{"s":{"s":50,"f":"FranklinGothic-Book","t":"45%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":54},{"s":{"s":50,"f":"FranklinGothic-Book","t":"46%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":55},{"s":{"s":50,"f":"FranklinGothic-Book","t":"47%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":56},{"s":{"s":50,"f":"FranklinGothic-Book","t":"48%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":57},{"s":{"s":50,"f":"FranklinGothic-Book","t":"49%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":58},{"s":{"s":50,"f":"FranklinGothic-Book","t":"50%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":59},{"s":{"s":50,"f":"FranklinGothic-Book","t":"51%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":60},{"s":{"s":50,"f":"FranklinGothic-Book","t":"52%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":61},{"s":{"s":50,"f":"FranklinGothic-Book","t":"53%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":62},{"s":{"s":50,"f":"FranklinGothic-Book","t":"54%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":63},{"s":{"s":50,"f":"FranklinGothic-Book","t":"55%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":64},{"s":{"s":50,"f":"FranklinGothic-Book","t":"56%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":65},{"s":{"s":50,"f":"FranklinGothic-Book","t":"57%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":66},{"s":{"s":50,"f":"FranklinGothic-Book","t":"58%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":67},{"s":{"s":50,"f":"FranklinGothic-Book","t":"59%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":68},{"s":{"s":50,"f":"FranklinGothic-Book","t":"60%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":69},{"s":{"s":50,"f":"FranklinGothic-Book","t":"61%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":70},{"s":{"s":50,"f":"FranklinGothic-Book","t":"62%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":71},{"s":{"s":50,"f":"FranklinGothic-Book","t":"63%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":72},{"s":{"s":50,"f":"FranklinGothic-Book","t":"64%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":73},{"s":{"s":50,"f":"FranklinGothic-Book","t":"65%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":74},{"s":{"s":50,"f":"FranklinGothic-Book","t":"66%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":75},{"s":{"s":50,"f":"FranklinGothic-Book","t":"66%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":76},{"s":{"s":50,"f":"FranklinGothic-Book","t":"67%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":77},{"s":{"s":50,"f":"FranklinGothic-Book","t":"68%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":78},{"s":{"s":50,"f":"FranklinGothic-Book","t":"69%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":79},{"s":{"s":50,"f":"FranklinGothic-Book","t":"70%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":80},{"s":{"s":50,"f":"FranklinGothic-Book","t":"71%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":81},{"s":{"s":50,"f":"FranklinGothic-Book","t":"72%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":82},{"s":{"s":50,"f":"FranklinGothic-Book","t":"73%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":83},{"s":{"s":50,"f":"FranklinGothic-Book","t":"74%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":84},{"s":{"s":50,"f":"FranklinGothic-Book","t":"75%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":85},{"s":{"s":50,"f":"FranklinGothic-Book","t":"76%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":86},{"s":{"s":50,"f":"FranklinGothic-Book","t":"77%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":87},{"s":{"s":50,"f":"FranklinGothic-Book","t":"78%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":88},{"s":{"s":50,"f":"FranklinGothic-Book","t":"79%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":89},{"s":{"s":50,"f":"FranklinGothic-Book","t":"80%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":90},{"s":{"s":50,"f":"FranklinGothic-Book","t":"81%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":91},{"s":{"s":50,"f":"FranklinGothic-Book","t":"82%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":92},{"s":{"s":50,"f":"FranklinGothic-Book","t":"83%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":93},{"s":{"s":50,"f":"FranklinGothic-Book","t":"84%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":94},{"s":{"s":50,"f":"FranklinGothic-Book","t":"85%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":95},{"s":{"s":50,"f":"FranklinGothic-Book","t":"86%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":96},{"s":{"s":50,"f":"FranklinGothic-Book","t":"87%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":97},{"s":{"s":50,"f":"FranklinGothic-Book","t":"88%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":98},{"s":{"s":50,"f":"FranklinGothic-Book","t":"89%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":99},{"s":{"s":50,"f":"FranklinGothic-Book","t":"90%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":100},{"s":{"s":50,"f":"FranklinGothic-Book","t":"91%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":101},{"s":{"s":50,"f":"FranklinGothic-Book","t":"92%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":102},{"s":{"s":50,"f":"FranklinGothic-Book","t":"93%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":103},{"s":{"s":50,"f":"FranklinGothic-Book","t":"94%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":104},{"s":{"s":50,"f":"FranklinGothic-Book","t":"95%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":105},{"s":{"s":50,"f":"FranklinGothic-Book","t":"96%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":106},{"s":{"s":50,"f":"FranklinGothic-Book","t":"97%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":107},{"s":{"s":50,"f":"FranklinGothic-Book","t":"98%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":108},{"s":{"s":50,"f":"FranklinGothic-Book","t":"99%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":109},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":110},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":111},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":112},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":113},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":114},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":115},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":116},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":117},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":118},{"s":{"s":50,"f":"FranklinGothic-Book","t":"100%","j":2,"tr":0,"lh":60,"ls":0,"fc":[0.137,0.137,0.137],"sc":[1,1,1],"sw":0.00999999977648,"of":false},"t":119}]},"p":{},"m":{"g":1,"a":{"a":0,"k":[0,0],"ix":2}},"a":[]},"ip":0,"op":120,"st":0,"bm":0}]}],"fonts":{"list":[{"fName":"FranklinGothic-Book","fFamily":"Franklin Gothic Book","fStyle":"Regular","ascent":66.7092187497765}]},"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"0% Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[375,256.5,0],"ix":2},"a":{"a":0,"k":[375,250,0],"ix":1},"s":{"a":0,"k":[48,48,100],"ix":6}},"ao":0,"w":750,"h":500,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":8,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[354.227,255.102,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[8.856,0],[0,0],[0,-8.856],[-8.856,0],[0,0],[0,8.856]],"o":[[0,0],[-8.856,0],[0,8.856],[0,0],[8.856,0],[0,-8.856]],"v":[[-240.746,-15.933],[-241.254,-16.035],[-257.289,0],[-241.254,16.035],[-240.746,16.137],[-224.711,0.102]],"c":true}]},{"t":110,"s":[{"i":[[8.856,0],[0,0],[0,-8.856],[-8.856,0],[0,0],[0,8.856]],"o":[[0,0],[-8.856,0],[0,8.856],[0,0],[8.856,0],[0,-8.856]],"v":[[241.254,-16.035],[-241.254,-16.035],[-257.289,0],[-241.254,16.035],[241.254,16.035],[257.289,0]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.082352941176,0.882353001015,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[20.773,-5.102],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":8,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[354.227,255.102,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.856,0],[0,0],[0,-8.856],[-8.856,0],[0,0],[0,8.856]],"o":[[0,0],[-8.856,0],[0,8.856],[0,0],[8.856,0],[0,-8.856]],"v":[[241.254,-16.035],[-241.254,-16.035],[-257.289,0],[-241.254,16.035],[241.254,16.035],[257.289,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.059459458145,0.733333333333,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[20.773,-5.102],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}],"markers":[],"chars":[{"ch":"0","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.427,6.873],[0,9.187],[4.313,6.971],[8.333,0],[4.362,-6.677],[0,-9.708],[-4.59,-6.661],[-7.683,0]],"o":[[4.427,-6.873],[0,-9.381],[-4.314,-6.971],[-7.976,0],[-4.362,6.678],[0,9.871],[4.59,6.662],[7.942,0]],"v":[[47.949,-8.942],[54.59,-33.032],[48.12,-57.561],[29.15,-68.018],[10.645,-58.001],[4.102,-33.423],[10.986,-8.625],[29.395,1.367]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.864,5.16],[0,8.659],[-2.718,5.111],[-5.566,0],[-2.767,-5.598],[0,-8.43],[2.702,-5.094],[5.631,0]],"o":[[-2.865,-5.159],[0,-8.333],[2.718,-5.11],[5.762,0],[2.766,5.599],[0,7.715],[-2.702,5.095],[-5.534,0]],"v":[[16.846,-12.964],[12.549,-33.691],[16.626,-53.857],[29.053,-61.523],[41.846,-53.125],[45.996,-32.08],[41.943,-12.866],[29.443,-5.225]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"0","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"%","size":50,"style":"Regular","w":72.02,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.409,3.435],[0,4.59],[2.327,3.516],[4.59,0],[2.376,-3.336],[0,-4.85],[-2.458,-3.385],[-4.265,0]],"o":[[2.409,-3.434],[0,-4.622],[-2.328,-3.516],[-4.33,0],[-2.377,3.337],[0,4.818],[2.457,3.386],[4.329,0]],"v":[[27.539,-37.817],[31.152,-49.854],[27.661,-62.061],[17.285,-67.334],[7.227,-62.329],[3.662,-50.049],[7.349,-37.744],[17.432,-32.666]],"c":true},"ix":2},"nm":"%","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,9.164],[-5.582,0],[-1.421,-2.641],[0,-4.141],[1.387,-2.446],[2.807,0]],"o":[[0,-8.87],[2.938,0],[1.42,2.641],[0,3.719],[-1.388,2.446],[-5.779,0]],"v":[[8.887,-50.22],[17.26,-63.525],[23.798,-59.563],[25.928,-49.389],[23.846,-40.143],[17.554,-36.475]],"c":true},"ix":2},"nm":"%","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[59.229,-66.65],[53.178,-66.65],[12.793,0],[18.959,0]],"c":true},"ix":2},"nm":"%","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[-2.393,3.451],[0,4.558],[2.311,3.516],[4.557,0],[2.36,-3.336],[0,-4.817],[-2.425,-3.418],[-4.33,0]],"o":[[2.393,-3.45],[0,-4.622],[-2.312,-3.516],[-4.362,0],[-2.361,3.337],[0,4.785],[2.425,3.418],[4.297,0]],"v":[[64.722,-4.492],[68.311,-16.504],[64.844,-28.711],[54.541,-33.984],[44.458,-28.979],[40.918,-16.748],[44.556,-4.443],[54.688,0.684]],"c":true},"ix":2},"nm":"%","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,9.099],[-5.615,0],[-1.396,-2.713],[0,-3.996],[1.379,-2.405],[2.792,0]],"o":[[0,-8.87],[2.954,0],[1.395,2.713],[0,3.737],[-1.379,2.405],[-5.811,0]],"v":[[46.045,-16.87],[54.468,-30.176],[60.992,-26.105],[63.086,-16.042],[61.017,-6.829],[54.76,-3.223]],"c":true},"ix":2},"nm":"%","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"%","np":8,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"1","size":50,"style":"Regular","w":56.84,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[8.756,-4.59],[0,0],[-5.892,6.152],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-4.818,6.316],[0,0],[6.348,-3.45],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[37.207,-6.201],[37.207,-68.018],[31.201,-68.018],[10.84,-51.66],[10.84,-43.262],[29.199,-57.666],[29.199,-6.201],[9.18,-6.201],[9.18,0],[55.908,0],[55.908,-6.201]],"c":true},"ix":2},"nm":"1","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"2","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.664,4.98],[-2.035,3.581],[0,3.874],[4.297,3.906],[6.868,0],[3.255,-13.053],[0,0],[-3.125,2.751],[-4.07,0],[-3.027,-2.506],[0,-4.069],[3.596,-4.443],[18.684,-13.997],[0,0],[0,0],[0,0]],"o":[[8.984,-6.282],[5.664,-4.98],[2.034,-3.58],[0,-5.631],[-4.297,-3.906],[-12.695,0],[0,0],[0.391,-4.72],[3.125,-2.75],[3.938,0],[3.027,2.507],[0,4.362],[-3.597,4.443],[0,0],[0,0],[0,0],[0,0]],"v":[[15.723,-6.934],[37.695,-23.828],[49.243,-36.67],[52.295,-47.852],[45.85,-62.158],[29.102,-68.018],[5.176,-48.438],[12.939,-46.094],[18.213,-57.3],[29.004,-61.426],[39.453,-57.666],[43.994,-47.803],[38.599,-34.595],[5.176,-6.934],[5.176,0],[52.49,0],[52.49,-6.934]],"c":true},"ix":2},"nm":"2","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"3","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.142,-2.38],[0,-3.848],[2.62,-2.56],[5.989,0],[2.344,8.041],[0,0],[-4.443,-2.962],[-6.25,0],[-4.525,3.795],[0,5.57],[3.043,2.932],[4.231,0.62],[-2.409,2.818],[0,3.78],[4.004,3.47],[6.51,0],[4.297,-10.221],[0,0],[-7.487,0],[-2.67,-2.108],[0,-3.596],[2.393,-2.288],[5.566,0],[0,0],[0,0]],"o":[[5.664,0],[3.141,2.381],[0,3.555],[-2.621,2.56],[-9.212,0],[0,0],[1.692,4.916],[4.443,2.962],[7.877,0],[4.524,-3.795],[0,-4.658],[-3.044,-2.931],[3.776,-0.716],[2.409,-2.818],[0,-4.886],[-4.004,-3.469],[-11.589,0],[0,0],[2.864,-7.259],[4.036,0],[2.669,2.109],[0,3.269],[-2.393,2.288],[0,0],[0,0],[0,0]],"v":[[26.953,-31.348],[40.161,-27.776],[44.873,-18.433],[40.942,-9.26],[28.027,-5.42],[10.693,-17.48],[2.93,-14.893],[12.134,-3.076],[28.174,1.367],[46.777,-4.325],[53.564,-18.372],[48.999,-29.757],[38.086,-35.083],[47.363,-40.385],[50.977,-50.28],[44.971,-62.814],[29.199,-68.018],[5.371,-52.686],[12.891,-50.537],[28.418,-61.426],[38.477,-58.263],[42.48,-49.707],[38.892,-41.371],[26.953,-37.939],[19.336,-37.939],[19.336,-31.348]],"c":true},"ix":2},"nm":"3","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"4","size":50,"style":"Regular","w":59.33,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[44.092,-15.869],[54.883,-15.869],[54.883,-22.461],[44.092,-22.461],[44.092,-68.018],[33.72,-68.018],[3.076,-21.486],[3.076,-15.869],[36.084,-15.869],[36.084,0],[44.092,0]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.403,2.569],[0,-2.276],[0,0]],"o":[[0,0],[1.01,-1.593],[-0.098,2.634],[0,0],[0,0]],"v":[[11.768,-22.461],[32.61,-55.086],[36.23,-61.328],[36.084,-53.964],[36.084,-22.461]],"c":true},"ix":2},"nm":"4","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"4","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"5","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-6.316,0],[-3.093,-2.869],[0,-5.118],[3.13,-3.146],[5.313,0],[2.934,7.748],[0,0],[-4.362,-2.93],[-5.599,0],[-4.932,4.367],[0,6.844],[4.541,4.334],[6.25,0],[4.948,-4.85],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[4.134,-6.055],[4.329,0],[3.092,2.869],[0,4.89],[-3.13,3.146],[-8.085,0],[0,0],[1.367,4.655],[4.362,2.93],[7.129,0],[4.932,-4.366],[0,-6.745],[-4.541,-4.333],[-5.925,0],[0,0],[0,0],[0,0],[0,0]],"v":[[9.375,-66.65],[7.227,-30.615],[13.818,-29.199],[29.492,-38.281],[40.625,-33.978],[45.264,-21.997],[40.569,-9.943],[27.905,-5.225],[11.377,-16.846],[4.297,-14.404],[12.891,-3.027],[27.832,1.367],[45.923,-5.183],[53.32,-21.997],[46.509,-38.616],[30.322,-45.117],[14.014,-37.842],[15.43,-59.473],[48.193,-59.473],[48.877,-66.65]],"c":true},"ix":2},"nm":"5","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"6","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.645,0],[4.411,-7.069],[0,-10],[-4.671,-5.945],[-7.878,0],[-4.443,4.546],[0,6.258],[4.182,4.318],[6.184,0],[3.645,-2.213],[1.985,-4.59],[-12.5,0],[-2.572,-6.77],[0,0]],"o":[[-9.245,0],[-4.411,7.069],[0,10.229],[4.671,5.945],[6.934,0],[4.443,-4.546],[0,-6.029],[-4.183,-4.317],[-4.07,0],[-3.646,2.214],[0.293,-20.67],[6.803,0],[0,0],[-3.613,-9.993]],"v":[[32.178,-68.018],[11.694,-57.414],[5.078,-31.811],[12.085,-7.55],[30.908,1.367],[47.974,-5.451],[54.639,-21.656],[48.364,-37.176],[32.813,-43.652],[21.24,-40.332],[12.793,-30.127],[31.982,-61.133],[46.045,-50.977],[53.564,-53.027]],"c":true},"ix":2},"nm":"6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.995,3.13],[0,4.01],[-3.353,3.228],[-4.492,0],[-2.946,-3.081],[0,-4.303],[3.011,-3.114],[4.72,0]],"o":[[-2.995,-3.13],[0,-4.336],[3.352,-3.227],[4.362,0],[2.946,3.081],[0,4.369],[-3.011,3.114],[-4.72,0]],"v":[[19.189,-10.017],[14.697,-20.727],[19.727,-32.072],[31.494,-36.914],[42.456,-32.292],[46.875,-21.216],[42.358,-9.992],[30.762,-5.322]],"c":true},"ix":2},"nm":"6","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"6","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"7","size":50,"style":"Regular","w":55.86,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.521],[-3.939,10.352],[-7.943,9.57],[0,0],[0,0],[0,0],[0,0],[4.557,-10.563],[0,-11.165],[0,0]],"o":[[0,-9.309],[3.938,-10.352],[0,0],[0,0],[0,0],[0,0],[-6.609,7.259],[-4.558,10.564],[0,0],[-0.033,-1.009]],"v":[[28.027,-2.295],[33.936,-31.787],[51.758,-61.67],[51.758,-66.65],[7.715,-66.65],[6.885,-59.326],[43.066,-59.326],[26.318,-32.593],[19.482,0],[28.076,0]],"c":true},"ix":2},"nm":"7","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"7","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"8","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.535],[-4.558,-3.67],[-8.301,0],[-4.541,3.604],[0,5.35],[1.774,3.001],[6.966,3.23],[0,7.059],[4.036,3.139],[6.836,0],[4.199,-3.269],[0,-5.074],[-8.431,-3.676]],"o":[[0,5.057],[4.557,3.67],[7.78,0],[4.541,-3.604],[0,-3],[-1.775,-3.001],[8.626,-3.057],[0,-5.074],[-4.037,-3.139],[-6.934,0],[-4.199,3.269],[0,6.994],[-10.58,4.045]],"v":[[3.613,-17.226],[10.449,-4.137],[29.736,1.367],[48.218,-4.039],[55.029,-17.469],[52.368,-26.47],[39.258,-35.815],[52.197,-50.99],[46.143,-63.309],[29.834,-68.018],[13.135,-63.113],[6.836,-50.599],[19.482,-34.595]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.043,2.279],[0,3.125],[-2.734,1.872],[-4.297,0],[-2.751,-1.774],[0,-3.418],[2.311,-1.953],[5.598,-1.497]],"o":[[-3.044,-2.278],[0,-3.157],[2.734,-1.871],[4.492,0],[2.75,1.775],[0,2.93],[-2.312,1.953],[-3.451,-0.716]],"v":[[19.849,-43.213],[15.283,-51.318],[19.385,-58.862],[29.932,-61.67],[40.796,-59.009],[44.922,-51.221],[41.455,-43.896],[29.59,-38.721]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,-6.49],[3.092,-2.185],[5.078,0],[3.076,2.234],[0,3.522],[-11.263,2.675]],"o":[[0,3.392],[-3.093,2.185],[-5.99,0],[-3.076,-2.234],[0,-6.75],[12.141,3.164]],"v":[[46.875,-16.575],[42.236,-8.209],[29.98,-4.932],[16.382,-8.282],[11.768,-16.917],[28.662,-31.055]],"c":true},"ix":2},"nm":"8","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"8","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"},{"ch":"9","size":50,"style":"Regular","w":58.64,"data":{"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-10.189,0],[-4.72,6.694],[0,10.815],[4.459,5.88],[8.366,0],[4.411,-4.497],[0,-6.322],[-4.199,-4.22],[-6.185,0],[-4.362,8.008],[3.206,-5.338],[6.348,0],[2.766,6.152],[0,0]],"o":[[8.723,0],[4.72,-6.694],[0,-10.294],[-4.46,-5.879],[-6.836,0],[-4.411,4.497],[0,6.224],[4.199,4.221],[8.756,0],[-0.098,9.148],[-3.207,5.339],[-6.543,0],[0,0],[3.516,8.984]],"v":[[26.27,1.367],[46.436,-8.674],[53.516,-34.937],[46.826,-59.198],[27.588,-68.018],[10.718,-61.272],[4.102,-45.043],[10.4,-29.377],[25.977,-23.047],[45.654,-35.059],[40.698,-13.33],[26.367,-5.322],[12.402,-14.551],[5.713,-12.109]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.141,2.771],[0,4.761],[-2.832,3.081],[-4.883,0],[-2.946,-2.999],[0,-4.173],[3.108,-3.211],[4.59,0]],"o":[[-3.142,-2.771],[0,-4.433],[2.832,-3.081],[4.817,0],[2.946,3],[0,4.304],[-3.109,3.212],[-4.167,0]],"v":[[16.87,-33.893],[12.158,-45.19],[16.406,-56.462],[27.979,-61.084],[39.624,-56.585],[44.043,-45.826],[39.38,-34.554],[27.832,-29.736]],"c":true},"ix":2},"nm":"9","mn":"ADBE Vector Shape - Group","hd":false}],"nm":"9","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}]},"fFamily":"Franklin Gothic Book"}]} --------------------------------------------------------------------------------