├── 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 |
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 |
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 | 
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"}]}
--------------------------------------------------------------------------------