├── 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
├── .vscode
└── settings.json
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── manifest.json
└── index.html
├── assets
├── imgs
│ ├── d1.png
│ ├── d2.png
│ ├── d3.png
│ ├── d4.png
│ ├── d5.png
│ ├── d6.png
│ ├── screenshot.png
│ └── rome_colosseum.jpeg
├── icons
│ ├── otology.png
│ ├── gynecology.png
│ ├── pulmonology.png
│ └── gastroenterology.png
├── fonts
│ ├── gilroy_black.otf
│ ├── gilroy_bold.otf
│ ├── gilroy_heavy.otf
│ ├── gilroy_light.otf
│ ├── gilroy_thin.otf
│ ├── gilroy_medium.otf
│ ├── gilroy_regular.otf
│ ├── gilroy_extraBold.otf
│ ├── gilroy_semiBold.otf
│ └── gilroy_ultraLight.otf
└── animations
│ └── loading_anim.json
├── 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
│ │ │ │ │ └── dr_flutter_template
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── settings.gradle
└── build.gradle
├── lib
├── data
│ └── models
│ │ ├── specialty.dart
│ │ └── doctor.dart
├── utils
│ └── app_constant
│ │ ├── colors.dart
│ │ ├── app_gradient.dart
│ │ └── app_data.dart
├── views
│ └── doctor_appointment
│ │ └── doctor_appointment_page.dart
├── component
│ ├── doctor_specialties.dart
│ ├── doctor_specialties_item.dart
│ ├── doctor_appointment_body.dart
│ ├── toolbar.dart
│ └── doctor_item.dart
├── theme.dart
└── main.dart
├── .gitignore
├── README.md
├── test
└── widget_test.dart
├── pubspec.yaml
├── .metadata
├── analysis_options.yaml
└── pubspec.lock
/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 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.words": [
3 | "cupertino"
4 | ]
5 | }
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/web/favicon.png
--------------------------------------------------------------------------------
/assets/imgs/d1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/d1.png
--------------------------------------------------------------------------------
/assets/imgs/d2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/d2.png
--------------------------------------------------------------------------------
/assets/imgs/d3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/d3.png
--------------------------------------------------------------------------------
/assets/imgs/d4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/d4.png
--------------------------------------------------------------------------------
/assets/imgs/d5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/d5.png
--------------------------------------------------------------------------------
/assets/imgs/d6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/d6.png
--------------------------------------------------------------------------------
/assets/icons/otology.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/icons/otology.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/assets/imgs/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/screenshot.png
--------------------------------------------------------------------------------
/assets/fonts/gilroy_black.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_black.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_bold.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_heavy.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_heavy.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_light.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_thin.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_thin.otf
--------------------------------------------------------------------------------
/assets/icons/gynecology.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/icons/gynecology.png
--------------------------------------------------------------------------------
/assets/icons/pulmonology.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/icons/pulmonology.png
--------------------------------------------------------------------------------
/assets/fonts/gilroy_medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_medium.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_regular.otf
--------------------------------------------------------------------------------
/assets/imgs/rome_colosseum.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/imgs/rome_colosseum.jpeg
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/assets/fonts/gilroy_extraBold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_extraBold.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_semiBold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_semiBold.otf
--------------------------------------------------------------------------------
/assets/fonts/gilroy_ultraLight.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/fonts/gilroy_ultraLight.otf
--------------------------------------------------------------------------------
/assets/icons/gastroenterology.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/assets/icons/gastroenterology.png
--------------------------------------------------------------------------------
/lib/data/models/specialty.dart:
--------------------------------------------------------------------------------
1 | class Specialty{
2 | final String name;
3 | final String iconPath;
4 | Specialty({required this.name,required this.iconPath});
5 | }
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/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/alireza-rajaei/dr_flutter_template/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/dr_flutter_template/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.dr_flutter_template
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/data/models/doctor.dart:
--------------------------------------------------------------------------------
1 | class Doctor{
2 | final String fullName ;
3 | final String price ;
4 | final String picture ;
5 | final String time ;
6 | final String specialties ;
7 | final String gender ;
8 |
9 | Doctor(this.fullName, this.price, this.time, this.specialties, this.picture, this.gender);
10 |
11 | }
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/utils/app_constant/colors.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 |
3 | Color blueGray = const Color(0xFF2c343e);
4 | Color g11 = const Color(0xFFf9cebd);
5 | Color g12 = const Color(0xfffaa57a);
6 | Color g21 = const Color(0xFF8fd0d6);
7 | Color g22 = const Color(0xff61bdcc);
8 | Color g31 = const Color(0xFF7aa7d0);
9 | Color g32 = const Color(0xff72a4d5);
10 | Color g41 = const Color(0xff5b7c9a);
11 | Color g42 = const Color(0xff4c6a87);
12 | Color searchInput = const Color(0xff3b4252);
13 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/.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 |
--------------------------------------------------------------------------------
/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/utils/app_constant/app_gradient.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 |
3 | import 'colors.dart';
4 |
5 | class AppGradient{
6 | static final Listgradient=[
7 | LinearGradient(
8 | colors: [g11,g12],
9 | begin: Alignment.topRight,
10 | end: Alignment.bottomLeft
11 | ),LinearGradient(
12 | colors: [g21,g22],
13 | begin: Alignment.topRight,
14 | end: Alignment.bottomLeft
15 | ),LinearGradient(
16 | colors: [g31,g32],
17 | begin: Alignment.topRight,
18 | end: Alignment.bottomLeft
19 | ),LinearGradient(
20 | colors: [g41,g42],
21 | begin: Alignment.topRight,
22 | end: Alignment.bottomLeft
23 | ),
24 | ];
25 | }
--------------------------------------------------------------------------------
/lib/views/doctor_appointment/doctor_appointment_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../component/doctor_appointment_body.dart';
4 | import '../../utils/app_constant/colors.dart';
5 |
6 | class DoctorAppointmentPage extends StatefulWidget {
7 | const DoctorAppointmentPage({Key? key}) : super(key: key);
8 |
9 | @override
10 | _DoctorAppointmentPageState createState() => _DoctorAppointmentPageState();
11 | }
12 |
13 | class _DoctorAppointmentPageState extends State {
14 | final ScrollController _scrollController = ScrollController();
15 |
16 | @override
17 | Widget build(BuildContext context) {
18 | return Scaffold(
19 | backgroundColor: blueGray,
20 | body: Container(
21 | padding: const EdgeInsets.only(top: 35),
22 | child: const DoctorAppointmentBody()),
23 | );
24 | }
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 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dr_flutter_template",
3 | "short_name": "dr_flutter_template",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | Installation
4 |
5 | ```
6 | flutter pub get
7 | ```
8 | Usage
9 |
10 | ```
11 | flutter run
12 | ```
13 |
14 | Dotor Booking App UI made with Flutter, Don't forget to star ⭐ the repo it motivates me to share more open source
15 |
16 | > You can also nominate me for Github Star developer program
17 | > https://github.com/alireza-rajaei
18 |
19 | ### License
20 |
21 | Copyright 2020 Alireza rajaei
22 |
23 | Licensed under the Apache License, Version 2.0 (the "License");
24 | you may not use this file except in compliance with the License.
25 | You may obtain a copy of the License at
26 |
27 | http://www.apache.org/licenses/LICENSE-2.0
28 |
29 | Unless required by applicable law or agreed to in writing, software
30 | distributed under the License is distributed on an "AS IS" BASIS,
31 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
32 | See the License for the specific language governing permissions and
33 | limitations under the License.
34 |
--------------------------------------------------------------------------------
/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:dr_flutter_template/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 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: dr_flutter_template
2 | description: A new Flutter project.
3 | publish_to: "none"
4 | version: 1.0.0+1
5 |
6 | environment:
7 | sdk: ">=2.18.2 <3.0.0"
8 | dependencies:
9 | flutter:
10 | sdk: flutter
11 | cupertino_icons: ^1.0.2
12 | lottie: ^1.2.1
13 |
14 | dev_dependencies:
15 | flutter_test:
16 | sdk: flutter
17 | flutter_lints: ^1.0.0
18 | flutter:
19 | assets:
20 | - assets/icons/
21 | - assets/animations/
22 | - assets/imgs/
23 | uses-material-design: true
24 | fonts:
25 | - family: gilroy
26 | fonts:
27 | - asset: assets/fonts/gilroy_ultraLight.otf
28 | weight: 100
29 | - asset: assets/fonts/gilroy_thin.otf
30 | weight: 200
31 | - asset: assets/fonts/gilroy_light.otf
32 | weight: 300
33 | - asset: assets/fonts/gilroy_regular.otf
34 | weight: 400
35 | - asset: assets/fonts/gilroy_medium.otf
36 | weight: 500
37 | - asset: assets/fonts/gilroy_semiBold.otf
38 | weight: 600
39 | - asset: assets/fonts/gilroy_bold.otf
40 | weight: 700
41 | - asset: assets/fonts/gilroy_extraBold.otf
42 | weight: 800
43 | - asset: assets/fonts/gilroy_black.otf
44 | weight: 900
45 |
--------------------------------------------------------------------------------
/.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: eb6d86ee27deecba4a83536aa20f366a6044895c
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: eb6d86ee27deecba4a83536aa20f366a6044895c
17 | base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
18 | - platform: android
19 | create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
20 | base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
21 | - platform: ios
22 | create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
23 | base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
24 | - platform: web
25 | create_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
26 | base_revision: eb6d86ee27deecba4a83536aa20f366a6044895c
27 |
28 | # User provided section
29 |
30 | # List of Local paths (relative to this file) that should be
31 | # ignored by the migrate tool.
32 | #
33 | # Files that are not part of the templates will be ignored by default.
34 | unmanaged_files:
35 | - 'lib/main.dart'
36 | - 'ios/Runner.xcodeproj/project.pbxproj'
37 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/utils/app_constant/app_data.dart:
--------------------------------------------------------------------------------
1 | import '../../data/models/doctor.dart';
2 | import '../../data/models/specialty.dart';
3 |
4 | class AppData {
5 | static final List specialties = [
6 | Specialty(name: "Otology", iconPath: "assets/icons/otology.png"),
7 | Specialty(
8 | name: "Gastroenterology",
9 | iconPath: "assets/icons/gastroenterology.png"),
10 | Specialty(name: "Pulmonology", iconPath: "assets/icons/pulmonology.png"),
11 | Specialty(name: "Gynecology", iconPath: "assets/icons/gynecology.png"),
12 | Specialty(name: "Show All", iconPath: ""),
13 | ];
14 | static final List doctors = [
15 | Doctor('Brittany Andreoli, MD', '\$20.50', '08:00 AM - 01:00 PM',
16 | "Otology - Gastroenterology", 'assets/imgs/d1.png', "f"),
17 | Doctor('Hendrick Arnold, MD', '\$15.40', '02:00 PM - 08:00 PM',
18 | "Pulmonology - Gastroenterology", 'assets/imgs/d2.png', "m"),
19 | Doctor('Joyce Bellin, PA-C', '10.50', '08:00 AM - 12:00 AM',
20 | "Gynecology - Pulmonology", 'assets/imgs/d3.png', "f"),
21 | Doctor('Michael Burke, MD', '14.50', '08:00 AM - 12:00 AM',
22 | "Gynecology - Pulmonology", 'assets/imgs/d4.png', "m"),
23 | Doctor('Michael Burke, MD', '14.50', '08:00 AM - 12:00 AM',
24 | "Gynecology - Pulmonology", 'assets/imgs/d5.png', "m"),
25 | ];
26 |
27 | static final List pics = [
28 | "assets/imgs/rome_colosseum.jpeg",
29 | "assets/imgs/rome_colosseum.jpeg",
30 | "assets/imgs/rome_colosseum.jpeg",
31 | "assets/imgs/rome_colosseum.jpeg",
32 | "assets/imgs/rome_colosseum.jpeg"
33 | ];
34 | }
35 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
15 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | Dr Flutter Template
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | dr_flutter_template
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 |
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | dr_flutter_template
33 |
34 |
35 |
39 |
40 |
41 |
42 |
43 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/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.dr_flutter_template"
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 |
--------------------------------------------------------------------------------
/lib/component/doctor_specialties.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../../utils/app_constant/app_data.dart';
4 | import 'doctor_specialties_item.dart';
5 |
6 | class DoctorSpecialities extends StatefulWidget {
7 | const DoctorSpecialities({Key? key,required this.showAnimation}) : super(key: key);
8 | final bool showAnimation;
9 | @override
10 | _DoctorSpecialitiesState createState() => _DoctorSpecialitiesState();
11 | }
12 |
13 | class _DoctorSpecialitiesState extends State {
14 | @override
15 | Widget build(BuildContext context) {
16 | return SizedBox(
17 | width: MediaQuery.of(context).size.width,
18 | child: Column(
19 | crossAxisAlignment: CrossAxisAlignment.start,
20 | children: [
21 | if(!widget.showAnimation)
22 | Padding(
23 | padding: const EdgeInsets.only(left: 20, right: 20, top: 20),
24 | child: Text(
25 | 'Hello AliReza',
26 | style: Theme.of(context).textTheme.headline3!.copyWith(
27 | fontWeight: FontWeight.w700,
28 | fontSize: 18,
29 | color: Colors.white.withOpacity(.3)),
30 | ),
31 | ),
32 | if(!widget.showAnimation)
33 | Padding(
34 | padding: const EdgeInsets.only(left: 20, right: 20, top: 10),
35 | child: Text(
36 | 'Medical specialties',
37 | style: Theme.of(context).textTheme.headline3!.copyWith(
38 | fontWeight: FontWeight.w700,
39 | fontSize: 23,
40 | color: Colors.white),
41 | ),
42 | ),
43 | Container(
44 | margin: const EdgeInsets.only(top: 20),
45 | height: 140,
46 | width: MediaQuery.of(context).size.width,
47 | child: ListView.separated(
48 | padding: const EdgeInsets.symmetric(horizontal: 20),
49 | shrinkWrap: true,
50 | scrollDirection: Axis.horizontal,
51 | itemBuilder: (context, index) {
52 | return DoctorSpecialtiesItem(
53 | index: index,
54 | specialty: AppData.specialties[index],
55 | showAnim: widget.showAnimation,
56 | );
57 | },
58 | separatorBuilder: (BuildContext context, int index) {
59 | return Container(
60 | width: 15,
61 | );
62 | }, itemCount: AppData.specialties.length,
63 | ),
64 | )
65 | ],
66 | ),
67 | );
68 | }
69 |
70 |
71 | }
72 |
73 |
--------------------------------------------------------------------------------
/lib/component/doctor_specialties_item.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/material.dart';
4 |
5 | import '../data/models/specialty.dart';
6 | import '../utils/app_constant/app_gradient.dart';
7 |
8 | class DoctorSpecialtiesItem extends StatefulWidget {
9 | final int index;
10 | final Specialty specialty;
11 | final bool showAnim;
12 |
13 | const DoctorSpecialtiesItem({
14 | Key? key,
15 | required this.index,
16 | required this.specialty,
17 | required this.showAnim,
18 | }) : super(key: key);
19 |
20 | @override
21 | _DoctorSpecialtiesItemState createState() => _DoctorSpecialtiesItemState();
22 | }
23 |
24 | class _DoctorSpecialtiesItemState extends State {
25 | bool showAnimation = true;
26 |
27 | @override
28 | void initState() {
29 | super.initState();
30 | }
31 |
32 | @override
33 | Widget build(BuildContext context) {
34 | if (widget.showAnim != showAnimation) {
35 | handleAnimation();
36 | }
37 | return Column(
38 | children: [
39 | AnimatedContainer(
40 | duration: const Duration(milliseconds: 200),
41 | height: showAnimation ? 40 : 0,
42 | ),
43 | AnimatedOpacity(
44 | duration: const Duration(milliseconds: 200),
45 | opacity: showAnimation ? 0 : 1,
46 | child: Container(
47 | height: 100,
48 | width: 100,
49 | decoration: BoxDecoration(
50 | borderRadius: BorderRadius.circular(15),
51 | gradient: AppGradient.gradient[widget.index % 4]),
52 | child: Column(
53 | mainAxisAlignment: MainAxisAlignment.center,
54 | crossAxisAlignment: CrossAxisAlignment.center,
55 | children: [
56 | if (widget.specialty.iconPath.isNotEmpty)
57 | ImageIcon(
58 | AssetImage(widget.specialty.iconPath),
59 | color: Colors.white,
60 | size: 50,
61 | ),
62 | Padding(
63 | padding: EdgeInsets.only(
64 | top: widget.specialty.iconPath.isNotEmpty ? 8.0 : 0,
65 | ),
66 | child: Text(
67 | widget.specialty.name,
68 | style: Theme.of(context).textTheme.headline3!.copyWith(
69 | fontSize:
70 | widget.specialty.iconPath.isNotEmpty ? 11 : 15,
71 | fontWeight: FontWeight.w700,
72 | ),
73 | ),
74 | )
75 | ],
76 | ),
77 | ),
78 | ),
79 | ],
80 | );
81 | }
82 |
83 | Timer? _debounce;
84 |
85 | Future handleAnimation() async {
86 | if (_debounce?.isActive ?? false) _debounce?.cancel();
87 | _debounce = Timer(Duration(milliseconds: ((widget.index) * 200)), () {
88 | setState(() {
89 | showAnimation = !showAnimation;
90 | });
91 | });
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/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/theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'utils/app_constant/colors.dart';
4 |
5 | ThemeData darkThemeData(BuildContext context) {
6 | return ThemeData.dark().copyWith(
7 | // primaryColor: Colors.white,
8 | scaffoldBackgroundColor: blueGray,
9 | // appBarTheme: appBarThemeDark,
10 | cardColor: blueGray,
11 | iconTheme: IconThemeData(color: Colors.white.withOpacity(.5)),
12 | textTheme: TextTheme(
13 | bodyText1: const TextStyle(
14 | fontSize: 20.0,
15 | fontFamily: 'gilroy',
16 | fontWeight: FontWeight.w400,
17 | color: Colors.white),
18 | headline1: const TextStyle(
19 | fontSize: 24.0,
20 | fontFamily: 'gilroy',
21 | fontWeight: FontWeight.w700,
22 | color: Colors.white),
23 | headline2: const TextStyle(
24 | fontSize: 16.0,
25 | fontFamily: 'gilroy',
26 | fontWeight: FontWeight.w600,
27 | color: Colors.white),
28 | headline3: const TextStyle(
29 | fontSize: 16.0,
30 | fontFamily: 'gilroy',
31 | fontWeight: FontWeight.w400,
32 | color: Colors.white),
33 | headline4: const TextStyle(
34 | fontSize: 14.0,
35 | fontFamily: 'gilroy',
36 | fontWeight: FontWeight.w600,
37 | color: Colors.white),
38 | headline5: TextStyle(
39 | fontSize: 14.0,
40 | fontFamily: 'gilroy',
41 | fontWeight: FontWeight.w400,
42 | color: Colors.white.withOpacity(.5)),
43 | headline6: const TextStyle(
44 | fontSize: 12.0,
45 | fontFamily: 'gilroy',
46 | fontWeight: FontWeight.w400,
47 | color: Colors.white),
48 | bodyText2: const TextStyle(
49 | fontSize: 12.0,
50 | fontFamily: 'gilroy',
51 | fontWeight: FontWeight.w600,
52 | color: Colors.white),
53 | subtitle2: const TextStyle(
54 | fontSize: 12.0,
55 | fontFamily: 'gilroy',
56 | fontWeight: FontWeight.w400,
57 | color: Colors.white),
58 | ),
59 | inputDecorationTheme: InputDecorationTheme(
60 | hintStyle: TextStyle(
61 | fontSize: 12.0,
62 | fontFamily: 'gilroy',
63 | fontWeight: FontWeight.w400,
64 | color: Colors.white.withOpacity(.4)),
65 | counterStyle: const TextStyle(
66 | fontSize: 12.0,
67 | fontFamily: 'gilroy',
68 | fontWeight: FontWeight.w400,
69 | color: Colors.white),
70 | enabledBorder: InputBorder.none,
71 | focusedBorder: InputBorder.none,
72 | errorBorder: InputBorder.none,
73 | focusedErrorBorder: InputBorder.none),
74 | // colorScheme: ColorScheme.dark().copyWith(
75 | // primary: Colors.white.withOpacity(.4), secondary: secondaryColor, error: errorColor),
76 | // bottomNavigationBarTheme: BottomNavigationBarThemeData(
77 | // backgroundColor: backgroundDark,
78 | // selectedIconTheme: IconThemeData(color: Colors.white,size: 33),
79 | // unselectedIconTheme: IconThemeData(color: navigationBottomUnselectedIconDark,size: 33),
80 | // showUnselectedLabels: false,
81 | // showSelectedLabels: false,
82 | // type: BottomNavigationBarType.fixed,
83 | // ),
84 | );
85 | }
86 |
87 | // final appBarThemeLight = AppBarTheme(
88 | // centerTitle: true, elevation: 0, backgroundColor: backgroundLight);
89 | // final appBarThemeDark = AppBarTheme(
90 | // centerTitle: true, elevation: 0, backgroundColor: contentColorLightTheme);
91 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:dr_flutter_template/theme.dart';
2 | import 'package:dr_flutter_template/views/doctor_appointment/doctor_appointment_page.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | void main() {
6 | runApp(const MyApp());
7 | }
8 |
9 | class MyApp extends StatelessWidget {
10 | const MyApp({super.key});
11 |
12 | // This widget is the root of your application.
13 | @override
14 | Widget build(BuildContext context) {
15 | return MaterialApp(
16 | title: 'dr flutter template',
17 | theme: darkThemeData(context),
18 | home: const DoctorAppointmentPage(),
19 | );
20 | }
21 | }
22 |
23 | class MyHomePage extends StatefulWidget {
24 | const MyHomePage({super.key, required this.title});
25 |
26 | // This widget is the home page of your application. It is stateful, meaning
27 | // that it has a State object (defined below) that contains fields that affect
28 | // how it looks.
29 |
30 | // This class is the configuration for the state. It holds the values (in this
31 | // case the title) provided by the parent (in this case the App widget) and
32 | // used by the build method of the State. Fields in a Widget subclass are
33 | // always marked "final".
34 |
35 | final String title;
36 |
37 | @override
38 | State createState() => _MyHomePageState();
39 | }
40 |
41 | class _MyHomePageState extends State {
42 | int _counter = 0;
43 |
44 | void _incrementCounter() {
45 | setState(() {
46 | // This call to setState tells the Flutter framework that something has
47 | // changed in this State, which causes it to rerun the build method below
48 | // so that the display can reflect the updated values. If we changed
49 | // _counter without calling setState(), then the build method would not be
50 | // called again, and so nothing would appear to happen.
51 | _counter++;
52 | });
53 | }
54 |
55 | @override
56 | Widget build(BuildContext context) {
57 | // This method is rerun every time setState is called, for instance as done
58 | // by the _incrementCounter method above.
59 | //
60 | // The Flutter framework has been optimized to make rerunning build methods
61 | // fast, so that you can just rebuild anything that needs updating rather
62 | // than having to individually change instances of widgets.
63 | return Scaffold(
64 | appBar: AppBar(
65 | // Here we take the value from the MyHomePage object that was created by
66 | // the App.build method, and use it to set our appbar title.
67 | title: Text(widget.title),
68 | ),
69 | body: Center(
70 | // Center is a layout widget. It takes a single child and positions it
71 | // in the middle of the parent.
72 | child: Column(
73 | // Column is also a layout widget. It takes a list of children and
74 | // arranges them vertically. By default, it sizes itself to fit its
75 | // children horizontally, and tries to be as tall as its parent.
76 | //
77 | // Invoke "debug painting" (press "p" in the console, choose the
78 | // "Toggle Debug Paint" action from the Flutter Inspector in Android
79 | // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
80 | // to see the wireframe for each widget.
81 | //
82 | // Column has various properties to control how it sizes itself and
83 | // how it positions its children. Here we use mainAxisAlignment to
84 | // center the children vertically; the main axis here is the vertical
85 | // axis because Columns are vertical (the cross axis would be
86 | // horizontal).
87 | mainAxisAlignment: MainAxisAlignment.center,
88 | children: [
89 | const Text(
90 | 'You have pushed the button this many times:',
91 | ),
92 | Text(
93 | '$_counter',
94 | style: Theme.of(context).textTheme.headline4,
95 | ),
96 | ],
97 | ),
98 | ),
99 | floatingActionButton: FloatingActionButton(
100 | onPressed: _incrementCounter,
101 | tooltip: 'Increment',
102 | child: const Icon(Icons.add),
103 | ), // This trailing comma makes auto-formatting nicer for build methods.
104 | );
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/lib/component/doctor_appointment_body.dart:
--------------------------------------------------------------------------------
1 | import 'package:dr_flutter_template/component/toolbar.dart';
2 | import 'package:flutter/cupertino.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:lottie/lottie.dart';
5 |
6 | import '../../../utils/app_constant/colors.dart';
7 | import '../utils/app_constant/app_data.dart';
8 | import 'doctor_item.dart';
9 | import 'doctor_specialties.dart';
10 |
11 | class DoctorAppointmentBody extends StatefulWidget {
12 | const DoctorAppointmentBody({Key? key}) : super(key: key);
13 |
14 | @override
15 | _DoctorAppointmentBodyState createState() => _DoctorAppointmentBodyState();
16 | }
17 |
18 | class _DoctorAppointmentBodyState extends State {
19 | bool showAnimation = true;
20 | @override
21 | void initState() {
22 | // TODO: implement initState
23 | super.initState();
24 | handleAnimation();
25 | }
26 | @override
27 | Widget build(BuildContext context) {
28 | return Stack(
29 | children: [
30 | Column(
31 | children: [
32 | const ToolbarBody(
33 | isOnTop: true,
34 | ),
35 | Expanded(
36 | child: SingleChildScrollView(
37 | child: Column(
38 | children: [
39 | DoctorSpecialities(
40 | showAnimation: showAnimation,
41 | ),
42 | if(!showAnimation)
43 | Container(
44 | margin: const EdgeInsets.symmetric(horizontal: 20),
45 | color: Colors.white.withOpacity(.05),
46 | width: MediaQuery.of(context).size.width,
47 | height: 1,
48 | ),
49 | if (!showAnimation)
50 | Padding(
51 | padding: const EdgeInsets.only(
52 | left: 20.0, right: 20, top: 20),
53 | child: Row(
54 | children: [
55 | Text(
56 | 'Top Doctor',
57 | style: Theme.of(context)
58 | .textTheme
59 | .headline3!
60 | .copyWith(
61 | fontWeight: FontWeight.w700,
62 | fontSize: 18,
63 | color: Colors.white.withOpacity(.7)),
64 | ),
65 | Expanded(
66 | child: Container(),
67 | ),
68 | Text(
69 | 'See All',
70 | style: Theme.of(context)
71 | .textTheme
72 | .headline3!
73 | .copyWith(
74 | fontWeight: FontWeight.w700,
75 | fontSize: 12,
76 | color: g21),
77 | ),
78 | ],
79 | ),
80 | ),
81 | ListView.separated(
82 | padding: const EdgeInsets.only(top: 20, bottom: 20),
83 | shrinkWrap: true,
84 | physics: const NeverScrollableScrollPhysics(),
85 | itemBuilder: (context, index) {
86 | return DoctorItem(
87 | doctor: AppData.doctors[index],
88 | index: index,
89 | showAnim: showAnimation,
90 | );
91 | },
92 | separatorBuilder: (context, index) {
93 | return Container(
94 | height: 10,
95 | );
96 | },
97 | itemCount: AppData.doctors.length,
98 | )
99 | ],
100 | ),
101 | ),
102 | ),
103 | ],
104 | ),
105 | if (showAnimation)
106 | Padding(
107 | padding: const EdgeInsets.only(top: 0.0),
108 | child: Center(
109 | child: Lottie.asset(
110 | 'assets/animations/6bgdark.json',
111 | width: 25,
112 | height: 25,
113 | ),
114 | ),
115 | ),
116 | ],
117 | );
118 | }
119 |
120 | Future handleAnimation() async {
121 | await Future.delayed(
122 | const Duration(milliseconds: 3000),
123 | );
124 | setState(() {
125 | showAnimation=!showAnimation;
126 | });
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | archive:
5 | dependency: transitive
6 | description:
7 | name: archive
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "3.3.2"
11 | async:
12 | dependency: transitive
13 | description:
14 | name: async
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "2.9.0"
18 | boolean_selector:
19 | dependency: transitive
20 | description:
21 | name: boolean_selector
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "2.1.0"
25 | characters:
26 | dependency: transitive
27 | description:
28 | name: characters
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "1.2.1"
32 | clock:
33 | dependency: transitive
34 | description:
35 | name: clock
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.1.1"
39 | collection:
40 | dependency: transitive
41 | description:
42 | name: collection
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "1.16.0"
46 | crypto:
47 | dependency: transitive
48 | description:
49 | name: crypto
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "3.0.2"
53 | cupertino_icons:
54 | dependency: "direct main"
55 | description:
56 | name: cupertino_icons
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "1.0.5"
60 | fake_async:
61 | dependency: transitive
62 | description:
63 | name: fake_async
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "1.3.1"
67 | flutter:
68 | dependency: "direct main"
69 | description: flutter
70 | source: sdk
71 | version: "0.0.0"
72 | flutter_lints:
73 | dependency: "direct dev"
74 | description:
75 | name: flutter_lints
76 | url: "https://pub.dartlang.org"
77 | source: hosted
78 | version: "1.0.4"
79 | flutter_test:
80 | dependency: "direct dev"
81 | description: flutter
82 | source: sdk
83 | version: "0.0.0"
84 | lints:
85 | dependency: transitive
86 | description:
87 | name: lints
88 | url: "https://pub.dartlang.org"
89 | source: hosted
90 | version: "1.0.1"
91 | lottie:
92 | dependency: "direct main"
93 | description:
94 | name: lottie
95 | url: "https://pub.dartlang.org"
96 | source: hosted
97 | version: "1.4.3"
98 | matcher:
99 | dependency: transitive
100 | description:
101 | name: matcher
102 | url: "https://pub.dartlang.org"
103 | source: hosted
104 | version: "0.12.12"
105 | material_color_utilities:
106 | dependency: transitive
107 | description:
108 | name: material_color_utilities
109 | url: "https://pub.dartlang.org"
110 | source: hosted
111 | version: "0.1.5"
112 | meta:
113 | dependency: transitive
114 | description:
115 | name: meta
116 | url: "https://pub.dartlang.org"
117 | source: hosted
118 | version: "1.8.0"
119 | path:
120 | dependency: transitive
121 | description:
122 | name: path
123 | url: "https://pub.dartlang.org"
124 | source: hosted
125 | version: "1.8.2"
126 | sky_engine:
127 | dependency: transitive
128 | description: flutter
129 | source: sdk
130 | version: "0.0.99"
131 | source_span:
132 | dependency: transitive
133 | description:
134 | name: source_span
135 | url: "https://pub.dartlang.org"
136 | source: hosted
137 | version: "1.9.0"
138 | stack_trace:
139 | dependency: transitive
140 | description:
141 | name: stack_trace
142 | url: "https://pub.dartlang.org"
143 | source: hosted
144 | version: "1.10.0"
145 | stream_channel:
146 | dependency: transitive
147 | description:
148 | name: stream_channel
149 | url: "https://pub.dartlang.org"
150 | source: hosted
151 | version: "2.1.0"
152 | string_scanner:
153 | dependency: transitive
154 | description:
155 | name: string_scanner
156 | url: "https://pub.dartlang.org"
157 | source: hosted
158 | version: "1.1.1"
159 | term_glyph:
160 | dependency: transitive
161 | description:
162 | name: term_glyph
163 | url: "https://pub.dartlang.org"
164 | source: hosted
165 | version: "1.2.1"
166 | test_api:
167 | dependency: transitive
168 | description:
169 | name: test_api
170 | url: "https://pub.dartlang.org"
171 | source: hosted
172 | version: "0.4.12"
173 | typed_data:
174 | dependency: transitive
175 | description:
176 | name: typed_data
177 | url: "https://pub.dartlang.org"
178 | source: hosted
179 | version: "1.3.1"
180 | vector_math:
181 | dependency: transitive
182 | description:
183 | name: vector_math
184 | url: "https://pub.dartlang.org"
185 | source: hosted
186 | version: "2.1.2"
187 | sdks:
188 | dart: ">=2.18.2 <3.0.0"
189 | flutter: ">=3.3.0"
190 |
--------------------------------------------------------------------------------
/lib/component/toolbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | import '../../../utils/app_constant/colors.dart';
5 |
6 |
7 | class ToolbarBody extends StatefulWidget {
8 | const ToolbarBody({Key? key,required this.isOnTop}) : super(key: key);
9 | final bool isOnTop;
10 |
11 | @override
12 | _ToolbarBodyState createState() => _ToolbarBodyState();
13 | }
14 |
15 | class _ToolbarBodyState extends State {
16 | bool _showSearch = false;
17 | @override
18 | Widget build(BuildContext context) {
19 | return Container(
20 | color: blueGray,
21 | child: Column(
22 | children: [
23 | Padding(
24 | padding: const EdgeInsets.symmetric(vertical: 3,horizontal: 20),
25 | child: Align(
26 | alignment: Alignment.topCenter,
27 | child: Container(
28 | height: 58,
29 | child: Stack(
30 | children: [
31 | // if(widget.isOnTop)
32 | Align(
33 | alignment: Alignment.centerLeft,
34 | child: Row(
35 | children: [
36 | AnimatedOpacity(
37 |
38 | opacity: widget.isOnTop ? 1: 0,
39 | duration: const Duration(milliseconds: 300),
40 | child: GestureDetector(
41 | onTap: (){},
42 | child: SizedBox(
43 | width: 48,
44 | height: 48,
45 | child: Container(
46 | padding: const EdgeInsets.all(14),
47 | decoration: BoxDecoration(
48 | color: searchInput,
49 | shape: BoxShape.circle,
50 | border: Border.all(
51 | width: 1,
52 | color: Colors.white.withOpacity(.02))),
53 | child:const Icon(
54 | Icons.menu,
55 | size: 20,
56 | color: Colors.white,
57 | )
58 | ),
59 | ),
60 | ),
61 | ),
62 | if ((!_showSearch ) )
63 | Expanded(
64 | child: Container(
65 | alignment: Alignment.center,
66 | child: Padding(
67 | padding: const EdgeInsets.only(left: 10, right: 10),
68 | child: Text(
69 | "Find Your Doctor",
70 | style: Theme.of(context)
71 | .textTheme
72 | .headline2!
73 | .copyWith(fontSize: 21),
74 | maxLines: 1,
75 | overflow: TextOverflow.ellipsis,
76 | ),
77 | ),
78 | ),
79 | ),
80 | Container(
81 | width: 78,
82 | )
83 | ],
84 | ),
85 | ),
86 | Align(
87 | alignment: Alignment.centerRight,
88 | child: AnimatedContainer(
89 | duration: const Duration(milliseconds: 400),
90 | curve: Curves.bounceOut,
91 | width: _showSearch == true
92 | ? MediaQuery.of(context).size.width - (widget.isOnTop ? 95 : 0)
93 | : 48,
94 | height: 48,
95 | decoration: BoxDecoration(
96 | borderRadius: BorderRadius.circular(100),
97 | color: searchInput,
98 | // gradient: AppGradient.gradient[1],
99 | border: Border.all(
100 | width: 1, color: Colors.white.withOpacity(.02))),
101 | child: Row(
102 | mainAxisAlignment: MainAxisAlignment.center,
103 | children: [
104 | if (_showSearch)
105 | Container(
106 | height: double.infinity,
107 | width: 10,
108 | ),
109 | GestureDetector(
110 | onTap: () {
111 | setState(() {
112 | _showSearch = !_showSearch ;
113 |
114 | });
115 | },
116 | child: const Icon(
117 | Icons.search,
118 | size: 20,
119 | color: Colors.white,
120 | ),
121 | ),
122 | if (_showSearch)
123 | Container(
124 | height: double.infinity,
125 | width: 10,
126 | ),
127 | if (_showSearch)
128 | Expanded(
129 | child: TextFormField(
130 | // controller: widget.searchController,
131 | decoration: InputDecoration(
132 | hintText: "Find Your Doctor"),
133 | keyboardType: TextInputType.text,
134 | ),
135 | flex: 1,
136 | )
137 | ],
138 | ),
139 | ),
140 | ),
141 | ],
142 | ),
143 | ),
144 | ),
145 | ),
146 | Container(width: MediaQuery.of(context).size.width,
147 | height: 1,
148 | color: Colors.white.withOpacity(.05) ,)
149 | ],
150 | ),
151 | ); }
152 | }
153 |
--------------------------------------------------------------------------------
/lib/component/doctor_item.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/material.dart';
4 | import '../../../utils/app_constant/colors.dart';
5 | import '../data/models/doctor.dart';
6 | import '../utils/app_constant/app_gradient.dart';
7 |
8 | class DoctorItem extends StatefulWidget {
9 | const DoctorItem(
10 | {Key? key,
11 | required this.doctor,
12 | required this.index,
13 | required this.showAnim})
14 | : super(key: key);
15 | final Doctor doctor;
16 | final int index;
17 | final bool showAnim;
18 |
19 | @override
20 | _DoctorItemState createState() => _DoctorItemState();
21 | }
22 |
23 | class _DoctorItemState extends State {
24 | bool showAnimation = true;
25 |
26 | @override
27 | void initState() {
28 | super.initState();
29 | }
30 |
31 | @override
32 | Widget build(BuildContext context) {
33 | if (widget.showAnim != showAnimation) {
34 | handleAnimation();
35 | }
36 | return AnimatedOpacity(
37 | duration: const Duration(milliseconds: 200),
38 | opacity: showAnimation ? 0 : 1,
39 | child: SingleChildScrollView(
40 | scrollDirection: Axis.horizontal,
41 | child: Row(
42 | children: [
43 | AnimatedContainer(
44 | duration: const Duration(milliseconds: 200),
45 | width: showAnimation ? 80 : 20,
46 | ),
47 | Container(
48 | margin: const EdgeInsets.only(right: 20),
49 | padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
50 | width: MediaQuery.of(context).size.width - 40,
51 | decoration: BoxDecoration(
52 | color: searchInput,
53 | borderRadius: BorderRadius.circular(20),
54 | ),
55 | child: Row(
56 | mainAxisAlignment: MainAxisAlignment.start,
57 | crossAxisAlignment: CrossAxisAlignment.start,
58 | children: [
59 | Container(
60 | width: 60,
61 | height: 60,
62 | padding: const EdgeInsets.all(5),
63 | decoration: BoxDecoration(
64 | gradient: widget.doctor.gender == "m"
65 | ? AppGradient.gradient[1]
66 | : AppGradient.gradient[0],
67 | shape: BoxShape.circle),
68 | child: ClipRRect(
69 | borderRadius: BorderRadius.circular(100),
70 | child: Image.asset(widget.doctor.picture),
71 | ),
72 | ),
73 | Expanded(
74 | child: Padding(
75 | padding: const EdgeInsets.only(left: 10),
76 | child: Column(
77 | crossAxisAlignment: CrossAxisAlignment.stretch,
78 | mainAxisAlignment: MainAxisAlignment.start,
79 | children: [
80 | Text(
81 | widget.doctor.fullName,
82 | style: Theme.of(context)
83 | .textTheme
84 | .headline3!
85 | .copyWith(
86 | fontSize: 16,
87 | fontWeight: FontWeight.w700,
88 | color: Colors.white.withOpacity(.8)),
89 | ),
90 | Padding(
91 | padding: const EdgeInsets.only(top: 5.0, bottom: 5),
92 | child: Text(
93 | widget.doctor.specialties,
94 | style: Theme.of(context)
95 | .textTheme
96 | .headline3!
97 | .copyWith(
98 | fontSize: 12,
99 | fontWeight: FontWeight.w500,
100 | color: Colors.white.withOpacity(.6)),
101 | ),
102 | ),
103 | Row(
104 | children: [
105 | Icon(
106 | Icons.access_time_rounded,
107 | size: 20,
108 | color: g21,
109 | ),
110 | Padding(
111 | padding: const EdgeInsets.only(
112 | left: 5,
113 | ),
114 | child: Text(
115 | widget.doctor.time,
116 | style: Theme.of(context)
117 | .textTheme
118 | .headline3!
119 | .copyWith(
120 | fontSize: 12,
121 | fontWeight: FontWeight.w500,
122 | color: Colors.white.withOpacity(.8)),
123 | ),
124 | )
125 | ],
126 | ),
127 | Padding(
128 | padding: const EdgeInsets.only(top: 10),
129 | child: Row(
130 | mainAxisAlignment: MainAxisAlignment.start,
131 | crossAxisAlignment: CrossAxisAlignment.center,
132 | children: [
133 | Padding(
134 | padding: const EdgeInsets.only(
135 | left: 0,
136 | ),
137 | child: Text(
138 | widget.doctor.price,
139 | style: Theme.of(context)
140 | .textTheme
141 | .headline3!
142 | .copyWith(
143 | fontSize: 14,
144 | fontWeight: FontWeight.w700,
145 | color:
146 | Colors.white.withOpacity(.8)),
147 | ),
148 | ),
149 | Expanded(child: Container()),
150 | Container(
151 | padding: const EdgeInsets.symmetric(
152 | horizontal: 10),
153 | height: 30,
154 | decoration: BoxDecoration(
155 | borderRadius: BorderRadius.circular(20),
156 | gradient: widget.doctor.gender == "m"
157 | ? AppGradient.gradient[1]
158 | : AppGradient.gradient[0],
159 | ),
160 | child: Center(
161 | child: Text(
162 | 'Appointment',
163 | style: Theme.of(context)
164 | .textTheme
165 | .headline3!
166 | .copyWith(
167 | fontSize: 14,
168 | fontWeight: FontWeight.w700),
169 | )),
170 | )
171 | ],
172 | ),
173 | )
174 | ],
175 | ),
176 | ),
177 | )
178 | ],
179 | ),
180 | ),
181 | ],
182 | ),
183 | ),
184 | );
185 | }
186 |
187 | Timer? _debounce;
188 | Future handleAnimation() async {
189 | if (_debounce?.isActive ?? false) _debounce?.cancel();
190 | _debounce = Timer(Duration(milliseconds: ((widget.index) * 200)), () {
191 | setState(() {
192 | showAnimation = !showAnimation;
193 | });
194 | });
195 | }
196 | }
197 |
--------------------------------------------------------------------------------
/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 | DEVELOPMENT_TEAM = CSLN9D95H7;
292 | ENABLE_BITCODE = NO;
293 | INFOPLIST_FILE = Runner/Info.plist;
294 | LD_RUNPATH_SEARCH_PATHS = (
295 | "$(inherited)",
296 | "@executable_path/Frameworks",
297 | );
298 | PRODUCT_BUNDLE_IDENTIFIER = com.example.drFlutterTemplate;
299 | PRODUCT_NAME = "$(TARGET_NAME)";
300 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
301 | SWIFT_VERSION = 5.0;
302 | VERSIONING_SYSTEM = "apple-generic";
303 | };
304 | name = Profile;
305 | };
306 | 97C147031CF9000F007C117D /* Debug */ = {
307 | isa = XCBuildConfiguration;
308 | buildSettings = {
309 | ALWAYS_SEARCH_USER_PATHS = NO;
310 | CLANG_ANALYZER_NONNULL = YES;
311 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
312 | CLANG_CXX_LIBRARY = "libc++";
313 | CLANG_ENABLE_MODULES = YES;
314 | CLANG_ENABLE_OBJC_ARC = YES;
315 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
316 | CLANG_WARN_BOOL_CONVERSION = YES;
317 | CLANG_WARN_COMMA = YES;
318 | CLANG_WARN_CONSTANT_CONVERSION = YES;
319 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
320 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
321 | CLANG_WARN_EMPTY_BODY = YES;
322 | CLANG_WARN_ENUM_CONVERSION = YES;
323 | CLANG_WARN_INFINITE_RECURSION = YES;
324 | CLANG_WARN_INT_CONVERSION = YES;
325 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
326 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
327 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
328 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
329 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
330 | CLANG_WARN_STRICT_PROTOTYPES = YES;
331 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
332 | CLANG_WARN_UNREACHABLE_CODE = YES;
333 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
334 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
335 | COPY_PHASE_STRIP = NO;
336 | DEBUG_INFORMATION_FORMAT = dwarf;
337 | ENABLE_STRICT_OBJC_MSGSEND = YES;
338 | ENABLE_TESTABILITY = YES;
339 | GCC_C_LANGUAGE_STANDARD = gnu99;
340 | GCC_DYNAMIC_NO_PIC = NO;
341 | GCC_NO_COMMON_BLOCKS = YES;
342 | GCC_OPTIMIZATION_LEVEL = 0;
343 | GCC_PREPROCESSOR_DEFINITIONS = (
344 | "DEBUG=1",
345 | "$(inherited)",
346 | );
347 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
348 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
349 | GCC_WARN_UNDECLARED_SELECTOR = YES;
350 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
351 | GCC_WARN_UNUSED_FUNCTION = YES;
352 | GCC_WARN_UNUSED_VARIABLE = YES;
353 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
354 | MTL_ENABLE_DEBUG_INFO = YES;
355 | ONLY_ACTIVE_ARCH = YES;
356 | SDKROOT = iphoneos;
357 | TARGETED_DEVICE_FAMILY = "1,2";
358 | };
359 | name = Debug;
360 | };
361 | 97C147041CF9000F007C117D /* Release */ = {
362 | isa = XCBuildConfiguration;
363 | buildSettings = {
364 | ALWAYS_SEARCH_USER_PATHS = NO;
365 | CLANG_ANALYZER_NONNULL = YES;
366 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
367 | CLANG_CXX_LIBRARY = "libc++";
368 | CLANG_ENABLE_MODULES = YES;
369 | CLANG_ENABLE_OBJC_ARC = YES;
370 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
371 | CLANG_WARN_BOOL_CONVERSION = YES;
372 | CLANG_WARN_COMMA = YES;
373 | CLANG_WARN_CONSTANT_CONVERSION = YES;
374 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
375 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
376 | CLANG_WARN_EMPTY_BODY = YES;
377 | CLANG_WARN_ENUM_CONVERSION = YES;
378 | CLANG_WARN_INFINITE_RECURSION = YES;
379 | CLANG_WARN_INT_CONVERSION = YES;
380 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
381 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
382 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
383 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
384 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
385 | CLANG_WARN_STRICT_PROTOTYPES = YES;
386 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
387 | CLANG_WARN_UNREACHABLE_CODE = YES;
388 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
389 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
390 | COPY_PHASE_STRIP = NO;
391 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
392 | ENABLE_NS_ASSERTIONS = NO;
393 | ENABLE_STRICT_OBJC_MSGSEND = YES;
394 | GCC_C_LANGUAGE_STANDARD = gnu99;
395 | GCC_NO_COMMON_BLOCKS = YES;
396 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
397 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
398 | GCC_WARN_UNDECLARED_SELECTOR = YES;
399 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
400 | GCC_WARN_UNUSED_FUNCTION = YES;
401 | GCC_WARN_UNUSED_VARIABLE = YES;
402 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
403 | MTL_ENABLE_DEBUG_INFO = NO;
404 | SDKROOT = iphoneos;
405 | SUPPORTED_PLATFORMS = iphoneos;
406 | SWIFT_COMPILATION_MODE = wholemodule;
407 | SWIFT_OPTIMIZATION_LEVEL = "-O";
408 | TARGETED_DEVICE_FAMILY = "1,2";
409 | VALIDATE_PRODUCT = YES;
410 | };
411 | name = Release;
412 | };
413 | 97C147061CF9000F007C117D /* Debug */ = {
414 | isa = XCBuildConfiguration;
415 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
416 | buildSettings = {
417 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
418 | CLANG_ENABLE_MODULES = YES;
419 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
420 | DEVELOPMENT_TEAM = CSLN9D95H7;
421 | ENABLE_BITCODE = NO;
422 | INFOPLIST_FILE = Runner/Info.plist;
423 | LD_RUNPATH_SEARCH_PATHS = (
424 | "$(inherited)",
425 | "@executable_path/Frameworks",
426 | );
427 | PRODUCT_BUNDLE_IDENTIFIER = com.example.drFlutterTemplate;
428 | PRODUCT_NAME = "$(TARGET_NAME)";
429 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
430 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
431 | SWIFT_VERSION = 5.0;
432 | VERSIONING_SYSTEM = "apple-generic";
433 | };
434 | name = Debug;
435 | };
436 | 97C147071CF9000F007C117D /* Release */ = {
437 | isa = XCBuildConfiguration;
438 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
439 | buildSettings = {
440 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
441 | CLANG_ENABLE_MODULES = YES;
442 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
443 | DEVELOPMENT_TEAM = CSLN9D95H7;
444 | ENABLE_BITCODE = NO;
445 | INFOPLIST_FILE = Runner/Info.plist;
446 | LD_RUNPATH_SEARCH_PATHS = (
447 | "$(inherited)",
448 | "@executable_path/Frameworks",
449 | );
450 | PRODUCT_BUNDLE_IDENTIFIER = com.example.drFlutterTemplate;
451 | PRODUCT_NAME = "$(TARGET_NAME)";
452 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
453 | SWIFT_VERSION = 5.0;
454 | VERSIONING_SYSTEM = "apple-generic";
455 | };
456 | name = Release;
457 | };
458 | /* End XCBuildConfiguration section */
459 |
460 | /* Begin XCConfigurationList section */
461 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
462 | isa = XCConfigurationList;
463 | buildConfigurations = (
464 | 97C147031CF9000F007C117D /* Debug */,
465 | 97C147041CF9000F007C117D /* Release */,
466 | 249021D3217E4FDB00AE95B9 /* Profile */,
467 | );
468 | defaultConfigurationIsVisible = 0;
469 | defaultConfigurationName = Release;
470 | };
471 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
472 | isa = XCConfigurationList;
473 | buildConfigurations = (
474 | 97C147061CF9000F007C117D /* Debug */,
475 | 97C147071CF9000F007C117D /* Release */,
476 | 249021D4217E4FDB00AE95B9 /* Profile */,
477 | );
478 | defaultConfigurationIsVisible = 0;
479 | defaultConfigurationName = Release;
480 | };
481 | /* End XCConfigurationList section */
482 | };
483 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
484 | }
485 |
--------------------------------------------------------------------------------
/assets/animations/loading_anim.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "5.5.3",
3 | "fr": 25,
4 | "ip": 0,
5 | "op": 40,
6 | "w": 24,
7 | "h": 24,
8 | "nm": "Comp 1",
9 | "ddd": 0,
10 | "assets": [],
11 | "layers": [
12 | {
13 | "ddd": 0,
14 | "ind": 2,
15 | "ty": 4,
16 | "nm": "Layer 63 Outlines",
17 | "sr": 1,
18 | "ks": {
19 | "o": {
20 | "a": 0,
21 | "k": 100,
22 | "ix": 11
23 | },
24 | "r": {
25 | "a": 0,
26 | "k": 90,
27 | "ix": 10
28 | },
29 | "p": {
30 | "a": 0,
31 | "k": [
32 | 10.5,
33 | 12.375,
34 | 0
35 | ],
36 | "ix": 2
37 | },
38 | "a": {
39 | "a": 0,
40 | "k": [
41 | 10.5,
42 | 12.99,
43 | 0
44 | ],
45 | "ix": 1
46 | },
47 | "s": {
48 | "a": 0,
49 | "k": [
50 | 86,
51 | 86,
52 | 100
53 | ],
54 | "ix": 6
55 | }
56 | },
57 | "ao": 0,
58 | "ef": [
59 | {
60 | "ty": 5,
61 | "nm": "Elastic Controller",
62 | "np": 5,
63 | "mn": "Pseudo/MDS Elastic Controller",
64 | "ix": 1,
65 | "en": 1,
66 | "ef": [
67 | {
68 | "ty": 0,
69 | "nm": "Amplitude",
70 | "mn": "Pseudo/MDS Elastic Controller-0001",
71 | "ix": 1,
72 | "v": {
73 | "a": 0,
74 | "k": 20,
75 | "ix": 1
76 | }
77 | },
78 | {
79 | "ty": 0,
80 | "nm": "Frequency",
81 | "mn": "Pseudo/MDS Elastic Controller-0002",
82 | "ix": 2,
83 | "v": {
84 | "a": 0,
85 | "k": 40,
86 | "ix": 2
87 | }
88 | },
89 | {
90 | "ty": 0,
91 | "nm": "Decay",
92 | "mn": "Pseudo/MDS Elastic Controller-0003",
93 | "ix": 3,
94 | "v": {
95 | "a": 0,
96 | "k": 60,
97 | "ix": 3
98 | }
99 | }
100 | ]
101 | }
102 | ],
103 | "shapes": [
104 | {
105 | "ty": "gr",
106 | "it": [
107 | {
108 | "ty": "gr",
109 | "it": [
110 | {
111 | "ind": 0,
112 | "ty": "sh",
113 | "ix": 1,
114 | "ks": {
115 | "a": 1,
116 | "k": [
117 | {
118 | "i": {
119 | "x": 0.45,
120 | "y": 1
121 | },
122 | "o": {
123 | "x": 0.55,
124 | "y": 0
125 | },
126 | "t": 6,
127 | "s": [
128 | {
129 | "i": [
130 | [
131 | 0,
132 | 0
133 | ],
134 | [
135 | 0,
136 | 0
137 | ]
138 | ],
139 | "o": [
140 | [
141 | 0,
142 | 0
143 | ],
144 | [
145 | 0,
146 | 0
147 | ]
148 | ],
149 | "v": [
150 | [
151 | 19.5,
152 | 15.76
153 | ],
154 | [
155 | 1.5,
156 | 15.76
157 | ]
158 | ],
159 | "c": false
160 | }
161 | ]
162 | },
163 | {
164 | "i": {
165 | "x": 0.833,
166 | "y": 1
167 | },
168 | "o": {
169 | "x": 0.167,
170 | "y": 0
171 | },
172 | "t": 17.2,
173 | "s": [
174 | {
175 | "i": [
176 | [
177 | 0,
178 | 0
179 | ],
180 | [
181 | 0,
182 | 0
183 | ]
184 | ],
185 | "o": [
186 | [
187 | 0,
188 | 0
189 | ],
190 | [
191 | 0,
192 | 0
193 | ]
194 | ],
195 | "v": [
196 | [
197 | 9.875,
198 | 15.749
199 | ],
200 | [
201 | 1.5,
202 | 15.76
203 | ]
204 | ],
205 | "c": false
206 | }
207 | ]
208 | },
209 | {
210 | "t": 27,
211 | "s": [
212 | {
213 | "i": [
214 | [
215 | 0,
216 | 0
217 | ],
218 | [
219 | 0,
220 | 0
221 | ]
222 | ],
223 | "o": [
224 | [
225 | 0,
226 | 0
227 | ],
228 | [
229 | 0,
230 | 0
231 | ]
232 | ],
233 | "v": [
234 | [
235 | 19.5,
236 | 15.76
237 | ],
238 | [
239 | 1.5,
240 | 15.76
241 | ]
242 | ],
243 | "c": false
244 | }
245 | ]
246 | }
247 | ],
248 | "ix": 2,
249 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
250 | },
251 | "nm": "Path 1",
252 | "mn": "ADBE Vector Shape - Group",
253 | "hd": false
254 | },
255 | {
256 | "ty": "st",
257 | "c": {
258 | "a": 0,
259 | "k": [
260 | 0.161000001197,
261 | 0.176000004189,
262 | 0.195999998205,
263 | 1
264 | ],
265 | "ix": 3
266 | },
267 | "o": {
268 | "a": 0,
269 | "k": 100,
270 | "ix": 4
271 | },
272 | "w": {
273 | "a": 0,
274 | "k": 1.5,
275 | "ix": 5
276 | },
277 | "lc": 2,
278 | "lj": 2,
279 | "bm": 0,
280 | "nm": "Stroke 1",
281 | "mn": "ADBE Vector Graphic - Stroke",
282 | "hd": false
283 | },
284 | {
285 | "ty": "tr",
286 | "p": {
287 | "a": 0,
288 | "k": [
289 | 0,
290 | 0
291 | ],
292 | "ix": 2
293 | },
294 | "a": {
295 | "a": 0,
296 | "k": [
297 | 0,
298 | 0
299 | ],
300 | "ix": 1
301 | },
302 | "s": {
303 | "a": 0,
304 | "k": [
305 | 100,
306 | 100
307 | ],
308 | "ix": 3
309 | },
310 | "r": {
311 | "a": 0,
312 | "k": 0,
313 | "ix": 6
314 | },
315 | "o": {
316 | "a": 0,
317 | "k": 100,
318 | "ix": 7
319 | },
320 | "sk": {
321 | "a": 0,
322 | "k": 0,
323 | "ix": 4
324 | },
325 | "sa": {
326 | "a": 0,
327 | "k": 0,
328 | "ix": 5
329 | },
330 | "nm": "Transform"
331 | }
332 | ],
333 | "nm": "Group 1",
334 | "np": 2,
335 | "cix": 2,
336 | "bm": 0,
337 | "ix": 1,
338 | "mn": "ADBE Vector Group",
339 | "hd": false
340 | },
341 | {
342 | "ty": "gr",
343 | "it": [
344 | {
345 | "ind": 0,
346 | "ty": "sh",
347 | "ix": 1,
348 | "ks": {
349 | "a": 1,
350 | "k": [
351 | {
352 | "i": {
353 | "x": 0.45,
354 | "y": 1
355 | },
356 | "o": {
357 | "x": 0.55,
358 | "y": 0
359 | },
360 | "t": 8,
361 | "s": [
362 | {
363 | "i": [
364 | [
365 | 0,
366 | 0
367 | ],
368 | [
369 | 0,
370 | 0
371 | ],
372 | [
373 | 0,
374 | 0
375 | ]
376 | ],
377 | "o": [
378 | [
379 | 0,
380 | 0
381 | ],
382 | [
383 | 0,
384 | 0
385 | ],
386 | [
387 | 0,
388 | 0
389 | ]
390 | ],
391 | "v": [
392 | [
393 | 1.86,
394 | -3.72
395 | ],
396 | [
397 | -1.86,
398 | 0
399 | ],
400 | [
401 | 1.86,
402 | 3.72
403 | ]
404 | ],
405 | "c": false
406 | }
407 | ]
408 | },
409 | {
410 | "i": {
411 | "x": 0.45,
412 | "y": 1
413 | },
414 | "o": {
415 | "x": 0.55,
416 | "y": 0
417 | },
418 | "t": 16,
419 | "s": [
420 | {
421 | "i": [
422 | [
423 | 0,
424 | 0
425 | ],
426 | [
427 | 0,
428 | 0
429 | ],
430 | [
431 | 0,
432 | 0
433 | ]
434 | ],
435 | "o": [
436 | [
437 | 0,
438 | 0
439 | ],
440 | [
441 | 0,
442 | 0
443 | ],
444 | [
445 | 0,
446 | 0
447 | ]
448 | ],
449 | "v": [
450 | [
451 | 2.11,
452 | 0.03
453 | ],
454 | [
455 | -1.86,
456 | 0
457 | ],
458 | [
459 | 2.079,
460 | 0.033
461 | ]
462 | ],
463 | "c": false
464 | }
465 | ]
466 | },
467 | {
468 | "t": 25,
469 | "s": [
470 | {
471 | "i": [
472 | [
473 | 0,
474 | 0
475 | ],
476 | [
477 | 0,
478 | 0
479 | ],
480 | [
481 | 0,
482 | 0
483 | ]
484 | ],
485 | "o": [
486 | [
487 | 0,
488 | 0
489 | ],
490 | [
491 | 0,
492 | 0
493 | ],
494 | [
495 | 0,
496 | 0
497 | ]
498 | ],
499 | "v": [
500 | [
501 | 1.86,
502 | -3.72
503 | ],
504 | [
505 | -1.86,
506 | 0
507 | ],
508 | [
509 | 1.86,
510 | 3.72
511 | ]
512 | ],
513 | "c": false
514 | }
515 | ]
516 | }
517 | ],
518 | "ix": 2,
519 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
520 | },
521 | "nm": "Path 1",
522 | "mn": "ADBE Vector Shape - Group",
523 | "hd": false
524 | },
525 | {
526 | "ty": "st",
527 | "c": {
528 | "a": 0,
529 | "k": [
530 | 0.161000001197,
531 | 0.176000004189,
532 | 0.195999998205,
533 | 1
534 | ],
535 | "ix": 3
536 | },
537 | "o": {
538 | "a": 0,
539 | "k": 100,
540 | "ix": 4
541 | },
542 | "w": {
543 | "a": 0,
544 | "k": 1.5,
545 | "ix": 5
546 | },
547 | "lc": 2,
548 | "lj": 2,
549 | "bm": 0,
550 | "nm": "Stroke 1",
551 | "mn": "ADBE Vector Graphic - Stroke",
552 | "hd": false
553 | },
554 | {
555 | "ty": "tr",
556 | "p": {
557 | "a": 0,
558 | "k": [
559 | 3.36,
560 | 15.76
561 | ],
562 | "ix": 2
563 | },
564 | "a": {
565 | "a": 0,
566 | "k": [
567 | 0,
568 | 0
569 | ],
570 | "ix": 1
571 | },
572 | "s": {
573 | "a": 0,
574 | "k": [
575 | 100,
576 | 100
577 | ],
578 | "ix": 3
579 | },
580 | "r": {
581 | "a": 0,
582 | "k": 0,
583 | "ix": 6
584 | },
585 | "o": {
586 | "a": 0,
587 | "k": 100,
588 | "ix": 7
589 | },
590 | "sk": {
591 | "a": 0,
592 | "k": 0,
593 | "ix": 4
594 | },
595 | "sa": {
596 | "a": 0,
597 | "k": 0,
598 | "ix": 5
599 | },
600 | "nm": "Transform"
601 | }
602 | ],
603 | "nm": "Group 2",
604 | "np": 2,
605 | "cix": 2,
606 | "bm": 0,
607 | "ix": 2,
608 | "mn": "ADBE Vector Group",
609 | "hd": false
610 | },
611 | {
612 | "ty": "tr",
613 | "p": {
614 | "a": 1,
615 | "k": [
616 | {
617 | "i": {
618 | "x": 0.45,
619 | "y": 1
620 | },
621 | "o": {
622 | "x": 0.55,
623 | "y": 0
624 | },
625 | "t": 10,
626 | "s": [
627 | 5.688,
628 | 18
629 | ],
630 | "to": [
631 | 0,
632 | -1.207
633 | ],
634 | "ti": [
635 | 0,
636 | 0
637 | ]
638 | },
639 | {
640 | "i": {
641 | "x": 0.833,
642 | "y": 0.833
643 | },
644 | "o": {
645 | "x": 0.55,
646 | "y": 0
647 | },
648 | "t": 20,
649 | "s": [
650 | 5.688,
651 | 10.76
652 | ],
653 | "to": [
654 | 0,
655 | 0
656 | ],
657 | "ti": [
658 | 0,
659 | -1.207
660 | ]
661 | },
662 | {
663 | "t": 29,
664 | "s": [
665 | 5.688,
666 | 18
667 | ]
668 | }
669 | ],
670 | "ix": 2,
671 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
672 | },
673 | "a": {
674 | "a": 0,
675 | "k": [
676 | 5.688,
677 | 15.76
678 | ],
679 | "ix": 1,
680 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller 2')(1), 200);\n freq = $bm_div(effect('Elastic Controller 2')(2), 30);\n decay = $bm_div(effect('Elastic Controller 2')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
681 | },
682 | "s": {
683 | "a": 0,
684 | "k": [
685 | 100,
686 | 100
687 | ],
688 | "ix": 3,
689 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller 2')(1), 200);\n freq = $bm_div(effect('Elastic Controller 2')(2), 30);\n decay = $bm_div(effect('Elastic Controller 2')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
690 | },
691 | "r": {
692 | "a": 0,
693 | "k": 0,
694 | "ix": 6
695 | },
696 | "o": {
697 | "a": 0,
698 | "k": 100,
699 | "ix": 7
700 | },
701 | "sk": {
702 | "a": 0,
703 | "k": 0,
704 | "ix": 4
705 | },
706 | "sa": {
707 | "a": 0,
708 | "k": 0,
709 | "ix": 5
710 | },
711 | "nm": "Transform"
712 | }
713 | ],
714 | "nm": "Group 5",
715 | "np": 2,
716 | "cix": 2,
717 | "bm": 0,
718 | "ix": 1,
719 | "mn": "ADBE Vector Group",
720 | "hd": false
721 | },
722 | {
723 | "ty": "gr",
724 | "it": [
725 | {
726 | "ty": "gr",
727 | "it": [
728 | {
729 | "ind": 0,
730 | "ty": "sh",
731 | "ix": 1,
732 | "ks": {
733 | "a": 1,
734 | "k": [
735 | {
736 | "i": {
737 | "x": 0.45,
738 | "y": 1
739 | },
740 | "o": {
741 | "x": 0.55,
742 | "y": 0
743 | },
744 | "t": 6,
745 | "s": [
746 | {
747 | "i": [
748 | [
749 | 0,
750 | 0
751 | ],
752 | [
753 | 0,
754 | 0
755 | ]
756 | ],
757 | "o": [
758 | [
759 | 0,
760 | 0
761 | ],
762 | [
763 | 0,
764 | 0
765 | ]
766 | ],
767 | "v": [
768 | [
769 | 1.5,
770 | 5.22
771 | ],
772 | [
773 | 19.5,
774 | 5.22
775 | ]
776 | ],
777 | "c": false
778 | }
779 | ]
780 | },
781 | {
782 | "i": {
783 | "x": 0.45,
784 | "y": 1
785 | },
786 | "o": {
787 | "x": 0.55,
788 | "y": 0
789 | },
790 | "t": 17.2,
791 | "s": [
792 | {
793 | "i": [
794 | [
795 | 0,
796 | 0
797 | ],
798 | [
799 | 0,
800 | 0
801 | ]
802 | ],
803 | "o": [
804 | [
805 | 0,
806 | 0
807 | ],
808 | [
809 | 0,
810 | 0
811 | ]
812 | ],
813 | "v": [
814 | [
815 | 10.156,
816 | 5.231
817 | ],
818 | [
819 | 19.5,
820 | 5.22
821 | ]
822 | ],
823 | "c": false
824 | }
825 | ]
826 | },
827 | {
828 | "t": 27,
829 | "s": [
830 | {
831 | "i": [
832 | [
833 | 0,
834 | 0
835 | ],
836 | [
837 | 0,
838 | 0
839 | ]
840 | ],
841 | "o": [
842 | [
843 | 0,
844 | 0
845 | ],
846 | [
847 | 0,
848 | 0
849 | ]
850 | ],
851 | "v": [
852 | [
853 | 1.5,
854 | 5.22
855 | ],
856 | [
857 | 19.5,
858 | 5.22
859 | ]
860 | ],
861 | "c": false
862 | }
863 | ]
864 | }
865 | ],
866 | "ix": 2,
867 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
868 | },
869 | "nm": "Path 1",
870 | "mn": "ADBE Vector Shape - Group",
871 | "hd": false
872 | },
873 | {
874 | "ty": "st",
875 | "c": {
876 | "a": 0,
877 | "k": [
878 | 0.161000001197,
879 | 0.176000004189,
880 | 0.195999998205,
881 | 1
882 | ],
883 | "ix": 3
884 | },
885 | "o": {
886 | "a": 0,
887 | "k": 100,
888 | "ix": 4
889 | },
890 | "w": {
891 | "a": 0,
892 | "k": 1.5,
893 | "ix": 5
894 | },
895 | "lc": 2,
896 | "lj": 2,
897 | "bm": 0,
898 | "nm": "Stroke 1",
899 | "mn": "ADBE Vector Graphic - Stroke",
900 | "hd": false
901 | },
902 | {
903 | "ty": "tr",
904 | "p": {
905 | "a": 0,
906 | "k": [
907 | 0,
908 | 0
909 | ],
910 | "ix": 2
911 | },
912 | "a": {
913 | "a": 0,
914 | "k": [
915 | 0,
916 | 0
917 | ],
918 | "ix": 1
919 | },
920 | "s": {
921 | "a": 0,
922 | "k": [
923 | 100,
924 | 100
925 | ],
926 | "ix": 3
927 | },
928 | "r": {
929 | "a": 0,
930 | "k": 0,
931 | "ix": 6
932 | },
933 | "o": {
934 | "a": 0,
935 | "k": 100,
936 | "ix": 7
937 | },
938 | "sk": {
939 | "a": 0,
940 | "k": 0,
941 | "ix": 4
942 | },
943 | "sa": {
944 | "a": 0,
945 | "k": 0,
946 | "ix": 5
947 | },
948 | "nm": "Transform"
949 | }
950 | ],
951 | "nm": "Group 3",
952 | "np": 2,
953 | "cix": 2,
954 | "bm": 0,
955 | "ix": 1,
956 | "mn": "ADBE Vector Group",
957 | "hd": false
958 | },
959 | {
960 | "ty": "gr",
961 | "it": [
962 | {
963 | "ind": 0,
964 | "ty": "sh",
965 | "ix": 1,
966 | "ks": {
967 | "a": 1,
968 | "k": [
969 | {
970 | "i": {
971 | "x": 0.45,
972 | "y": 1
973 | },
974 | "o": {
975 | "x": 0.55,
976 | "y": 0
977 | },
978 | "t": 10,
979 | "s": [
980 | {
981 | "i": [
982 | [
983 | 0,
984 | 0
985 | ],
986 | [
987 | 0,
988 | 0
989 | ],
990 | [
991 | 0,
992 | 0
993 | ]
994 | ],
995 | "o": [
996 | [
997 | 0,
998 | 0
999 | ],
1000 | [
1001 | 0,
1002 | 0
1003 | ],
1004 | [
1005 | 0,
1006 | 0
1007 | ]
1008 | ],
1009 | "v": [
1010 | [
1011 | -1.86,
1012 | 3.72
1013 | ],
1014 | [
1015 | 1.86,
1016 | 0
1017 | ],
1018 | [
1019 | -1.86,
1020 | -3.72
1021 | ]
1022 | ],
1023 | "c": false
1024 | }
1025 | ]
1026 | },
1027 | {
1028 | "i": {
1029 | "x": 0.45,
1030 | "y": 1
1031 | },
1032 | "o": {
1033 | "x": 0.55,
1034 | "y": 0
1035 | },
1036 | "t": 19,
1037 | "s": [
1038 | {
1039 | "i": [
1040 | [
1041 | 0,
1042 | 0
1043 | ],
1044 | [
1045 | 0,
1046 | 0
1047 | ],
1048 | [
1049 | 0,
1050 | 0
1051 | ]
1052 | ],
1053 | "o": [
1054 | [
1055 | 0,
1056 | 0
1057 | ],
1058 | [
1059 | 0,
1060 | 0
1061 | ],
1062 | [
1063 | 0,
1064 | 0
1065 | ]
1066 | ],
1067 | "v": [
1068 | [
1069 | -3.172,
1070 | 0.032
1071 | ],
1072 | [
1073 | 1.86,
1074 | 0
1075 | ],
1076 | [
1077 | -3.172,
1078 | 0.061
1079 | ]
1080 | ],
1081 | "c": false
1082 | }
1083 | ]
1084 | },
1085 | {
1086 | "t": 28,
1087 | "s": [
1088 | {
1089 | "i": [
1090 | [
1091 | 0,
1092 | 0
1093 | ],
1094 | [
1095 | 0,
1096 | 0
1097 | ],
1098 | [
1099 | 0,
1100 | 0
1101 | ]
1102 | ],
1103 | "o": [
1104 | [
1105 | 0,
1106 | 0
1107 | ],
1108 | [
1109 | 0,
1110 | 0
1111 | ],
1112 | [
1113 | 0,
1114 | 0
1115 | ]
1116 | ],
1117 | "v": [
1118 | [
1119 | -1.86,
1120 | 3.72
1121 | ],
1122 | [
1123 | 1.86,
1124 | 0
1125 | ],
1126 | [
1127 | -1.86,
1128 | -3.72
1129 | ]
1130 | ],
1131 | "c": false
1132 | }
1133 | ]
1134 | }
1135 | ],
1136 | "ix": 2,
1137 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
1138 | },
1139 | "nm": "Path 1",
1140 | "mn": "ADBE Vector Shape - Group",
1141 | "hd": false
1142 | },
1143 | {
1144 | "ty": "st",
1145 | "c": {
1146 | "a": 0,
1147 | "k": [
1148 | 0.161000001197,
1149 | 0.176000004189,
1150 | 0.195999998205,
1151 | 1
1152 | ],
1153 | "ix": 3
1154 | },
1155 | "o": {
1156 | "a": 0,
1157 | "k": 100,
1158 | "ix": 4
1159 | },
1160 | "w": {
1161 | "a": 0,
1162 | "k": 1.5,
1163 | "ix": 5
1164 | },
1165 | "lc": 2,
1166 | "lj": 2,
1167 | "bm": 0,
1168 | "nm": "Stroke 1",
1169 | "mn": "ADBE Vector Graphic - Stroke",
1170 | "hd": false
1171 | },
1172 | {
1173 | "ty": "tr",
1174 | "p": {
1175 | "a": 0,
1176 | "k": [
1177 | 17.64,
1178 | 5.22
1179 | ],
1180 | "ix": 2
1181 | },
1182 | "a": {
1183 | "a": 0,
1184 | "k": [
1185 | 0,
1186 | 0
1187 | ],
1188 | "ix": 1
1189 | },
1190 | "s": {
1191 | "a": 0,
1192 | "k": [
1193 | 100,
1194 | 100
1195 | ],
1196 | "ix": 3
1197 | },
1198 | "r": {
1199 | "a": 0,
1200 | "k": 0,
1201 | "ix": 6
1202 | },
1203 | "o": {
1204 | "a": 0,
1205 | "k": 100,
1206 | "ix": 7
1207 | },
1208 | "sk": {
1209 | "a": 0,
1210 | "k": 0,
1211 | "ix": 4
1212 | },
1213 | "sa": {
1214 | "a": 0,
1215 | "k": 0,
1216 | "ix": 5
1217 | },
1218 | "nm": "Transform"
1219 | }
1220 | ],
1221 | "nm": "Group 4",
1222 | "np": 2,
1223 | "cix": 2,
1224 | "bm": 0,
1225 | "ix": 2,
1226 | "mn": "ADBE Vector Group",
1227 | "hd": false
1228 | },
1229 | {
1230 | "ty": "tr",
1231 | "p": {
1232 | "a": 1,
1233 | "k": [
1234 | {
1235 | "i": {
1236 | "x": 0.667,
1237 | "y": 1
1238 | },
1239 | "o": {
1240 | "x": 0.333,
1241 | "y": 0
1242 | },
1243 | "t": 11,
1244 | "s": [
1245 | 14.828,
1246 | 5.22
1247 | ],
1248 | "to": [
1249 | 0,
1250 | 1.667
1251 | ],
1252 | "ti": [
1253 | 0,
1254 | 0
1255 | ]
1256 | },
1257 | {
1258 | "i": {
1259 | "x": 0.833,
1260 | "y": 0.833
1261 | },
1262 | "o": {
1263 | "x": 0.333,
1264 | "y": 0
1265 | },
1266 | "t": 20,
1267 | "s": [
1268 | 14.828,
1269 | 15.22
1270 | ],
1271 | "to": [
1272 | 0,
1273 | 0
1274 | ],
1275 | "ti": [
1276 | 0,
1277 | 1.667
1278 | ]
1279 | },
1280 | {
1281 | "t": 29,
1282 | "s": [
1283 | 14.828,
1284 | 5.22
1285 | ]
1286 | }
1287 | ],
1288 | "ix": 2,
1289 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
1290 | },
1291 | "a": {
1292 | "a": 0,
1293 | "k": [
1294 | 14.828,
1295 | 5.22
1296 | ],
1297 | "ix": 1,
1298 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
1299 | },
1300 | "s": {
1301 | "a": 0,
1302 | "k": [
1303 | 100,
1304 | 100
1305 | ],
1306 | "ix": 3,
1307 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
1308 | },
1309 | "r": {
1310 | "a": 0,
1311 | "k": 0,
1312 | "ix": 6
1313 | },
1314 | "o": {
1315 | "a": 0,
1316 | "k": 100,
1317 | "ix": 7
1318 | },
1319 | "sk": {
1320 | "a": 0,
1321 | "k": 0,
1322 | "ix": 4,
1323 | "x": "var $bm_rt;\nvar amp, freq, decay, n, n, t, t, v;\ntry {\n amp = $bm_div(effect('Elastic Controller')(1), 200);\n freq = $bm_div(effect('Elastic Controller')(2), 30);\n decay = $bm_div(effect('Elastic Controller')(3), 10);\n $bm_rt = n = 0;\n if (numKeys > 0) {\n $bm_rt = n = nearestKey(time).index;\n if (key(n).time > time) {\n n--;\n }\n }\n if (n == 0) {\n $bm_rt = t = 0;\n } else {\n $bm_rt = t = $bm_sub(time, key(n).time);\n }\n if (n > 0) {\n v = velocityAtTime($bm_sub(key(n).time, $bm_div(thisComp.frameDuration, 10)));\n $bm_rt = $bm_sum(value, $bm_div($bm_mul($bm_mul(v, amp), Math.sin($bm_mul($bm_mul($bm_mul(freq, t), 2), Math.PI))), Math.exp($bm_mul(decay, t))));\n } else {\n $bm_rt = value;\n }\n} catch (e$$4) {\n $bm_rt = value = value;\n}"
1324 | },
1325 | "sa": {
1326 | "a": 0,
1327 | "k": 0,
1328 | "ix": 5
1329 | },
1330 | "nm": "Transform"
1331 | }
1332 | ],
1333 | "nm": "Group 6",
1334 | "np": 2,
1335 | "cix": 2,
1336 | "bm": 0,
1337 | "ix": 2,
1338 | "mn": "ADBE Vector Group",
1339 | "hd": false
1340 | }
1341 | ],
1342 | "ip": 0,
1343 | "op": 40,
1344 | "st": 0,
1345 | "bm": 0
1346 | }
1347 | ],
1348 | "markers": []
1349 | }
--------------------------------------------------------------------------------