├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md └── workflows │ └── dart.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── assets ├── custom_drawer.gif ├── custom_drawer.png ├── design_course.gif ├── fitness_app.gif ├── hotel_booking.gif └── introduction_animation.gif └── best_flutter_ui_templates ├── .gitignore ├── .metadata ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── best_flutter_ui_templates │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── design_course │ ├── design_course.png │ ├── interFace1.png │ ├── interFace2.png │ ├── interFace3.png │ ├── interFace4.png │ ├── userImage.png │ └── webInterFace.png ├── fitness_app │ ├── area1.png │ ├── area2.png │ ├── area3.png │ ├── back.png │ ├── bell.png │ ├── bottle.png │ ├── breakfast.png │ ├── burned.png │ ├── dinner.png │ ├── eaten.png │ ├── fitness_app.png │ ├── glass.png │ ├── lunch.png │ ├── runner.png │ ├── snack.png │ ├── tab_1.png │ ├── tab_1s.png │ ├── tab_2.png │ ├── tab_2s.png │ ├── tab_3.png │ ├── tab_3s.png │ ├── tab_4.png │ └── tab_4s.png ├── fonts │ ├── Roboto-Bold.ttf │ ├── Roboto-Medium.ttf │ ├── Roboto-Regular.ttf │ ├── WorkSans-Bold.ttf │ ├── WorkSans-Medium.ttf │ ├── WorkSans-Regular.ttf │ └── WorkSans-SemiBold.ttf ├── hotel │ ├── hotel_1.png │ ├── hotel_2.png │ ├── hotel_3.png │ ├── hotel_4.png │ ├── hotel_5.png │ └── hotel_booking.png ├── images │ ├── feedbackImage.png │ ├── helpImage.png │ ├── inviteImage.png │ ├── supportIcon.png │ └── userImage.png └── introduction_animation │ ├── care_image.png │ ├── introduction_animation.png │ ├── introduction_image.png │ ├── mood_dairy_image.png │ ├── relax_image.png │ └── welcome.png ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── app_theme.dart ├── custom_drawer │ ├── drawer_user_controller.dart │ └── home_drawer.dart ├── design_course │ ├── category_list_view.dart │ ├── course_info_screen.dart │ ├── design_course_app_theme.dart │ ├── home_design_course.dart │ ├── models │ │ └── category.dart │ └── popular_course_list_view.dart ├── feedback_screen.dart ├── fitness_app │ ├── bottom_navigation_view │ │ └── bottom_bar_view.dart │ ├── fitness_app_home_screen.dart │ ├── fitness_app_theme.dart │ ├── models │ │ ├── meals_list_data.dart │ │ └── tabIcon_data.dart │ ├── my_diary │ │ ├── meals_list_view.dart │ │ ├── my_diary_screen.dart │ │ └── water_view.dart │ ├── training │ │ └── training_screen.dart │ └── ui_view │ │ ├── area_list_view.dart │ │ ├── body_measurement.dart │ │ ├── glass_view.dart │ │ ├── mediterranean_diet_view.dart │ │ ├── running_view.dart │ │ ├── title_view.dart │ │ ├── wave_view.dart │ │ └── workout_view.dart ├── help_screen.dart ├── home_screen.dart ├── hotel_booking │ ├── calendar_popup_view.dart │ ├── custom_calendar.dart │ ├── filters_screen.dart │ ├── hotel_app_theme.dart │ ├── hotel_home_screen.dart │ ├── hotel_list_view.dart │ ├── model │ │ ├── hotel_list_data.dart │ │ └── popular_filter_list.dart │ ├── range_slider_view.dart │ └── slider_view.dart ├── introduction_animation │ ├── components │ │ ├── care_view.dart │ │ ├── center_next_button.dart │ │ ├── mood_diary_vew.dart │ │ ├── relax_view.dart │ │ ├── splash_view.dart │ │ ├── top_back_skip_view.dart │ │ └── welcome_view.dart │ └── introduction_animation_screen.dart ├── invite_friend_screen.dart ├── main.dart ├── model │ └── homelist.dart └── navigation_home_screen.dart ├── pubspec.lock ├── pubspec.yaml └── test └── widget_test.dart /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/dart.yml: -------------------------------------------------------------------------------- 1 | name: Dart CI 2 | 3 | on: push 4 | # push: 5 | # branches: [ master ] 6 | # pull_request: 7 | # branches: [ master ] 8 | 9 | env: 10 | flutter_channel: 'stable' # or: 'dev' or 'beta' 11 | flutter_version: '2.2.2' 12 | 13 | jobs: 14 | build: 15 | 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - uses: actions/checkout@v3 20 | 21 | - uses: subosito/flutter-action@v2 22 | with: 23 | channel: 'stable' # or: 'beta', 'dev' or 'master' 24 | 25 | - uses: actions/setup-java@v1 26 | with: 27 | java-version: '12.x' 28 | 29 | - run: flutter pub get 30 | working-directory: best_flutter_ui_templates 31 | # - run: flutter test 32 | 33 | - name: build APK 34 | run: flutter build apk 35 | working-directory: best_flutter_ui_templates 36 | 37 | - name: upload APK 38 | uses: actions/upload-artifact@v1 39 | with: 40 | name: apk 41 | path: best_flutter_ui_templates/build/app/outputs/apk/release/app-release.apk 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | photos 2 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at miteshchodvadiya1994@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright © 2019 Mitesh Chodvadiya 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or modified 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | Finally, this software is helping the developer to solve their project issue and 24 | learning, it's free but doesn't mean to sell and earning, please respect the 25 | developer community. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Best-Flutter-UI-Templates 2 | 3 | completely free for everyone. Its build-in Flutter Dart. 4 | 5 | 6 | 7 | ![Image](best_flutter_ui_templates/assets/introduction_animation/introduction_animation.png) 8 | ![Image](best_flutter_ui_templates/assets/hotel/hotel_booking.png) 9 | ![Image](best_flutter_ui_templates/assets/fitness_app/fitness_app.png) 10 | ![Image](assets/custom_drawer.png) 11 | ![Image](best_flutter_ui_templates/assets/design_course/design_course.png) 12 | 13 | ### Some Screenshots 14 | 15 | 16 | -------------------------------------------------------------------------------- /assets/custom_drawer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/assets/custom_drawer.gif -------------------------------------------------------------------------------- /assets/custom_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/assets/custom_drawer.png -------------------------------------------------------------------------------- /assets/design_course.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/assets/design_course.gif -------------------------------------------------------------------------------- /assets/fitness_app.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/assets/fitness_app.gif -------------------------------------------------------------------------------- /assets/hotel_booking.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/assets/hotel_booking.gif -------------------------------------------------------------------------------- /assets/introduction_animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/assets/introduction_animation.gif -------------------------------------------------------------------------------- /best_flutter_ui_templates/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Exceptions to above rules. 43 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 44 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: e6b34c2b5c96bb95325269a29a84e83ed8909b5f 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/README.md: -------------------------------------------------------------------------------- 1 | # best_flutter_ui_templates 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 | 30 | compileSdkVersion flutter.compileSdkVersion 31 | ndkVersion flutter.ndkVersion 32 | 33 | compileOptions { 34 | sourceCompatibility JavaVersion.VERSION_1_8 35 | targetCompatibility JavaVersion.VERSION_1_8 36 | } 37 | 38 | kotlinOptions { 39 | jvmTarget = '1.8' 40 | } 41 | 42 | sourceSets { 43 | main.java.srcDirs += 'src/main/kotlin' 44 | } 45 | 46 | defaultConfig { 47 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 48 | applicationId "com.example.best_flutter_ui_templates" 49 | minSdkVersion flutter.minSdkVersion 50 | targetSdkVersion flutter.targetSdkVersion 51 | versionCode flutterVersionCode.toInteger() 52 | versionName flutterVersionName 53 | } 54 | 55 | buildTypes { 56 | release { 57 | // TODO: Add your own signing config for the release build. 58 | // Signing with the debug keys for now, so `flutter run --release` works. 59 | signingConfig signingConfigs.debug 60 | } 61 | } 62 | } 63 | 64 | flutter { 65 | source '../..' 66 | } 67 | 68 | dependencies { 69 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 70 | } 71 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 20 | 24 | 29 | 30 | 35 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/kotlin/com/example/best_flutter_ui_templates/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.best_flutter_ui_templates 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.6.10' 3 | repositories { 4 | google() 5 | jcenter() 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 | jcenter() 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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip 7 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/design_course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/design_course.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/interFace1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/interFace1.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/interFace2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/interFace2.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/interFace3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/interFace3.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/interFace4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/interFace4.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/userImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/userImage.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/design_course/webInterFace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/design_course/webInterFace.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/area1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/area1.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/area2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/area2.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/area3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/area3.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/back.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/bell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/bell.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/bottle.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/breakfast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/breakfast.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/burned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/burned.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/dinner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/dinner.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/eaten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/eaten.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/fitness_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/fitness_app.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/glass.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/lunch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/lunch.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/runner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/runner.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/snack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/snack.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_1.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_1s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_1s.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_2.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_2s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_2s.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_3.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_3s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_3s.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_4.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fitness_app/tab_4s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fitness_app/tab_4s.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/WorkSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/WorkSans-Bold.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/WorkSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/WorkSans-Medium.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/WorkSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/WorkSans-Regular.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/fonts/WorkSans-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/fonts/WorkSans-SemiBold.ttf -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/hotel/hotel_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/hotel/hotel_1.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/hotel/hotel_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/hotel/hotel_2.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/hotel/hotel_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/hotel/hotel_3.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/hotel/hotel_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/hotel/hotel_4.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/hotel/hotel_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/hotel/hotel_5.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/hotel/hotel_booking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/hotel/hotel_booking.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/images/feedbackImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/images/feedbackImage.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/images/helpImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/images/helpImage.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/images/inviteImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/images/inviteImage.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/images/supportIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/images/supportIcon.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/images/userImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/images/userImage.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/introduction_animation/care_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/introduction_animation/care_image.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/introduction_animation/introduction_animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/introduction_animation/introduction_animation.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/introduction_animation/introduction_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/introduction_animation/introduction_image.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/introduction_animation/mood_dairy_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/introduction_animation/mood_dairy_image.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/introduction_animation/relax_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/introduction_animation/relax_image.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/assets/introduction_animation/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/assets/introduction_animation/welcome.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitesh77/Best-Flutter-UI-Templates/f7c9e314c313361f9ecf4241cc1bb43e82319f58/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /best_flutter_ui_templates/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. -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleDisplayName 10 | Best Flutter UI Templates 11 | CFBundleExecutable 12 | $(EXECUTABLE_NAME) 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | best_flutter_ui_templates 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | $(FLUTTER_BUILD_NAME) 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | $(FLUTTER_BUILD_NUMBER) 27 | LSRequiresIPhoneOS 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UIViewControllerBasedStatusBarAppearance 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/app_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppTheme { 4 | AppTheme._(); 5 | 6 | static const Color notWhite = Color(0xFFEDF0F2); 7 | static const Color nearlyWhite = Color(0xFFFEFEFE); 8 | static const Color white = Color(0xFFFFFFFF); 9 | static const Color nearlyBlack = Color(0xFF213333); 10 | static const Color grey = Color(0xFF3A5160); 11 | static const Color dark_grey = Color(0xFF313A44); 12 | 13 | static const Color darkText = Color(0xFF253840); 14 | static const Color darkerText = Color(0xFF17262A); 15 | static const Color lightText = Color(0xFF4A6572); 16 | static const Color deactivatedText = Color(0xFF767676); 17 | static const Color dismissibleBackground = Color(0xFF364A54); 18 | static const Color chipBackground = Color(0xFFEEF1F3); 19 | static const Color spacer = Color(0xFFF2F2F2); 20 | static const String fontName = 'WorkSans'; 21 | 22 | static const TextTheme textTheme = TextTheme( 23 | headline4: display1, 24 | headline5: headline, 25 | headline6: title, 26 | subtitle2: subtitle, 27 | bodyText2: body2, 28 | bodyText1: body1, 29 | caption: caption, 30 | ); 31 | 32 | static const TextStyle display1 = TextStyle( // h4 -> display1 33 | fontFamily: fontName, 34 | fontWeight: FontWeight.bold, 35 | fontSize: 36, 36 | letterSpacing: 0.4, 37 | height: 0.9, 38 | color: darkerText, 39 | ); 40 | 41 | static const TextStyle headline = TextStyle( // h5 -> headline 42 | fontFamily: fontName, 43 | fontWeight: FontWeight.bold, 44 | fontSize: 24, 45 | letterSpacing: 0.27, 46 | color: darkerText, 47 | ); 48 | 49 | static const TextStyle title = TextStyle( // h6 -> title 50 | fontFamily: fontName, 51 | fontWeight: FontWeight.bold, 52 | fontSize: 16, 53 | letterSpacing: 0.18, 54 | color: darkerText, 55 | ); 56 | 57 | static const TextStyle subtitle = TextStyle( // subtitle2 -> subtitle 58 | fontFamily: fontName, 59 | fontWeight: FontWeight.w400, 60 | fontSize: 14, 61 | letterSpacing: -0.04, 62 | color: darkText, 63 | ); 64 | 65 | static const TextStyle body2 = TextStyle( // body1 -> body2 66 | fontFamily: fontName, 67 | fontWeight: FontWeight.w400, 68 | fontSize: 14, 69 | letterSpacing: 0.2, 70 | color: darkText, 71 | ); 72 | 73 | static const TextStyle body1 = TextStyle( // body2 -> body1 74 | fontFamily: fontName, 75 | fontWeight: FontWeight.w400, 76 | fontSize: 16, 77 | letterSpacing: -0.05, 78 | color: darkText, 79 | ); 80 | 81 | static const TextStyle caption = TextStyle( // Caption -> caption 82 | fontFamily: fontName, 83 | fontWeight: FontWeight.w400, 84 | fontSize: 12, 85 | letterSpacing: 0.2, 86 | color: lightText, // was lightText 87 | ); 88 | 89 | } 90 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/custom_drawer/drawer_user_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/app_theme.dart'; 2 | import 'package:best_flutter_ui_templates/custom_drawer/home_drawer.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class DrawerUserController extends StatefulWidget { 6 | const DrawerUserController({ 7 | Key? key, 8 | this.drawerWidth = 250, 9 | this.onDrawerCall, 10 | this.screenView, 11 | this.animatedIconData = AnimatedIcons.arrow_menu, 12 | this.menuView, 13 | this.drawerIsOpen, 14 | this.screenIndex, 15 | }) : super(key: key); 16 | 17 | final double drawerWidth; 18 | final Function(DrawerIndex)? onDrawerCall; 19 | final Widget? screenView; 20 | final Function(bool)? drawerIsOpen; 21 | final AnimatedIconData? animatedIconData; 22 | final Widget? menuView; 23 | final DrawerIndex? screenIndex; 24 | 25 | @override 26 | _DrawerUserControllerState createState() => _DrawerUserControllerState(); 27 | } 28 | 29 | class _DrawerUserControllerState extends State 30 | with TickerProviderStateMixin { 31 | ScrollController? scrollController; 32 | AnimationController? iconAnimationController; 33 | AnimationController? animationController; 34 | 35 | double scrolloffset = 0.0; 36 | 37 | @override 38 | void initState() { 39 | animationController = AnimationController( 40 | duration: const Duration(milliseconds: 2000), vsync: this); 41 | iconAnimationController = AnimationController( 42 | vsync: this, duration: const Duration(milliseconds: 0)); 43 | iconAnimationController 44 | ?..animateTo(1.0, 45 | duration: const Duration(milliseconds: 0), 46 | curve: Curves.fastOutSlowIn); 47 | scrollController = 48 | ScrollController(initialScrollOffset: widget.drawerWidth); 49 | scrollController! 50 | ..addListener(() { 51 | if (scrollController!.offset <= 0) { 52 | if (scrolloffset != 1.0) { 53 | setState(() { 54 | scrolloffset = 1.0; 55 | try { 56 | widget.drawerIsOpen!(true); 57 | } catch (_) {} 58 | }); 59 | } 60 | iconAnimationController?.animateTo(0.0, 61 | duration: const Duration(milliseconds: 0), 62 | curve: Curves.fastOutSlowIn); 63 | } else if (scrollController!.offset > 0 && 64 | scrollController!.offset < widget.drawerWidth.floor()) { 65 | iconAnimationController?.animateTo( 66 | (scrollController!.offset * 100 / (widget.drawerWidth)) / 100, 67 | duration: const Duration(milliseconds: 0), 68 | curve: Curves.fastOutSlowIn); 69 | } else { 70 | if (scrolloffset != 0.0) { 71 | setState(() { 72 | scrolloffset = 0.0; 73 | try { 74 | widget.drawerIsOpen!(false); 75 | } catch (_) {} 76 | }); 77 | } 78 | iconAnimationController?.animateTo(1.0, 79 | duration: const Duration(milliseconds: 0), 80 | curve: Curves.fastOutSlowIn); 81 | } 82 | }); 83 | WidgetsBinding.instance.addPostFrameCallback((_) => getInitState()); 84 | super.initState(); 85 | } 86 | 87 | Future getInitState() async { 88 | scrollController?.jumpTo( 89 | widget.drawerWidth, 90 | ); 91 | return true; 92 | } 93 | 94 | @override 95 | Widget build(BuildContext context) { 96 | var brightness = MediaQuery.of(context).platformBrightness; 97 | bool isLightMode = brightness == Brightness.light; 98 | return Scaffold( 99 | backgroundColor: isLightMode ? AppTheme.white : AppTheme.nearlyBlack, 100 | body: SingleChildScrollView( 101 | controller: scrollController, 102 | scrollDirection: Axis.horizontal, 103 | physics: const PageScrollPhysics(parent: ClampingScrollPhysics()), 104 | child: SizedBox( 105 | height: MediaQuery.of(context).size.height, 106 | width: MediaQuery.of(context).size.width + widget.drawerWidth, 107 | //we use with as screen width and add drawerWidth (from navigation_home_screen) 108 | child: Row( 109 | children: [ 110 | SizedBox( 111 | width: widget.drawerWidth, 112 | //we divided first drawer Width with HomeDrawer and second full-screen Width with all home screen, we called screen View 113 | height: MediaQuery.of(context).size.height, 114 | child: AnimatedBuilder( 115 | animation: iconAnimationController!, 116 | builder: (BuildContext context, Widget? child) { 117 | return Transform( 118 | //transform we use for the stable drawer we, not need to move with scroll view 119 | transform: Matrix4.translationValues( 120 | scrollController!.offset, 0.0, 0.0), 121 | child: HomeDrawer( 122 | screenIndex: widget.screenIndex == null 123 | ? DrawerIndex.HOME 124 | : widget.screenIndex, 125 | iconAnimationController: iconAnimationController, 126 | callBackIndex: (DrawerIndex indexType) { 127 | onDrawerClick(); 128 | try { 129 | widget.onDrawerCall!(indexType); 130 | } catch (e) {} 131 | }, 132 | ), 133 | ); 134 | }, 135 | ), 136 | ), 137 | SizedBox( 138 | width: MediaQuery.of(context).size.width, 139 | height: MediaQuery.of(context).size.height, 140 | //full-screen Width with widget.screenView 141 | child: Container( 142 | decoration: BoxDecoration( 143 | color: AppTheme.white, 144 | boxShadow: [ 145 | BoxShadow( 146 | color: AppTheme.grey.withOpacity(0.6), 147 | blurRadius: 24), 148 | ], 149 | ), 150 | child: Stack( 151 | children: [ 152 | //this IgnorePointer we use as touch(user Interface) widget.screen View, for example scrolloffset == 1 means drawer is close we just allow touching all widget.screen View 153 | IgnorePointer( 154 | ignoring: scrolloffset == 1 || false, 155 | child: widget.screenView, 156 | ), 157 | //alternative touch(user Interface) for widget.screen, for example, drawer is close we need to tap on a few home screen area and close the drawer 158 | if (scrolloffset == 1.0) 159 | InkWell( 160 | onTap: () { 161 | onDrawerClick(); 162 | }, 163 | ), 164 | // this just menu and arrow icon animation 165 | Padding( 166 | padding: EdgeInsets.only( 167 | top: MediaQuery.of(context).padding.top + 8, 168 | left: 8), 169 | child: SizedBox( 170 | width: AppBar().preferredSize.height - 8, 171 | height: AppBar().preferredSize.height - 8, 172 | child: Material( 173 | color: Colors.transparent, 174 | child: InkWell( 175 | borderRadius: BorderRadius.circular( 176 | AppBar().preferredSize.height), 177 | child: Center( 178 | // if you use your own menu view UI you add form initialization 179 | child: widget.menuView != null 180 | ? widget.menuView 181 | : AnimatedIcon( 182 | color: isLightMode 183 | ? AppTheme.dark_grey 184 | : AppTheme.white, 185 | icon: widget.animatedIconData ?? 186 | AnimatedIcons.arrow_menu, 187 | progress: iconAnimationController!), 188 | ), 189 | onTap: () { 190 | FocusScope.of(context) 191 | .requestFocus(FocusNode()); 192 | onDrawerClick(); 193 | }, 194 | ), 195 | ), 196 | ), 197 | ), 198 | ], 199 | ), 200 | ), 201 | ), 202 | ], 203 | ), 204 | ), 205 | ), 206 | ); 207 | } 208 | 209 | void onDrawerClick() { 210 | //if scrollcontroller.offset != 0.0 then we set to closed the drawer(with animation to offset zero position) if is not 1 then open the drawer 211 | if (scrollController!.offset != 0.0) { 212 | scrollController?.animateTo( 213 | 0.0, 214 | duration: const Duration(milliseconds: 400), 215 | curve: Curves.fastOutSlowIn, 216 | ); 217 | } else { 218 | scrollController?.animateTo( 219 | widget.drawerWidth, 220 | duration: const Duration(milliseconds: 400), 221 | curve: Curves.fastOutSlowIn, 222 | ); 223 | } 224 | } 225 | } 226 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/design_course/design_course_app_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DesignCourseAppTheme { 4 | DesignCourseAppTheme._(); 5 | 6 | static const Color notWhite = Color(0xFFEDF0F2); 7 | static const Color nearlyWhite = Color(0xFFFFFFFF); 8 | static const Color nearlyBlue = Color(0xFF00B6F0); 9 | static const Color nearlyBlack = Color(0xFF213333); 10 | static const Color grey = Color(0xFF3A5160); 11 | static const Color dark_grey = Color(0xFF313A44); 12 | 13 | static const Color darkText = Color(0xFF253840); 14 | static const Color darkerText = Color(0xFF17262A); 15 | static const Color lightText = Color(0xFF4A6572); 16 | static const Color deactivatedText = Color(0xFF767676); 17 | static const Color dismissibleBackground = Color(0xFF364A54); 18 | static const Color chipBackground = Color(0xFFEEF1F3); 19 | static const Color spacer = Color(0xFFF2F2F2); 20 | 21 | static const TextTheme textTheme = TextTheme( 22 | headline4: display1, 23 | headline5: headline, 24 | headline6: title, 25 | subtitle2: subtitle, 26 | bodyText1: body2, 27 | bodyText2: body1, 28 | caption: caption, 29 | ); 30 | 31 | static const TextStyle display1 = TextStyle( 32 | // h4 -> display1 33 | fontFamily: 'WorkSans', 34 | fontWeight: FontWeight.bold, 35 | fontSize: 36, 36 | letterSpacing: 0.4, 37 | height: 0.9, 38 | color: darkerText, 39 | ); 40 | 41 | static const TextStyle headline = TextStyle( 42 | // h5 -> headline 43 | fontFamily: 'WorkSans', 44 | fontWeight: FontWeight.bold, 45 | fontSize: 24, 46 | letterSpacing: 0.27, 47 | color: darkerText, 48 | ); 49 | 50 | static const TextStyle title = TextStyle( 51 | // h6 -> title 52 | fontFamily: 'WorkSans', 53 | fontWeight: FontWeight.bold, 54 | fontSize: 16, 55 | letterSpacing: 0.18, 56 | color: darkerText, 57 | ); 58 | 59 | static const TextStyle subtitle = TextStyle( 60 | // subtitle2 -> subtitle 61 | fontFamily: 'WorkSans', 62 | fontWeight: FontWeight.w400, 63 | fontSize: 14, 64 | letterSpacing: -0.04, 65 | color: darkText, 66 | ); 67 | 68 | static const TextStyle body2 = TextStyle( 69 | // body1 -> body2 70 | fontFamily: 'WorkSans', 71 | fontWeight: FontWeight.w400, 72 | fontSize: 14, 73 | letterSpacing: 0.2, 74 | color: darkText, 75 | ); 76 | 77 | static const TextStyle body1 = TextStyle( 78 | // body2 -> body1 79 | fontFamily: 'WorkSans', 80 | fontWeight: FontWeight.w400, 81 | fontSize: 16, 82 | letterSpacing: -0.05, 83 | color: darkText, 84 | ); 85 | 86 | static const TextStyle caption = TextStyle( 87 | // Caption -> caption 88 | fontFamily: 'WorkSans', 89 | fontWeight: FontWeight.w400, 90 | fontSize: 12, 91 | letterSpacing: 0.2, 92 | color: lightText, // was lightText 93 | ); 94 | } 95 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/design_course/models/category.dart: -------------------------------------------------------------------------------- 1 | class Category { 2 | Category({ 3 | this.title = '', 4 | this.imagePath = '', 5 | this.lessonCount = 0, 6 | this.money = 0, 7 | this.rating = 0.0, 8 | }); 9 | 10 | String title; 11 | int lessonCount; 12 | int money; 13 | double rating; 14 | String imagePath; 15 | 16 | static List categoryList = [ 17 | Category( 18 | imagePath: 'assets/design_course/interFace1.png', 19 | title: 'User interface Design', 20 | lessonCount: 24, 21 | money: 25, 22 | rating: 4.3, 23 | ), 24 | Category( 25 | imagePath: 'assets/design_course/interFace2.png', 26 | title: 'User interface Design', 27 | lessonCount: 22, 28 | money: 18, 29 | rating: 4.6, 30 | ), 31 | Category( 32 | imagePath: 'assets/design_course/interFace1.png', 33 | title: 'User interface Design', 34 | lessonCount: 24, 35 | money: 25, 36 | rating: 4.3, 37 | ), 38 | Category( 39 | imagePath: 'assets/design_course/interFace2.png', 40 | title: 'User interface Design', 41 | lessonCount: 22, 42 | money: 18, 43 | rating: 4.6, 44 | ), 45 | ]; 46 | 47 | static List popularCourseList = [ 48 | Category( 49 | imagePath: 'assets/design_course/interFace3.png', 50 | title: 'App Design Course', 51 | lessonCount: 12, 52 | money: 25, 53 | rating: 4.8, 54 | ), 55 | Category( 56 | imagePath: 'assets/design_course/interFace4.png', 57 | title: 'Web Design Course', 58 | lessonCount: 28, 59 | money: 208, 60 | rating: 4.9, 61 | ), 62 | Category( 63 | imagePath: 'assets/design_course/interFace3.png', 64 | title: 'App Design Course', 65 | lessonCount: 12, 66 | money: 25, 67 | rating: 4.8, 68 | ), 69 | Category( 70 | imagePath: 'assets/design_course/interFace4.png', 71 | title: 'Web Design Course', 72 | lessonCount: 28, 73 | money: 208, 74 | rating: 4.9, 75 | ), 76 | ]; 77 | } 78 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/feedback_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/app_theme.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class FeedbackScreen extends StatefulWidget { 5 | @override 6 | _FeedbackScreenState createState() => _FeedbackScreenState(); 7 | } 8 | 9 | class _FeedbackScreenState extends State { 10 | @override 11 | void initState() { 12 | super.initState(); 13 | } 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | var brightness = MediaQuery.of(context).platformBrightness; 18 | bool isLightMode = brightness == Brightness.light; 19 | return Container( 20 | color: isLightMode ? AppTheme.nearlyWhite : AppTheme.nearlyBlack, 21 | child: SafeArea( 22 | top: false, 23 | child: Scaffold( 24 | backgroundColor: 25 | isLightMode ? AppTheme.nearlyWhite : AppTheme.nearlyBlack, 26 | body: SingleChildScrollView( 27 | child: SizedBox( 28 | height: MediaQuery.of(context).size.height, 29 | child: Column( 30 | children: [ 31 | Container( 32 | padding: EdgeInsets.only( 33 | top: MediaQuery.of(context).padding.top, 34 | left: 16, 35 | right: 16), 36 | child: Image.asset('assets/images/feedbackImage.png'), 37 | ), 38 | Container( 39 | padding: const EdgeInsets.only(top: 8), 40 | child: Text( 41 | 'Your FeedBack', 42 | style: TextStyle( 43 | fontSize: 20, 44 | fontWeight: FontWeight.bold, 45 | color: isLightMode ? Colors.black : Colors.white), 46 | ), 47 | ), 48 | Container( 49 | padding: const EdgeInsets.only(top: 16), 50 | child: Text( 51 | 'Give your best time for this moment.', 52 | textAlign: TextAlign.center, 53 | style: TextStyle( 54 | fontSize: 16, 55 | color: isLightMode ? Colors.black : Colors.white), 56 | ), 57 | ), 58 | _buildComposer(), 59 | Padding( 60 | padding: const EdgeInsets.only(top: 16), 61 | child: Center( 62 | child: Container( 63 | width: 120, 64 | height: 40, 65 | decoration: BoxDecoration( 66 | color: isLightMode ? Colors.blue : Colors.white, 67 | borderRadius: 68 | const BorderRadius.all(Radius.circular(4.0)), 69 | boxShadow: [ 70 | BoxShadow( 71 | color: Colors.grey.withOpacity(0.6), 72 | offset: const Offset(4, 4), 73 | blurRadius: 8.0), 74 | ], 75 | ), 76 | child: Material( 77 | color: Colors.transparent, 78 | child: InkWell( 79 | onTap: () { 80 | FocusScope.of(context).requestFocus(FocusNode()); 81 | }, 82 | child: Center( 83 | child: Padding( 84 | padding: const EdgeInsets.all(4.0), 85 | child: Text( 86 | 'Send', 87 | style: TextStyle( 88 | fontWeight: FontWeight.w500, 89 | color: isLightMode 90 | ? Colors.white 91 | : Colors.black, 92 | ), 93 | ), 94 | ), 95 | ), 96 | ), 97 | ), 98 | ), 99 | ), 100 | ) 101 | ], 102 | ), 103 | ), 104 | ), 105 | ), 106 | ), 107 | ); 108 | } 109 | 110 | Widget _buildComposer() { 111 | return Padding( 112 | padding: const EdgeInsets.only(top: 16, left: 32, right: 32), 113 | child: Container( 114 | decoration: BoxDecoration( 115 | color: AppTheme.white, 116 | borderRadius: BorderRadius.circular(8), 117 | boxShadow: [ 118 | BoxShadow( 119 | color: Colors.grey.withOpacity(0.8), 120 | offset: const Offset(4, 4), 121 | blurRadius: 8), 122 | ], 123 | ), 124 | child: ClipRRect( 125 | borderRadius: BorderRadius.circular(25), 126 | child: Container( 127 | padding: const EdgeInsets.all(4.0), 128 | constraints: const BoxConstraints(minHeight: 80, maxHeight: 160), 129 | color: AppTheme.white, 130 | child: SingleChildScrollView( 131 | padding: 132 | const EdgeInsets.only(left: 10, right: 10, top: 0, bottom: 0), 133 | child: TextField( 134 | maxLines: null, 135 | onChanged: (String txt) {}, 136 | style: TextStyle( 137 | fontFamily: AppTheme.fontName, 138 | fontSize: 16, 139 | color: AppTheme.dark_grey, 140 | ), 141 | cursorColor: Colors.blue, 142 | decoration: InputDecoration( 143 | border: InputBorder.none, 144 | hintText: 'Enter your feedback...'), 145 | ), 146 | ), 147 | ), 148 | ), 149 | ), 150 | ); 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/fitness_app_home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/fitness_app/models/tabIcon_data.dart'; 2 | import 'package:best_flutter_ui_templates/fitness_app/training/training_screen.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'bottom_navigation_view/bottom_bar_view.dart'; 5 | import 'fitness_app_theme.dart'; 6 | import 'my_diary/my_diary_screen.dart'; 7 | 8 | class FitnessAppHomeScreen extends StatefulWidget { 9 | @override 10 | _FitnessAppHomeScreenState createState() => _FitnessAppHomeScreenState(); 11 | } 12 | 13 | class _FitnessAppHomeScreenState extends State 14 | with TickerProviderStateMixin { 15 | AnimationController? animationController; 16 | 17 | List tabIconsList = TabIconData.tabIconsList; 18 | 19 | Widget tabBody = Container( 20 | color: FitnessAppTheme.background, 21 | ); 22 | 23 | @override 24 | void initState() { 25 | tabIconsList.forEach((TabIconData tab) { 26 | tab.isSelected = false; 27 | }); 28 | tabIconsList[0].isSelected = true; 29 | 30 | animationController = AnimationController( 31 | duration: const Duration(milliseconds: 600), vsync: this); 32 | tabBody = MyDiaryScreen(animationController: animationController); 33 | super.initState(); 34 | } 35 | 36 | @override 37 | void dispose() { 38 | animationController?.dispose(); 39 | super.dispose(); 40 | } 41 | 42 | @override 43 | Widget build(BuildContext context) { 44 | return Container( 45 | color: FitnessAppTheme.background, 46 | child: Scaffold( 47 | backgroundColor: Colors.transparent, 48 | body: FutureBuilder( 49 | future: getData(), 50 | builder: (BuildContext context, AsyncSnapshot snapshot) { 51 | if (!snapshot.hasData) { 52 | return const SizedBox(); 53 | } else { 54 | return Stack( 55 | children: [ 56 | tabBody, 57 | bottomBar(), 58 | ], 59 | ); 60 | } 61 | }, 62 | ), 63 | ), 64 | ); 65 | } 66 | 67 | Future getData() async { 68 | await Future.delayed(const Duration(milliseconds: 200)); 69 | return true; 70 | } 71 | 72 | Widget bottomBar() { 73 | return Column( 74 | children: [ 75 | const Expanded( 76 | child: SizedBox(), 77 | ), 78 | BottomBarView( 79 | tabIconsList: tabIconsList, 80 | addClick: () {}, 81 | changeIndex: (int index) { 82 | if (index == 0 || index == 2) { 83 | animationController?.reverse().then((data) { 84 | if (!mounted) { 85 | return; 86 | } 87 | setState(() { 88 | tabBody = 89 | MyDiaryScreen(animationController: animationController); 90 | }); 91 | }); 92 | } else if (index == 1 || index == 3) { 93 | animationController?.reverse().then((data) { 94 | if (!mounted) { 95 | return; 96 | } 97 | setState(() { 98 | tabBody = 99 | TrainingScreen(animationController: animationController); 100 | }); 101 | }); 102 | } 103 | }, 104 | ), 105 | ], 106 | ); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/fitness_app_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class FitnessAppTheme { 4 | FitnessAppTheme._(); 5 | static const Color nearlyWhite = Color(0xFFFAFAFA); 6 | static const Color white = Color(0xFFFFFFFF); 7 | static const Color background = Color(0xFFF2F3F8); 8 | static const Color nearlyDarkBlue = Color(0xFF2633C5); 9 | 10 | static const Color nearlyBlue = Color(0xFF00B6F0); 11 | static const Color nearlyBlack = Color(0xFF213333); 12 | static const Color grey = Color(0xFF3A5160); 13 | static const Color dark_grey = Color(0xFF313A44); 14 | 15 | static const Color darkText = Color(0xFF253840); 16 | static const Color darkerText = Color(0xFF17262A); 17 | static const Color lightText = Color(0xFF4A6572); 18 | static const Color deactivatedText = Color(0xFF767676); 19 | static const Color dismissibleBackground = Color(0xFF364A54); 20 | static const Color spacer = Color(0xFFF2F2F2); 21 | static const String fontName = 'Roboto'; 22 | 23 | static const TextTheme textTheme = TextTheme( 24 | headline4: display1, 25 | headline5: headline, 26 | headline6: title, 27 | subtitle2: subtitle, 28 | bodyText2: body2, 29 | bodyText1: body1, 30 | caption: caption, 31 | ); 32 | 33 | static const TextStyle display1 = TextStyle( 34 | fontFamily: fontName, 35 | fontWeight: FontWeight.bold, 36 | fontSize: 36, 37 | letterSpacing: 0.4, 38 | height: 0.9, 39 | color: darkerText, 40 | ); 41 | 42 | static const TextStyle headline = TextStyle( 43 | fontFamily: fontName, 44 | fontWeight: FontWeight.bold, 45 | fontSize: 24, 46 | letterSpacing: 0.27, 47 | color: darkerText, 48 | ); 49 | 50 | static const TextStyle title = TextStyle( 51 | fontFamily: fontName, 52 | fontWeight: FontWeight.bold, 53 | fontSize: 16, 54 | letterSpacing: 0.18, 55 | color: darkerText, 56 | ); 57 | 58 | static const TextStyle subtitle = TextStyle( 59 | fontFamily: fontName, 60 | fontWeight: FontWeight.w400, 61 | fontSize: 14, 62 | letterSpacing: -0.04, 63 | color: darkText, 64 | ); 65 | 66 | static const TextStyle body2 = TextStyle( 67 | fontFamily: fontName, 68 | fontWeight: FontWeight.w400, 69 | fontSize: 14, 70 | letterSpacing: 0.2, 71 | color: darkText, 72 | ); 73 | 74 | static const TextStyle body1 = TextStyle( 75 | fontFamily: fontName, 76 | fontWeight: FontWeight.w400, 77 | fontSize: 16, 78 | letterSpacing: -0.05, 79 | color: darkText, 80 | ); 81 | 82 | static const TextStyle caption = TextStyle( 83 | fontFamily: fontName, 84 | fontWeight: FontWeight.w400, 85 | fontSize: 12, 86 | letterSpacing: 0.2, 87 | color: lightText, // was lightText 88 | ); 89 | } 90 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/models/meals_list_data.dart: -------------------------------------------------------------------------------- 1 | class MealsListData { 2 | MealsListData({ 3 | this.imagePath = '', 4 | this.titleTxt = '', 5 | this.startColor = '', 6 | this.endColor = '', 7 | this.meals, 8 | this.kacl = 0, 9 | }); 10 | 11 | String imagePath; 12 | String titleTxt; 13 | String startColor; 14 | String endColor; 15 | List? meals; 16 | int kacl; 17 | 18 | static List tabIconsList = [ 19 | MealsListData( 20 | imagePath: 'assets/fitness_app/breakfast.png', 21 | titleTxt: 'Breakfast', 22 | kacl: 525, 23 | meals: ['Bread,', 'Peanut butter,', 'Apple'], 24 | startColor: '#FA7D82', 25 | endColor: '#FFB295', 26 | ), 27 | MealsListData( 28 | imagePath: 'assets/fitness_app/lunch.png', 29 | titleTxt: 'Lunch', 30 | kacl: 602, 31 | meals: ['Salmon,', 'Mixed veggies,', 'Avocado'], 32 | startColor: '#738AE6', 33 | endColor: '#5C5EDD', 34 | ), 35 | MealsListData( 36 | imagePath: 'assets/fitness_app/snack.png', 37 | titleTxt: 'Snack', 38 | kacl: 0, 39 | meals: ['Recommend:', '800 kcal'], 40 | startColor: '#FE95B6', 41 | endColor: '#FF5287', 42 | ), 43 | MealsListData( 44 | imagePath: 'assets/fitness_app/dinner.png', 45 | titleTxt: 'Dinner', 46 | kacl: 0, 47 | meals: ['Recommend:', '703 kcal'], 48 | startColor: '#6F72CA', 49 | endColor: '#1E1466', 50 | ), 51 | ]; 52 | } 53 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/models/tabIcon_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TabIconData { 4 | TabIconData({ 5 | this.imagePath = '', 6 | this.index = 0, 7 | this.selectedImagePath = '', 8 | this.isSelected = false, 9 | this.animationController, 10 | }); 11 | 12 | String imagePath; 13 | String selectedImagePath; 14 | bool isSelected; 15 | int index; 16 | 17 | AnimationController? animationController; 18 | 19 | static List tabIconsList = [ 20 | TabIconData( 21 | imagePath: 'assets/fitness_app/tab_1.png', 22 | selectedImagePath: 'assets/fitness_app/tab_1s.png', 23 | index: 0, 24 | isSelected: true, 25 | animationController: null, 26 | ), 27 | TabIconData( 28 | imagePath: 'assets/fitness_app/tab_2.png', 29 | selectedImagePath: 'assets/fitness_app/tab_2s.png', 30 | index: 1, 31 | isSelected: false, 32 | animationController: null, 33 | ), 34 | TabIconData( 35 | imagePath: 'assets/fitness_app/tab_3.png', 36 | selectedImagePath: 'assets/fitness_app/tab_3s.png', 37 | index: 2, 38 | isSelected: false, 39 | animationController: null, 40 | ), 41 | TabIconData( 42 | imagePath: 'assets/fitness_app/tab_4.png', 43 | selectedImagePath: 'assets/fitness_app/tab_4s.png', 44 | index: 3, 45 | isSelected: false, 46 | animationController: null, 47 | ), 48 | ]; 49 | } 50 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/ui_view/area_list_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../fitness_app_theme.dart'; 4 | 5 | class AreaListView extends StatefulWidget { 6 | const AreaListView( 7 | {Key? key, this.mainScreenAnimationController, this.mainScreenAnimation}) 8 | : super(key: key); 9 | 10 | final AnimationController? mainScreenAnimationController; 11 | final Animation? mainScreenAnimation; 12 | @override 13 | _AreaListViewState createState() => _AreaListViewState(); 14 | } 15 | 16 | class _AreaListViewState extends State 17 | with TickerProviderStateMixin { 18 | AnimationController? animationController; 19 | List areaListData = [ 20 | 'assets/fitness_app/area1.png', 21 | 'assets/fitness_app/area2.png', 22 | 'assets/fitness_app/area3.png', 23 | 'assets/fitness_app/area1.png', 24 | ]; 25 | 26 | @override 27 | void initState() { 28 | animationController = AnimationController( 29 | duration: const Duration(milliseconds: 2000), vsync: this); 30 | super.initState(); 31 | } 32 | 33 | @override 34 | void dispose() { 35 | animationController?.dispose(); 36 | super.dispose(); 37 | } 38 | 39 | @override 40 | Widget build(BuildContext context) { 41 | return AnimatedBuilder( 42 | animation: widget.mainScreenAnimationController!, 43 | builder: (BuildContext context, Widget? child) { 44 | return FadeTransition( 45 | opacity: widget.mainScreenAnimation!, 46 | child: Transform( 47 | transform: Matrix4.translationValues( 48 | 0.0, 30 * (1.0 - widget.mainScreenAnimation!.value), 0.0), 49 | child: AspectRatio( 50 | aspectRatio: 1.0, 51 | child: Padding( 52 | padding: const EdgeInsets.only(left: 8.0, right: 8), 53 | child: GridView( 54 | padding: const EdgeInsets.only( 55 | left: 16, right: 16, top: 16, bottom: 16), 56 | physics: const BouncingScrollPhysics(), 57 | scrollDirection: Axis.vertical, 58 | children: List.generate( 59 | areaListData.length, 60 | (int index) { 61 | final int count = areaListData.length; 62 | final Animation animation = 63 | Tween(begin: 0.0, end: 1.0).animate( 64 | CurvedAnimation( 65 | parent: animationController!, 66 | curve: Interval((1 / count) * index, 1.0, 67 | curve: Curves.fastOutSlowIn), 68 | ), 69 | ); 70 | animationController?.forward(); 71 | return AreaView( 72 | imagepath: areaListData[index], 73 | animation: animation, 74 | animationController: animationController!, 75 | ); 76 | }, 77 | ), 78 | gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( 79 | crossAxisCount: 2, 80 | mainAxisSpacing: 24.0, 81 | crossAxisSpacing: 24.0, 82 | childAspectRatio: 1.0, 83 | ), 84 | ), 85 | ), 86 | ), 87 | ), 88 | ); 89 | }, 90 | ); 91 | } 92 | } 93 | 94 | class AreaView extends StatelessWidget { 95 | const AreaView({ 96 | Key? key, 97 | this.imagepath, 98 | this.animationController, 99 | this.animation, 100 | }) : super(key: key); 101 | 102 | final String? imagepath; 103 | final AnimationController? animationController; 104 | final Animation? animation; 105 | 106 | @override 107 | Widget build(BuildContext context) { 108 | return AnimatedBuilder( 109 | animation: animationController!, 110 | builder: (BuildContext context, Widget? child) { 111 | return FadeTransition( 112 | opacity: animation!, 113 | child: Transform( 114 | transform: Matrix4.translationValues( 115 | 0.0, 50 * (1.0 - animation!.value), 0.0), 116 | child: Container( 117 | decoration: BoxDecoration( 118 | color: FitnessAppTheme.white, 119 | borderRadius: const BorderRadius.only( 120 | topLeft: Radius.circular(8.0), 121 | bottomLeft: Radius.circular(8.0), 122 | bottomRight: Radius.circular(8.0), 123 | topRight: Radius.circular(8.0)), 124 | boxShadow: [ 125 | BoxShadow( 126 | color: FitnessAppTheme.grey.withOpacity(0.4), 127 | offset: const Offset(1.1, 1.1), 128 | blurRadius: 10.0), 129 | ], 130 | ), 131 | child: Material( 132 | color: Colors.transparent, 133 | child: InkWell( 134 | focusColor: Colors.transparent, 135 | highlightColor: Colors.transparent, 136 | hoverColor: Colors.transparent, 137 | borderRadius: const BorderRadius.all(Radius.circular(8.0)), 138 | splashColor: FitnessAppTheme.nearlyDarkBlue.withOpacity(0.2), 139 | onTap: () {}, 140 | child: Column( 141 | children: [ 142 | Padding( 143 | padding: 144 | const EdgeInsets.only(top: 16, left: 16, right: 16), 145 | child: Image.asset(imagepath!), 146 | ), 147 | ], 148 | ), 149 | ), 150 | ), 151 | ), 152 | ), 153 | ); 154 | }, 155 | ); 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/ui_view/glass_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/main.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | import '../fitness_app_theme.dart'; 5 | 6 | class GlassView extends StatelessWidget { 7 | final AnimationController? animationController; 8 | final Animation? animation; 9 | 10 | const GlassView({Key? key, this.animationController, this.animation}) 11 | : super(key: key); 12 | @override 13 | Widget build(BuildContext context) { 14 | return AnimatedBuilder( 15 | animation: animationController!, 16 | builder: (BuildContext context, Widget? child) { 17 | return FadeTransition( 18 | opacity: animation!, 19 | child: new Transform( 20 | transform: new Matrix4.translationValues( 21 | 0.0, 30 * (1.0 - animation!.value), 0.0), 22 | child: Column( 23 | children: [ 24 | Padding( 25 | padding: const EdgeInsets.only( 26 | left: 24, right: 24, top: 0, bottom: 24), 27 | child: Stack( 28 | clipBehavior: Clip.none, 29 | children: [ 30 | Padding( 31 | padding: const EdgeInsets.only(top: 16), 32 | child: Container( 33 | decoration: BoxDecoration( 34 | color: HexColor("#D7E0F9"), 35 | borderRadius: BorderRadius.only( 36 | topLeft: Radius.circular(8.0), 37 | bottomLeft: Radius.circular(8.0), 38 | bottomRight: Radius.circular(8.0), 39 | topRight: Radius.circular(8.0)), 40 | // boxShadow: [ 41 | // BoxShadow( 42 | // color: FitnessAppTheme.grey.withOpacity(0.2), 43 | // offset: Offset(1.1, 1.1), 44 | // blurRadius: 10.0), 45 | // ], 46 | ), 47 | child: Column( 48 | children: [ 49 | Padding( 50 | padding: const EdgeInsets.only( 51 | left: 68, bottom: 12, right: 16, top: 12), 52 | child: Text( 53 | 'Prepare your stomach for lunch with one or two glass of water', 54 | textAlign: TextAlign.left, 55 | style: TextStyle( 56 | fontFamily: FitnessAppTheme.fontName, 57 | fontWeight: FontWeight.w500, 58 | fontSize: 14, 59 | letterSpacing: 0.0, 60 | color: FitnessAppTheme.nearlyDarkBlue 61 | .withOpacity(0.6), 62 | ), 63 | ), 64 | ), 65 | ], 66 | ), 67 | ), 68 | ), 69 | Positioned( 70 | top: -12, 71 | left: 0, 72 | child: SizedBox( 73 | width: 80, 74 | height: 80, 75 | child: Image.asset("assets/fitness_app/glass.png"), 76 | ), 77 | ) 78 | ], 79 | ), 80 | ), 81 | ], 82 | ), 83 | ), 84 | ); 85 | }, 86 | ); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/ui_view/running_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../fitness_app_theme.dart'; 3 | 4 | class RunningView extends StatelessWidget { 5 | final AnimationController? animationController; 6 | final Animation? animation; 7 | 8 | const RunningView({Key? key, this.animationController, this.animation}) 9 | : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return AnimatedBuilder( 14 | animation: animationController!, 15 | builder: (BuildContext context, Widget? child) { 16 | return FadeTransition( 17 | opacity: animation!, 18 | child: new Transform( 19 | transform: new Matrix4.translationValues( 20 | 0.0, 30 * (1.0 - animation!.value), 0.0), 21 | child: Column( 22 | children: [ 23 | Padding( 24 | padding: const EdgeInsets.only( 25 | left: 24, right: 24, top: 0, bottom: 0), 26 | child: Stack( 27 | clipBehavior: Clip.none, 28 | children: [ 29 | Padding( 30 | padding: const EdgeInsets.only(top: 16, bottom: 16), 31 | child: Container( 32 | decoration: BoxDecoration( 33 | color: FitnessAppTheme.white, 34 | borderRadius: BorderRadius.only( 35 | topLeft: Radius.circular(8.0), 36 | bottomLeft: Radius.circular(8.0), 37 | bottomRight: Radius.circular(8.0), 38 | topRight: Radius.circular(8.0)), 39 | boxShadow: [ 40 | BoxShadow( 41 | color: FitnessAppTheme.grey.withOpacity(0.4), 42 | offset: Offset(1.1, 1.1), 43 | blurRadius: 10.0), 44 | ], 45 | ), 46 | child: Stack( 47 | alignment: Alignment.topLeft, 48 | children: [ 49 | ClipRRect( 50 | borderRadius: 51 | BorderRadius.all(Radius.circular(8.0)), 52 | child: SizedBox( 53 | height: 74, 54 | child: AspectRatio( 55 | aspectRatio: 1.714, 56 | child: Image.asset( 57 | "assets/fitness_app/back.png"), 58 | ), 59 | ), 60 | ), 61 | Column( 62 | crossAxisAlignment: CrossAxisAlignment.start, 63 | children: [ 64 | Row( 65 | children: [ 66 | Padding( 67 | padding: const EdgeInsets.only( 68 | left: 100, 69 | right: 16, 70 | top: 16, 71 | ), 72 | child: Text( 73 | "You're doing great!", 74 | textAlign: TextAlign.left, 75 | style: TextStyle( 76 | fontFamily: 77 | FitnessAppTheme.fontName, 78 | fontWeight: FontWeight.w500, 79 | fontSize: 14, 80 | letterSpacing: 0.0, 81 | color: 82 | FitnessAppTheme.nearlyDarkBlue, 83 | ), 84 | ), 85 | ), 86 | ], 87 | ), 88 | Padding( 89 | padding: const EdgeInsets.only( 90 | left: 100, 91 | bottom: 12, 92 | top: 4, 93 | right: 16, 94 | ), 95 | child: Text( 96 | "Keep it up\nand stick to your plan!", 97 | textAlign: TextAlign.left, 98 | style: TextStyle( 99 | fontFamily: FitnessAppTheme.fontName, 100 | fontWeight: FontWeight.w500, 101 | fontSize: 10, 102 | letterSpacing: 0.0, 103 | color: FitnessAppTheme.grey 104 | .withOpacity(0.5), 105 | ), 106 | ), 107 | ), 108 | ], 109 | ), 110 | ], 111 | ), 112 | ), 113 | ), 114 | Positioned( 115 | top: -16, 116 | left: 0, 117 | child: SizedBox( 118 | width: 110, 119 | height: 110, 120 | child: Image.asset("assets/fitness_app/runner.png"), 121 | ), 122 | ) 123 | ], 124 | ), 125 | ), 126 | ], 127 | ), 128 | ), 129 | ); 130 | }, 131 | ); 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/ui_view/title_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/fitness_app/fitness_app_theme.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class TitleView extends StatelessWidget { 5 | final String titleTxt; 6 | final String subTxt; 7 | final AnimationController? animationController; 8 | final Animation? animation; 9 | 10 | const TitleView( 11 | {Key? key, 12 | this.titleTxt: "", 13 | this.subTxt: "", 14 | this.animationController, 15 | this.animation}) 16 | : super(key: key); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return AnimatedBuilder( 21 | animation: animationController!, 22 | builder: (BuildContext context, Widget? child) { 23 | return FadeTransition( 24 | opacity: animation!, 25 | child: new Transform( 26 | transform: new Matrix4.translationValues( 27 | 0.0, 30 * (1.0 - animation!.value), 0.0), 28 | child: Container( 29 | child: Padding( 30 | padding: const EdgeInsets.only(left: 24, right: 24), 31 | child: Row( 32 | children: [ 33 | Expanded( 34 | child: Text( 35 | titleTxt, 36 | textAlign: TextAlign.left, 37 | style: TextStyle( 38 | fontFamily: FitnessAppTheme.fontName, 39 | fontWeight: FontWeight.w500, 40 | fontSize: 18, 41 | letterSpacing: 0.5, 42 | color: FitnessAppTheme.lightText, 43 | ), 44 | ), 45 | ), 46 | InkWell( 47 | highlightColor: Colors.transparent, 48 | borderRadius: BorderRadius.all(Radius.circular(4.0)), 49 | onTap: () {}, 50 | child: Padding( 51 | padding: const EdgeInsets.only(left: 8), 52 | child: Row( 53 | children: [ 54 | Text( 55 | subTxt, 56 | textAlign: TextAlign.left, 57 | style: TextStyle( 58 | fontFamily: FitnessAppTheme.fontName, 59 | fontWeight: FontWeight.normal, 60 | fontSize: 16, 61 | letterSpacing: 0.5, 62 | color: FitnessAppTheme.nearlyDarkBlue, 63 | ), 64 | ), 65 | SizedBox( 66 | height: 38, 67 | width: 26, 68 | child: Icon( 69 | Icons.arrow_forward, 70 | color: FitnessAppTheme.darkText, 71 | size: 18, 72 | ), 73 | ), 74 | ], 75 | ), 76 | ), 77 | ) 78 | ], 79 | ), 80 | ), 81 | ), 82 | ), 83 | ); 84 | }, 85 | ); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/fitness_app/ui_view/workout_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/main.dart'; 2 | import 'package:flutter/material.dart'; 3 | import '../fitness_app_theme.dart'; 4 | 5 | class WorkoutView extends StatelessWidget { 6 | final AnimationController? animationController; 7 | final Animation? animation; 8 | 9 | const WorkoutView({Key? key, this.animationController, this.animation}) 10 | : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return AnimatedBuilder( 15 | animation: animationController!, 16 | builder: (BuildContext context, Widget? child) { 17 | return FadeTransition( 18 | opacity: animation!, 19 | child: new Transform( 20 | transform: new Matrix4.translationValues( 21 | 0.0, 30 * (1.0 - animation!.value), 0.0), 22 | child: Padding( 23 | padding: const EdgeInsets.only( 24 | left: 24, right: 24, top: 16, bottom: 18), 25 | child: Container( 26 | decoration: BoxDecoration( 27 | gradient: LinearGradient(colors: [ 28 | FitnessAppTheme.nearlyDarkBlue, 29 | HexColor("#6F56E8") 30 | ], begin: Alignment.topLeft, end: Alignment.bottomRight), 31 | borderRadius: BorderRadius.only( 32 | topLeft: Radius.circular(8.0), 33 | bottomLeft: Radius.circular(8.0), 34 | bottomRight: Radius.circular(8.0), 35 | topRight: Radius.circular(68.0)), 36 | boxShadow: [ 37 | BoxShadow( 38 | color: FitnessAppTheme.grey.withOpacity(0.6), 39 | offset: Offset(1.1, 1.1), 40 | blurRadius: 10.0), 41 | ], 42 | ), 43 | child: Padding( 44 | padding: const EdgeInsets.all(16.0), 45 | child: Column( 46 | mainAxisAlignment: MainAxisAlignment.center, 47 | crossAxisAlignment: CrossAxisAlignment.start, 48 | children: [ 49 | Text( 50 | 'Next workout', 51 | textAlign: TextAlign.left, 52 | style: TextStyle( 53 | fontFamily: FitnessAppTheme.fontName, 54 | fontWeight: FontWeight.normal, 55 | fontSize: 14, 56 | letterSpacing: 0.0, 57 | color: FitnessAppTheme.white, 58 | ), 59 | ), 60 | Padding( 61 | padding: const EdgeInsets.only(top: 8.0), 62 | child: const Text( 63 | 'Legs Toning and\nGlutes Workout at Home', 64 | textAlign: TextAlign.left, 65 | style: TextStyle( 66 | fontFamily: FitnessAppTheme.fontName, 67 | fontWeight: FontWeight.normal, 68 | fontSize: 20, 69 | letterSpacing: 0.0, 70 | color: FitnessAppTheme.white, 71 | ), 72 | ), 73 | ), 74 | SizedBox( 75 | height: 32, 76 | ), 77 | Padding( 78 | padding: const EdgeInsets.only(right: 4), 79 | child: Row( 80 | crossAxisAlignment: CrossAxisAlignment.end, 81 | mainAxisAlignment: MainAxisAlignment.center, 82 | children: [ 83 | Padding( 84 | padding: const EdgeInsets.only(left: 4), 85 | child: Icon( 86 | Icons.timer, 87 | color: FitnessAppTheme.white, 88 | size: 16, 89 | ), 90 | ), 91 | Padding( 92 | padding: const EdgeInsets.only(left: 4.0), 93 | child: const Text( 94 | '68 min', 95 | textAlign: TextAlign.center, 96 | style: TextStyle( 97 | fontFamily: FitnessAppTheme.fontName, 98 | fontWeight: FontWeight.w500, 99 | fontSize: 14, 100 | letterSpacing: 0.0, 101 | color: FitnessAppTheme.white, 102 | ), 103 | ), 104 | ), 105 | Expanded( 106 | child: SizedBox(), 107 | ), 108 | Container( 109 | decoration: BoxDecoration( 110 | color: FitnessAppTheme.nearlyWhite, 111 | shape: BoxShape.circle, 112 | boxShadow: [ 113 | BoxShadow( 114 | color: FitnessAppTheme.nearlyBlack 115 | .withOpacity(0.4), 116 | offset: Offset(8.0, 8.0), 117 | blurRadius: 8.0), 118 | ], 119 | ), 120 | child: Padding( 121 | padding: const EdgeInsets.all(0.0), 122 | child: Icon( 123 | Icons.arrow_right, 124 | color: HexColor("#6F56E8"), 125 | size: 44, 126 | ), 127 | ), 128 | ) 129 | ], 130 | ), 131 | ) 132 | ], 133 | ), 134 | ), 135 | ), 136 | ), 137 | ), 138 | ); 139 | }, 140 | ); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/help_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/app_theme.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class HelpScreen extends StatefulWidget { 5 | @override 6 | _HelpScreenState createState() => _HelpScreenState(); 7 | } 8 | 9 | class _HelpScreenState extends State { 10 | @override 11 | void initState() { 12 | super.initState(); 13 | } 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | var brightness = MediaQuery.of(context).platformBrightness; 18 | bool isLightMode = brightness == Brightness.light; 19 | return Container( 20 | color: isLightMode ? AppTheme.nearlyWhite : AppTheme.nearlyBlack, 21 | child: SafeArea( 22 | top: false, 23 | child: Scaffold( 24 | backgroundColor: 25 | isLightMode ? AppTheme.nearlyWhite : AppTheme.nearlyBlack, 26 | body: Column( 27 | children: [ 28 | Container( 29 | padding: EdgeInsets.only( 30 | top: MediaQuery.of(context).padding.top, 31 | left: 16, 32 | right: 16), 33 | child: Image.asset('assets/images/helpImage.png'), 34 | ), 35 | Container( 36 | padding: const EdgeInsets.only(top: 8), 37 | child: Text( 38 | 'How can we help you?', 39 | style: TextStyle( 40 | fontSize: 20, 41 | fontWeight: FontWeight.bold, 42 | color: isLightMode ? Colors.black : Colors.white), 43 | ), 44 | ), 45 | Container( 46 | padding: const EdgeInsets.only(top: 16), 47 | child: Text( 48 | 'It looks like you are experiencing problems\nwith our sign up process. We are here to\nhelp so please get in touch with us', 49 | textAlign: TextAlign.center, 50 | style: TextStyle( 51 | fontSize: 16, 52 | color: isLightMode ? Colors.black : Colors.white), 53 | ), 54 | ), 55 | Expanded( 56 | child: Padding( 57 | padding: const EdgeInsets.all(8.0), 58 | child: Center( 59 | child: Container( 60 | width: 140, 61 | height: 40, 62 | decoration: BoxDecoration( 63 | color: isLightMode ? Colors.blue : Colors.white, 64 | borderRadius: 65 | const BorderRadius.all(Radius.circular(4.0)), 66 | boxShadow: [ 67 | BoxShadow( 68 | color: Colors.grey.withOpacity(0.6), 69 | offset: const Offset(4, 4), 70 | blurRadius: 8.0), 71 | ], 72 | ), 73 | child: Material( 74 | color: Colors.transparent, 75 | child: InkWell( 76 | onTap: () {}, 77 | child: Center( 78 | child: Padding( 79 | padding: const EdgeInsets.all(4.0), 80 | child: Text( 81 | 'Chat with Us', 82 | style: TextStyle( 83 | fontWeight: FontWeight.w500, 84 | color: 85 | isLightMode ? Colors.white : Colors.black, 86 | ), 87 | ), 88 | ), 89 | ), 90 | ), 91 | ), 92 | ), 93 | ), 94 | ), 95 | ) 96 | ], 97 | ), 98 | ), 99 | ), 100 | ); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/app_theme.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'model/homelist.dart'; 4 | 5 | class MyHomePage extends StatefulWidget { 6 | const MyHomePage({Key? key}) : super(key: key); 7 | 8 | @override 9 | _MyHomePageState createState() => _MyHomePageState(); 10 | } 11 | 12 | class _MyHomePageState extends State with TickerProviderStateMixin { 13 | List homeList = HomeList.homeList; 14 | AnimationController? animationController; 15 | bool multiple = true; 16 | 17 | @override 18 | void initState() { 19 | animationController = AnimationController( 20 | duration: const Duration(milliseconds: 2000), vsync: this); 21 | super.initState(); 22 | } 23 | 24 | Future getData() async { 25 | await Future.delayed(const Duration(milliseconds: 0)); 26 | return true; 27 | } 28 | 29 | @override 30 | void dispose() { 31 | animationController?.dispose(); 32 | super.dispose(); 33 | } 34 | 35 | @override 36 | Widget build(BuildContext context) { 37 | var brightness = MediaQuery.of(context).platformBrightness; 38 | bool isLightMode = brightness == Brightness.light; 39 | return Scaffold( 40 | backgroundColor: 41 | isLightMode == true ? AppTheme.white : AppTheme.nearlyBlack, 42 | body: FutureBuilder( 43 | future: getData(), 44 | builder: (BuildContext context, AsyncSnapshot snapshot) { 45 | if (!snapshot.hasData) { 46 | return const SizedBox(); 47 | } else { 48 | return Padding( 49 | padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top), 50 | child: Column( 51 | mainAxisAlignment: MainAxisAlignment.center, 52 | crossAxisAlignment: CrossAxisAlignment.start, 53 | children: [ 54 | appBar(), 55 | Expanded( 56 | child: FutureBuilder( 57 | future: getData(), 58 | builder: 59 | (BuildContext context, AsyncSnapshot snapshot) { 60 | if (!snapshot.hasData) { 61 | return const SizedBox(); 62 | } else { 63 | return GridView( 64 | padding: const EdgeInsets.only( 65 | top: 0, left: 12, right: 12), 66 | physics: const BouncingScrollPhysics(), 67 | scrollDirection: Axis.vertical, 68 | children: List.generate( 69 | homeList.length, 70 | (int index) { 71 | final int count = homeList.length; 72 | final Animation animation = 73 | Tween(begin: 0.0, end: 1.0).animate( 74 | CurvedAnimation( 75 | parent: animationController!, 76 | curve: Interval((1 / count) * index, 1.0, 77 | curve: Curves.fastOutSlowIn), 78 | ), 79 | ); 80 | animationController?.forward(); 81 | return HomeListView( 82 | animation: animation, 83 | animationController: animationController, 84 | listData: homeList[index], 85 | callBack: () { 86 | Navigator.push( 87 | context, 88 | MaterialPageRoute( 89 | builder: (BuildContext context) => 90 | homeList[index].navigateScreen!, 91 | ), 92 | ); 93 | }, 94 | ); 95 | }, 96 | ), 97 | gridDelegate: 98 | SliverGridDelegateWithFixedCrossAxisCount( 99 | crossAxisCount: multiple ? 2 : 1, 100 | mainAxisSpacing: 12.0, 101 | crossAxisSpacing: 12.0, 102 | childAspectRatio: 1.5, 103 | ), 104 | ); 105 | } 106 | }, 107 | ), 108 | ), 109 | ], 110 | ), 111 | ); 112 | } 113 | }, 114 | ), 115 | ); 116 | } 117 | 118 | Widget appBar() { 119 | var brightness = MediaQuery.of(context).platformBrightness; 120 | bool isLightMode = brightness == Brightness.light; 121 | return SizedBox( 122 | height: AppBar().preferredSize.height, 123 | child: Row( 124 | mainAxisAlignment: MainAxisAlignment.center, 125 | children: [ 126 | Padding( 127 | padding: const EdgeInsets.only(top: 8, left: 8), 128 | child: Container( 129 | width: AppBar().preferredSize.height - 8, 130 | height: AppBar().preferredSize.height - 8, 131 | ), 132 | ), 133 | Expanded( 134 | child: Center( 135 | child: Padding( 136 | padding: const EdgeInsets.only(top: 4), 137 | child: Text( 138 | 'Flutter UI', 139 | style: TextStyle( 140 | fontSize: 22, 141 | color: isLightMode ? AppTheme.darkText : AppTheme.white, 142 | fontWeight: FontWeight.w700, 143 | ), 144 | ), 145 | ), 146 | ), 147 | ), 148 | Padding( 149 | padding: const EdgeInsets.only(top: 8, right: 8), 150 | child: Container( 151 | width: AppBar().preferredSize.height - 8, 152 | height: AppBar().preferredSize.height - 8, 153 | color: isLightMode ? Colors.white : AppTheme.nearlyBlack, 154 | child: Material( 155 | color: Colors.transparent, 156 | child: InkWell( 157 | borderRadius: 158 | BorderRadius.circular(AppBar().preferredSize.height), 159 | child: Icon( 160 | multiple ? Icons.dashboard : Icons.view_agenda, 161 | color: isLightMode ? AppTheme.dark_grey : AppTheme.white, 162 | ), 163 | onTap: () { 164 | setState(() { 165 | multiple = !multiple; 166 | }); 167 | }, 168 | ), 169 | ), 170 | ), 171 | ), 172 | ], 173 | ), 174 | ); 175 | } 176 | } 177 | 178 | class HomeListView extends StatelessWidget { 179 | const HomeListView( 180 | {Key? key, 181 | this.listData, 182 | this.callBack, 183 | this.animationController, 184 | this.animation}) 185 | : super(key: key); 186 | 187 | final HomeList? listData; 188 | final VoidCallback? callBack; 189 | final AnimationController? animationController; 190 | final Animation? animation; 191 | 192 | @override 193 | Widget build(BuildContext context) { 194 | return AnimatedBuilder( 195 | animation: animationController!, 196 | builder: (BuildContext context, Widget? child) { 197 | return FadeTransition( 198 | opacity: animation!, 199 | child: Transform( 200 | transform: Matrix4.translationValues( 201 | 0.0, 50 * (1.0 - animation!.value), 0.0), 202 | child: AspectRatio( 203 | aspectRatio: 1.5, 204 | child: ClipRRect( 205 | borderRadius: const BorderRadius.all(Radius.circular(4.0)), 206 | child: Stack( 207 | alignment: AlignmentDirectional.center, 208 | children: [ 209 | Positioned.fill( 210 | child: Image.asset( 211 | listData!.imagePath, 212 | fit: BoxFit.cover, 213 | ), 214 | ), 215 | Material( 216 | color: Colors.transparent, 217 | child: InkWell( 218 | splashColor: Colors.grey.withOpacity(0.2), 219 | borderRadius: 220 | const BorderRadius.all(Radius.circular(4.0)), 221 | onTap: callBack, 222 | ), 223 | ), 224 | ], 225 | ), 226 | ), 227 | ), 228 | ), 229 | ); 230 | }, 231 | ); 232 | } 233 | } 234 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/hotel_booking/hotel_app_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/main.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class HotelAppTheme { 5 | static TextTheme _buildTextTheme(TextTheme base) { 6 | const String fontName = 'WorkSans'; 7 | return base.copyWith( 8 | headline1: base.headline1?.copyWith(fontFamily: fontName), 9 | headline2: base.headline2?.copyWith(fontFamily: fontName), 10 | headline3: base.headline3?.copyWith(fontFamily: fontName), 11 | headline4: base.headline4?.copyWith(fontFamily: fontName), 12 | headline5: base.headline5?.copyWith(fontFamily: fontName), 13 | headline6: base.headline6?.copyWith(fontFamily: fontName), 14 | button: base.button?.copyWith(fontFamily: fontName), 15 | caption: base.caption?.copyWith(fontFamily: fontName), 16 | bodyText1: base.bodyText1?.copyWith(fontFamily: fontName), 17 | bodyText2: base.bodyText2?.copyWith(fontFamily: fontName), 18 | subtitle1: base.subtitle1?.copyWith(fontFamily: fontName), 19 | subtitle2: base.subtitle2?.copyWith(fontFamily: fontName), 20 | overline: base.overline?.copyWith(fontFamily: fontName), 21 | ); 22 | } 23 | 24 | static ThemeData buildLightTheme() { 25 | final Color primaryColor = HexColor('#54D3C2'); 26 | final Color secondaryColor = HexColor('#54D3C2'); 27 | final ColorScheme colorScheme = const ColorScheme.light().copyWith( 28 | primary: primaryColor, 29 | secondary: secondaryColor, 30 | ); 31 | final ThemeData base = ThemeData.light(); 32 | return base.copyWith( 33 | colorScheme: colorScheme, 34 | primaryColor: primaryColor, 35 | indicatorColor: Colors.white, 36 | splashColor: Colors.white24, 37 | splashFactory: InkRipple.splashFactory, 38 | canvasColor: Colors.white, 39 | backgroundColor: const Color(0xFFFFFFFF), 40 | scaffoldBackgroundColor: const Color(0xFFF6F6F6), 41 | errorColor: const Color(0xFFB00020), 42 | buttonTheme: ButtonThemeData( 43 | colorScheme: colorScheme, 44 | textTheme: ButtonTextTheme.primary, 45 | ), 46 | textTheme: _buildTextTheme(base.textTheme), 47 | primaryTextTheme: _buildTextTheme(base.primaryTextTheme), 48 | platform: TargetPlatform.iOS, 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/hotel_booking/model/hotel_list_data.dart: -------------------------------------------------------------------------------- 1 | class HotelListData { 2 | HotelListData({ 3 | this.imagePath = '', 4 | this.titleTxt = '', 5 | this.subTxt = "", 6 | this.dist = 1.8, 7 | this.reviews = 80, 8 | this.rating = 4.5, 9 | this.perNight = 180, 10 | }); 11 | 12 | String imagePath; 13 | String titleTxt; 14 | String subTxt; 15 | double dist; 16 | double rating; 17 | int reviews; 18 | int perNight; 19 | 20 | static List hotelList = [ 21 | HotelListData( 22 | imagePath: 'assets/hotel/hotel_1.png', 23 | titleTxt: 'Grand Royal Hotel', 24 | subTxt: 'Wembley, London', 25 | dist: 2.0, 26 | reviews: 80, 27 | rating: 4.4, 28 | perNight: 180, 29 | ), 30 | HotelListData( 31 | imagePath: 'assets/hotel/hotel_2.png', 32 | titleTxt: 'Queen Hotel', 33 | subTxt: 'Wembley, London', 34 | dist: 4.0, 35 | reviews: 74, 36 | rating: 4.5, 37 | perNight: 200, 38 | ), 39 | HotelListData( 40 | imagePath: 'assets/hotel/hotel_3.png', 41 | titleTxt: 'Grand Royal Hotel', 42 | subTxt: 'Wembley, London', 43 | dist: 3.0, 44 | reviews: 62, 45 | rating: 4.0, 46 | perNight: 60, 47 | ), 48 | HotelListData( 49 | imagePath: 'assets/hotel/hotel_4.png', 50 | titleTxt: 'Queen Hotel', 51 | subTxt: 'Wembley, London', 52 | dist: 7.0, 53 | reviews: 90, 54 | rating: 4.4, 55 | perNight: 170, 56 | ), 57 | HotelListData( 58 | imagePath: 'assets/hotel/hotel_5.png', 59 | titleTxt: 'Grand Royal Hotel', 60 | subTxt: 'Wembley, London', 61 | dist: 2.0, 62 | reviews: 240, 63 | rating: 4.5, 64 | perNight: 200, 65 | ), 66 | ]; 67 | } 68 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/hotel_booking/model/popular_filter_list.dart: -------------------------------------------------------------------------------- 1 | class PopularFilterListData { 2 | PopularFilterListData({ 3 | this.titleTxt = '', 4 | this.isSelected = false, 5 | }); 6 | 7 | String titleTxt; 8 | bool isSelected; 9 | 10 | static List popularFList = [ 11 | PopularFilterListData( 12 | titleTxt: 'Free Breakfast', 13 | isSelected: false, 14 | ), 15 | PopularFilterListData( 16 | titleTxt: 'Free Parking', 17 | isSelected: false, 18 | ), 19 | PopularFilterListData( 20 | titleTxt: 'Pool', 21 | isSelected: true, 22 | ), 23 | PopularFilterListData( 24 | titleTxt: 'Pet Friendly', 25 | isSelected: false, 26 | ), 27 | PopularFilterListData( 28 | titleTxt: 'Free wifi', 29 | isSelected: false, 30 | ), 31 | ]; 32 | 33 | static List accomodationList = [ 34 | PopularFilterListData( 35 | titleTxt: 'All', 36 | isSelected: false, 37 | ), 38 | PopularFilterListData( 39 | titleTxt: 'Apartment', 40 | isSelected: false, 41 | ), 42 | PopularFilterListData( 43 | titleTxt: 'Home', 44 | isSelected: true, 45 | ), 46 | PopularFilterListData( 47 | titleTxt: 'Villa', 48 | isSelected: false, 49 | ), 50 | PopularFilterListData( 51 | titleTxt: 'Hotel', 52 | isSelected: false, 53 | ), 54 | PopularFilterListData( 55 | titleTxt: 'Resort', 56 | isSelected: false, 57 | ), 58 | ]; 59 | } 60 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/hotel_booking/range_slider_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/hotel_booking/hotel_app_theme.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class RangeSliderView extends StatefulWidget { 5 | const RangeSliderView({Key? key, this.values, this.onChangeRangeValues}) 6 | : super(key: key); 7 | 8 | final Function(RangeValues)? onChangeRangeValues; 9 | final RangeValues? values; 10 | 11 | @override 12 | _RangeSliderViewState createState() => _RangeSliderViewState(); 13 | } 14 | 15 | class _RangeSliderViewState extends State { 16 | RangeValues? _values; 17 | 18 | @override 19 | void initState() { 20 | _values = widget.values; 21 | super.initState(); 22 | } 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return Container( 27 | child: Column( 28 | children: [ 29 | Stack( 30 | children: [ 31 | Row( 32 | children: [ 33 | Expanded( 34 | flex: _values!.start.round(), 35 | child: const SizedBox(), 36 | ), 37 | Container( 38 | width: 54, 39 | child: Text( 40 | '\$${_values!.start.round()}', 41 | textAlign: TextAlign.center, 42 | ), 43 | ), 44 | Expanded( 45 | flex: 1000 - _values!.start.round(), 46 | child: const SizedBox(), 47 | ), 48 | ], 49 | ), 50 | Row( 51 | children: [ 52 | Expanded( 53 | flex: _values!.end.round(), 54 | child: const SizedBox(), 55 | ), 56 | Container( 57 | width: 54, 58 | child: Text( 59 | '\$${_values!.end.round()}', 60 | textAlign: TextAlign.center, 61 | ), 62 | ), 63 | Expanded( 64 | flex: 1000 - _values!.end.round(), 65 | child: const SizedBox(), 66 | ), 67 | ], 68 | ), 69 | ], 70 | ), 71 | SliderTheme( 72 | data: SliderThemeData( 73 | rangeThumbShape: CustomRangeThumbShape(), 74 | ), 75 | child: RangeSlider( 76 | values: _values!, 77 | min: 0.0, 78 | max: 1000.0, 79 | activeColor: HotelAppTheme.buildLightTheme().primaryColor, 80 | inactiveColor: Colors.grey.withOpacity(0.4), 81 | divisions: 1000, 82 | onChanged: (RangeValues values) { 83 | try { 84 | setState(() { 85 | _values = values; 86 | }); 87 | widget.onChangeRangeValues!(_values!); 88 | } catch (_) {} 89 | }, 90 | ), 91 | ), 92 | ], 93 | ), 94 | ); 95 | } 96 | } 97 | 98 | class CustomRangeThumbShape extends RangeSliderThumbShape { 99 | static const double _thumbSize = 3.0; 100 | static const double _disabledThumbSize = 3.0; 101 | 102 | @override 103 | Size getPreferredSize(bool isEnabled, bool isDiscrete) { 104 | return isEnabled 105 | ? const Size.fromRadius(_thumbSize) 106 | : const Size.fromRadius(_disabledThumbSize); 107 | } 108 | 109 | static final Animatable sizeTween = Tween( 110 | begin: _disabledThumbSize, 111 | end: _thumbSize, 112 | ); 113 | 114 | @override 115 | void paint( 116 | PaintingContext context, 117 | Offset center, { 118 | required Animation activationAnimation, 119 | required Animation enableAnimation, 120 | bool isDiscrete = false, 121 | bool isEnabled = false, 122 | bool? isOnTop, 123 | bool? isPressed, 124 | required SliderThemeData sliderTheme, 125 | TextDirection textDirection = TextDirection.ltr, 126 | Thumb thumb = Thumb.start, 127 | }) { 128 | final Canvas canvas = context.canvas; 129 | final ColorTween colorTween = ColorTween( 130 | begin: sliderTheme.disabledThumbColor, 131 | end: sliderTheme.thumbColor, 132 | ); 133 | 134 | final double size = _thumbSize * sizeTween.evaluate(enableAnimation); 135 | Path thumbPath; 136 | switch (textDirection) { 137 | case TextDirection.rtl: 138 | switch (thumb) { 139 | case Thumb.start: 140 | thumbPath = _rightTriangle(size, center); 141 | break; 142 | case Thumb.end: 143 | thumbPath = _leftTriangle(size, center); 144 | break; 145 | } 146 | break; 147 | case TextDirection.ltr: 148 | switch (thumb) { 149 | case Thumb.start: 150 | thumbPath = _leftTriangle(size, center); 151 | break; 152 | case Thumb.end: 153 | thumbPath = _rightTriangle(size, center); 154 | break; 155 | } 156 | break; 157 | } 158 | 159 | canvas.drawPath( 160 | Path() 161 | ..addOval(Rect.fromPoints(Offset(center.dx + 12, center.dy + 12), 162 | Offset(center.dx - 12, center.dy - 12))) 163 | ..fillType = PathFillType.evenOdd, 164 | Paint() 165 | ..color = Colors.black.withOpacity(0.5) 166 | ..maskFilter = 167 | MaskFilter.blur(BlurStyle.normal, convertRadiusToSigma(8))); 168 | 169 | final Paint cPaint = Paint(); 170 | cPaint..color = Colors.white; 171 | cPaint..strokeWidth = 14 / 2; 172 | canvas.drawCircle(Offset(center.dx, center.dy), 12, cPaint); 173 | cPaint..color = colorTween.evaluate(enableAnimation)!; 174 | canvas.drawCircle(Offset(center.dx, center.dy), 10, cPaint); 175 | canvas.drawPath(thumbPath, Paint()..color = Colors.white); 176 | } 177 | 178 | double convertRadiusToSigma(double radius) { 179 | return radius * 0.57735 + 0.5; 180 | } 181 | 182 | Path _rightTriangle(double size, Offset thumbCenter, {bool invert = false}) { 183 | final Path thumbPath = Path(); 184 | final double sign = invert ? -1.0 : 1.0; 185 | thumbPath.moveTo(thumbCenter.dx + 5 * sign, thumbCenter.dy); 186 | thumbPath.lineTo(thumbCenter.dx - 3 * sign, thumbCenter.dy - 5); 187 | thumbPath.lineTo(thumbCenter.dx - 3 * sign, thumbCenter.dy + 5); 188 | thumbPath.close(); 189 | return thumbPath; 190 | } 191 | 192 | Path _leftTriangle(double size, Offset thumbCenter) => 193 | _rightTriangle(size, thumbCenter, invert: true); 194 | } 195 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/hotel_booking/slider_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'hotel_app_theme.dart'; 4 | 5 | class SliderView extends StatefulWidget { 6 | const SliderView({Key? key, this.onChangedistValue, this.distValue}) 7 | : super(key: key); 8 | 9 | final Function(double)? onChangedistValue; 10 | final double? distValue; 11 | 12 | @override 13 | _SliderViewState createState() => _SliderViewState(); 14 | } 15 | 16 | class _SliderViewState extends State { 17 | double distValue = 50.0; 18 | 19 | @override 20 | void initState() { 21 | distValue = widget.distValue!; 22 | super.initState(); 23 | } 24 | 25 | @override 26 | Widget build(BuildContext context) { 27 | return Container( 28 | child: Column( 29 | children: [ 30 | Row( 31 | children: [ 32 | Expanded( 33 | flex: distValue.round(), 34 | child: const SizedBox(), 35 | ), 36 | Container( 37 | width: 170, 38 | child: Text( 39 | 'Less than ${(distValue / 10).toStringAsFixed(1)} Km', 40 | textAlign: TextAlign.center, 41 | ), 42 | ), 43 | Expanded( 44 | flex: 100 - distValue.round(), 45 | child: const SizedBox(), 46 | ), 47 | ], 48 | ), 49 | SliderTheme( 50 | data: SliderThemeData( 51 | thumbShape: CustomThumbShape(), 52 | ), 53 | child: Slider( 54 | onChanged: (double value) { 55 | setState(() { 56 | distValue = value; 57 | }); 58 | try { 59 | widget.onChangedistValue!(distValue); 60 | } catch (_) {} 61 | }, 62 | min: 0, 63 | max: 100, 64 | activeColor: HotelAppTheme.buildLightTheme().primaryColor, 65 | inactiveColor: Colors.grey.withOpacity(0.4), 66 | divisions: 100, 67 | value: distValue, 68 | ), 69 | ), 70 | ], 71 | ), 72 | ); 73 | } 74 | } 75 | 76 | class CustomThumbShape extends SliderComponentShape { 77 | static const double _thumbSize = 3.0; 78 | static const double _disabledThumbSize = 3.0; 79 | 80 | @override 81 | Size getPreferredSize(bool isEnabled, bool isDiscrete) { 82 | return isEnabled 83 | ? const Size.fromRadius(_thumbSize) 84 | : const Size.fromRadius(_disabledThumbSize); 85 | } 86 | 87 | static final Animatable sizeTween = Tween( 88 | begin: _disabledThumbSize, 89 | end: _thumbSize, 90 | ); 91 | 92 | @override 93 | void paint( 94 | PaintingContext context, 95 | Offset thumbCenter, { 96 | Animation? activationAnimation, 97 | Animation? enableAnimation, 98 | bool? isDiscrete, 99 | TextPainter? labelPainter, 100 | RenderBox? parentBox, 101 | Size? sizeWithOverflow, 102 | SliderThemeData? sliderTheme, 103 | TextDirection textDirection = TextDirection.ltr, 104 | double? textScaleFactor, 105 | double? value, 106 | }) { 107 | final Canvas canvas = context.canvas; 108 | final ColorTween colorTween = ColorTween( 109 | begin: sliderTheme?.disabledThumbColor, 110 | end: sliderTheme?.thumbColor, 111 | ); 112 | canvas.drawPath( 113 | Path() 114 | ..addOval(Rect.fromPoints( 115 | Offset(thumbCenter.dx + 12, thumbCenter.dy + 12), 116 | Offset(thumbCenter.dx - 12, thumbCenter.dy - 12))) 117 | ..fillType = PathFillType.evenOdd, 118 | Paint() 119 | ..color = Colors.black.withOpacity(0.5) 120 | ..maskFilter = 121 | MaskFilter.blur(BlurStyle.normal, convertRadiusToSigma(8))); 122 | 123 | final Paint cPaint = Paint(); 124 | cPaint..color = Colors.white; 125 | cPaint..strokeWidth = 14 / 2; 126 | canvas.drawCircle(Offset(thumbCenter.dx, thumbCenter.dy), 12, cPaint); 127 | cPaint..color = colorTween.evaluate(enableAnimation!)!; 128 | canvas.drawCircle(Offset(thumbCenter.dx, thumbCenter.dy), 10, cPaint); 129 | } 130 | 131 | double convertRadiusToSigma(double radius) { 132 | return radius * 0.57735 + 0.5; 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/care_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CareView extends StatelessWidget { 4 | final AnimationController animationController; 5 | 6 | const CareView({Key? key, required this.animationController}) 7 | : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | final _firstHalfAnimation = 12 | Tween(begin: Offset(1, 0), end: Offset(0, 0)) 13 | .animate(CurvedAnimation( 14 | parent: animationController, 15 | curve: Interval( 16 | 0.2, 17 | 0.4, 18 | curve: Curves.fastOutSlowIn, 19 | ), 20 | )); 21 | final _secondHalfAnimation = 22 | Tween(begin: Offset(0, 0), end: Offset(-1, 0)) 23 | .animate(CurvedAnimation( 24 | parent: animationController, 25 | curve: Interval( 26 | 0.4, 27 | 0.6, 28 | curve: Curves.fastOutSlowIn, 29 | ), 30 | )); 31 | final _relaxFirstHalfAnimation = 32 | Tween(begin: Offset(2, 0), end: Offset(0, 0)) 33 | .animate(CurvedAnimation( 34 | parent: animationController, 35 | curve: Interval( 36 | 0.2, 37 | 0.4, 38 | curve: Curves.fastOutSlowIn, 39 | ), 40 | )); 41 | final _relaxSecondHalfAnimation = 42 | Tween(begin: Offset(0, 0), end: Offset(-2, 0)) 43 | .animate(CurvedAnimation( 44 | parent: animationController, 45 | curve: Interval( 46 | 0.4, 47 | 0.6, 48 | curve: Curves.fastOutSlowIn, 49 | ), 50 | )); 51 | 52 | final _imageFirstHalfAnimation = 53 | Tween(begin: Offset(4, 0), end: Offset(0, 0)) 54 | .animate(CurvedAnimation( 55 | parent: animationController, 56 | curve: Interval( 57 | 0.2, 58 | 0.4, 59 | curve: Curves.fastOutSlowIn, 60 | ), 61 | )); 62 | final _imageSecondHalfAnimation = 63 | Tween(begin: Offset(0, 0), end: Offset(-4, 0)) 64 | .animate(CurvedAnimation( 65 | parent: animationController, 66 | curve: Interval( 67 | 0.4, 68 | 0.6, 69 | curve: Curves.fastOutSlowIn, 70 | ), 71 | )); 72 | 73 | return SlideTransition( 74 | position: _firstHalfAnimation, 75 | child: SlideTransition( 76 | position: _secondHalfAnimation, 77 | child: Padding( 78 | padding: const EdgeInsets.only(bottom: 100), 79 | child: Column( 80 | mainAxisAlignment: MainAxisAlignment.center, 81 | children: [ 82 | SlideTransition( 83 | position: _imageFirstHalfAnimation, 84 | child: SlideTransition( 85 | position: _imageSecondHalfAnimation, 86 | child: Container( 87 | constraints: BoxConstraints(maxWidth: 350, maxHeight: 250), 88 | child: Image.asset( 89 | 'assets/introduction_animation/care_image.png', 90 | fit: BoxFit.contain, 91 | ), 92 | ), 93 | ), 94 | ), 95 | SlideTransition( 96 | position: _relaxFirstHalfAnimation, 97 | child: SlideTransition( 98 | position: _relaxSecondHalfAnimation, 99 | child: Text( 100 | "Care", 101 | style: 102 | TextStyle(fontSize: 26.0, fontWeight: FontWeight.bold), 103 | ), 104 | ), 105 | ), 106 | Padding( 107 | padding: 108 | EdgeInsets.only(left: 64, right: 64, bottom: 16, top: 16), 109 | child: Text( 110 | "Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore", 111 | textAlign: TextAlign.center, 112 | ), 113 | ), 114 | ], 115 | ), 116 | ), 117 | ), 118 | ); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/center_next_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:animations/animations.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class CenterNextButton extends StatelessWidget { 5 | final AnimationController animationController; 6 | final VoidCallback onNextClick; 7 | const CenterNextButton( 8 | {Key? key, required this.animationController, required this.onNextClick}) 9 | : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | final _topMoveAnimation = 14 | Tween(begin: Offset(0, 5), end: Offset(0, 0)) 15 | .animate(CurvedAnimation( 16 | parent: animationController, 17 | curve: Interval( 18 | 0.0, 19 | 0.2, 20 | curve: Curves.fastOutSlowIn, 21 | ), 22 | )); 23 | final _signUpMoveAnimation = 24 | Tween(begin: 0, end: 1.0).animate(CurvedAnimation( 25 | parent: animationController, 26 | curve: Interval( 27 | 0.6, 28 | 0.8, 29 | curve: Curves.fastOutSlowIn, 30 | ), 31 | )); 32 | final _loginTextMoveAnimation = 33 | Tween(begin: Offset(0, 5), end: Offset(0, 0)) 34 | .animate(CurvedAnimation( 35 | parent: animationController, 36 | curve: Interval( 37 | 0.6, 38 | 0.8, 39 | curve: Curves.fastOutSlowIn, 40 | ), 41 | )); 42 | 43 | return Padding( 44 | padding: 45 | EdgeInsets.only(bottom: 16 + MediaQuery.of(context).padding.bottom), 46 | child: Column( 47 | mainAxisAlignment: MainAxisAlignment.end, 48 | crossAxisAlignment: CrossAxisAlignment.center, 49 | children: [ 50 | SlideTransition( 51 | position: _topMoveAnimation, 52 | child: AnimatedBuilder( 53 | animation: animationController, 54 | builder: (context, child) => AnimatedOpacity( 55 | opacity: animationController.value >= 0.2 && 56 | animationController.value <= 0.6 57 | ? 1 58 | : 0, 59 | duration: Duration(milliseconds: 480), 60 | child: _pageView(), 61 | ), 62 | ), 63 | ), 64 | SlideTransition( 65 | position: _topMoveAnimation, 66 | child: AnimatedBuilder( 67 | animation: animationController, 68 | builder: (context, child) => Padding( 69 | padding: EdgeInsets.only( 70 | bottom: 38 - (38 * _signUpMoveAnimation.value)), 71 | child: Container( 72 | height: 58, 73 | width: 58 + (200 * _signUpMoveAnimation.value), 74 | decoration: BoxDecoration( 75 | borderRadius: BorderRadius.circular( 76 | 8 + 32 * (1 - _signUpMoveAnimation.value)), 77 | color: Color(0xff132137), 78 | ), 79 | child: PageTransitionSwitcher( 80 | duration: Duration(milliseconds: 480), 81 | reverse: _signUpMoveAnimation.value < 0.7, 82 | transitionBuilder: ( 83 | Widget child, 84 | Animation animation, 85 | Animation secondaryAnimation, 86 | ) { 87 | return SharedAxisTransition( 88 | fillColor: Colors.transparent, 89 | child: child, 90 | animation: animation, 91 | secondaryAnimation: secondaryAnimation, 92 | transitionType: SharedAxisTransitionType.vertical, 93 | ); 94 | }, 95 | child: _signUpMoveAnimation.value > 0.7 96 | ? InkWell( 97 | key: ValueKey('Sign Up button'), 98 | onTap: onNextClick, 99 | child: Padding( 100 | padding: EdgeInsets.only(left: 16.0, right: 16.0), 101 | child: Row( 102 | mainAxisAlignment: 103 | MainAxisAlignment.spaceBetween, 104 | children: [ 105 | Text( 106 | 'Sign Up', 107 | style: TextStyle( 108 | color: Colors.white, 109 | fontSize: 18, 110 | fontWeight: FontWeight.w500, 111 | ), 112 | ), 113 | Icon(Icons.arrow_forward_rounded, 114 | color: Colors.white), 115 | ], 116 | ), 117 | ), 118 | ) 119 | : InkWell( 120 | key: ValueKey('next button'), 121 | onTap: onNextClick, 122 | child: Padding( 123 | padding: EdgeInsets.all(16.0), 124 | child: Icon(Icons.arrow_forward_ios_rounded, 125 | color: Colors.white), 126 | ), 127 | ), 128 | ), 129 | ), 130 | ), 131 | ), 132 | ), 133 | Padding( 134 | padding: const EdgeInsets.only(top: 8), 135 | child: SlideTransition( 136 | position: _loginTextMoveAnimation, 137 | child: Row( 138 | mainAxisAlignment: MainAxisAlignment.center, 139 | children: [ 140 | Text( 141 | 'Already have an account? ', 142 | style: TextStyle( 143 | color: Colors.grey, 144 | fontSize: 14, 145 | fontWeight: FontWeight.normal, 146 | ), 147 | ), 148 | Text( 149 | 'Login', 150 | style: TextStyle( 151 | color: Color(0xff132137), 152 | fontSize: 16, 153 | fontWeight: FontWeight.bold, 154 | ), 155 | ), 156 | ], 157 | ), 158 | ), 159 | ), 160 | ], 161 | ), 162 | ); 163 | } 164 | 165 | Widget _pageView() { 166 | int _selectedIndex = 0; 167 | 168 | if (animationController.value >= 0.7) { 169 | _selectedIndex = 3; 170 | } else if (animationController.value >= 0.5) { 171 | _selectedIndex = 2; 172 | } else if (animationController.value >= 0.3) { 173 | _selectedIndex = 1; 174 | } else if (animationController.value >= 0.1) { 175 | _selectedIndex = 0; 176 | } 177 | 178 | return Padding( 179 | padding: const EdgeInsets.only(bottom: 16), 180 | child: Row( 181 | mainAxisSize: MainAxisSize.min, 182 | children: [ 183 | for (var i = 0; i < 4; i++) 184 | Padding( 185 | padding: const EdgeInsets.all(4), 186 | child: AnimatedContainer( 187 | duration: Duration(milliseconds: 480), 188 | decoration: BoxDecoration( 189 | borderRadius: BorderRadius.circular(32), 190 | color: _selectedIndex == i 191 | ? Color(0xff132137) 192 | : Color(0xffE3E4E4), 193 | ), 194 | width: 10, 195 | height: 10, 196 | ), 197 | ) 198 | ], 199 | ), 200 | ); 201 | } 202 | } 203 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/mood_diary_vew.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MoodDiaryVew extends StatelessWidget { 4 | final AnimationController animationController; 5 | 6 | const MoodDiaryVew({Key? key, required this.animationController}) 7 | : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | final _firstHalfAnimation = 12 | Tween(begin: Offset(1, 0), end: Offset(0, 0)) 13 | .animate(CurvedAnimation( 14 | parent: animationController, 15 | curve: Interval( 16 | 0.4, 17 | 0.6, 18 | curve: Curves.fastOutSlowIn, 19 | ), 20 | )); 21 | final _secondHalfAnimation = 22 | Tween(begin: Offset(0, 0), end: Offset(-1, 0)) 23 | .animate(CurvedAnimation( 24 | parent: animationController, 25 | curve: Interval( 26 | 0.6, 27 | 0.8, 28 | curve: Curves.fastOutSlowIn, 29 | ), 30 | )); 31 | 32 | final _moodFirstHalfAnimation = 33 | Tween(begin: Offset(2, 0), end: Offset(0, 0)) 34 | .animate(CurvedAnimation( 35 | parent: animationController, 36 | curve: Interval( 37 | 0.4, 38 | 0.6, 39 | curve: Curves.fastOutSlowIn, 40 | ), 41 | )); 42 | final _moodSecondHalfAnimation = 43 | Tween(begin: Offset(0, 0), end: Offset(-2, 0)) 44 | .animate(CurvedAnimation( 45 | parent: animationController, 46 | curve: Interval( 47 | 0.6, 48 | 0.8, 49 | curve: Curves.fastOutSlowIn, 50 | ), 51 | )); 52 | final _imageFirstHalfAnimation = 53 | Tween(begin: Offset(4, 0), end: Offset(0, 0)) 54 | .animate(CurvedAnimation( 55 | parent: animationController, 56 | curve: Interval( 57 | 0.4, 58 | 0.6, 59 | curve: Curves.fastOutSlowIn, 60 | ), 61 | )); 62 | final _imageSecondHalfAnimation = 63 | Tween(begin: Offset(0, 0), end: Offset(-4, 0)) 64 | .animate(CurvedAnimation( 65 | parent: animationController, 66 | curve: Interval( 67 | 0.6, 68 | 0.8, 69 | curve: Curves.fastOutSlowIn, 70 | ), 71 | )); 72 | 73 | return SlideTransition( 74 | position: _firstHalfAnimation, 75 | child: SlideTransition( 76 | position: _secondHalfAnimation, 77 | child: Padding( 78 | padding: const EdgeInsets.only(bottom: 100), 79 | child: Column( 80 | mainAxisAlignment: MainAxisAlignment.center, 81 | children: [ 82 | Text( 83 | "Mood Dairy", 84 | style: TextStyle(fontSize: 26.0, fontWeight: FontWeight.bold), 85 | ), 86 | SlideTransition( 87 | position: _moodFirstHalfAnimation, 88 | child: SlideTransition( 89 | position: _moodSecondHalfAnimation, 90 | child: Padding( 91 | padding: EdgeInsets.only( 92 | left: 64, right: 64, top: 16, bottom: 16), 93 | child: Text( 94 | "Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore", 95 | textAlign: TextAlign.center, 96 | ), 97 | ), 98 | ), 99 | ), 100 | SlideTransition( 101 | position: _imageFirstHalfAnimation, 102 | child: SlideTransition( 103 | position: _imageSecondHalfAnimation, 104 | child: Container( 105 | constraints: BoxConstraints(maxWidth: 350, maxHeight: 250), 106 | child: Image.asset( 107 | 'assets/introduction_animation/mood_dairy_image.png', 108 | fit: BoxFit.contain, 109 | ), 110 | ), 111 | ), 112 | ), 113 | ], 114 | ), 115 | ), 116 | ), 117 | ); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/relax_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class RelaxView extends StatelessWidget { 4 | final AnimationController animationController; 5 | 6 | const RelaxView({Key? key, required this.animationController}) 7 | : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | final _firstHalfAnimation = 12 | Tween(begin: Offset(0, 1), end: Offset(0, 0)).animate( 13 | CurvedAnimation( 14 | parent: animationController, 15 | curve: Interval( 16 | 0.0, 17 | 0.2, 18 | curve: Curves.fastOutSlowIn, 19 | ), 20 | ), 21 | ); 22 | final _secondHalfAnimation = 23 | Tween(begin: Offset(0, 0), end: Offset(-1, 0)).animate( 24 | CurvedAnimation( 25 | parent: animationController, 26 | curve: Interval( 27 | 0.2, 28 | 0.4, 29 | curve: Curves.fastOutSlowIn, 30 | ), 31 | ), 32 | ); 33 | final _textAnimation = 34 | Tween(begin: Offset(0, 0), end: Offset(-2, 0)).animate( 35 | CurvedAnimation( 36 | parent: animationController, 37 | curve: Interval( 38 | 0.2, 39 | 0.4, 40 | curve: Curves.fastOutSlowIn, 41 | ), 42 | ), 43 | ); 44 | final _imageAnimation = 45 | Tween(begin: Offset(0, 0), end: Offset(-4, 0)).animate( 46 | CurvedAnimation( 47 | parent: animationController, 48 | curve: Interval( 49 | 0.2, 50 | 0.4, 51 | curve: Curves.fastOutSlowIn, 52 | ), 53 | ), 54 | ); 55 | 56 | final _relaxAnimation = 57 | Tween(begin: Offset(0, -2), end: Offset(0, 0)).animate( 58 | CurvedAnimation( 59 | parent: animationController, 60 | curve: Interval( 61 | 0.0, 62 | 0.2, 63 | curve: Curves.fastOutSlowIn, 64 | ), 65 | ), 66 | ); 67 | return SlideTransition( 68 | position: _firstHalfAnimation, 69 | child: SlideTransition( 70 | position: _secondHalfAnimation, 71 | child: Padding( 72 | padding: const EdgeInsets.only(bottom: 100), 73 | child: Column( 74 | mainAxisAlignment: MainAxisAlignment.center, 75 | children: [ 76 | SlideTransition( 77 | position: _relaxAnimation, 78 | child: Text( 79 | "Relax", 80 | style: TextStyle(fontSize: 26.0, fontWeight: FontWeight.bold), 81 | ), 82 | ), 83 | SlideTransition( 84 | position: _textAnimation, 85 | child: Padding( 86 | padding: 87 | EdgeInsets.only(left: 64, right: 64, top: 16, bottom: 16), 88 | child: Text( 89 | "Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore", 90 | textAlign: TextAlign.center, 91 | ), 92 | ), 93 | ), 94 | SlideTransition( 95 | position: _imageAnimation, 96 | child: Container( 97 | constraints: BoxConstraints(maxWidth: 350, maxHeight: 250), 98 | child: Image.asset( 99 | 'assets/introduction_animation/relax_image.png', 100 | fit: BoxFit.contain, 101 | ), 102 | ), 103 | ), 104 | ], 105 | ), 106 | ), 107 | ), 108 | ); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/splash_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SplashView extends StatefulWidget { 4 | final AnimationController animationController; 5 | 6 | const SplashView({Key? key, required this.animationController}) 7 | : super(key: key); 8 | 9 | @override 10 | _SplashViewState createState() => _SplashViewState(); 11 | } 12 | 13 | class _SplashViewState extends State { 14 | @override 15 | Widget build(BuildContext context) { 16 | final _introductionanimation = 17 | Tween(begin: Offset(0, 0), end: Offset(0.0, -1.0)) 18 | .animate(CurvedAnimation( 19 | parent: widget.animationController, 20 | curve: Interval( 21 | 0.0, 22 | 0.2, 23 | curve: Curves.fastOutSlowIn, 24 | ), 25 | )); 26 | return SlideTransition( 27 | position: _introductionanimation, 28 | child: SingleChildScrollView( 29 | child: Column( 30 | children: [ 31 | SizedBox( 32 | width: MediaQuery.of(context).size.width, 33 | child: Image.asset( 34 | 'assets/introduction_animation/introduction_image.png', 35 | fit: BoxFit.cover, 36 | ), 37 | ), 38 | Padding( 39 | padding: EdgeInsets.only(top: 8.0, bottom: 8.0), 40 | child: Text( 41 | "Clearhead", 42 | style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold), 43 | ), 44 | ), 45 | Padding( 46 | padding: EdgeInsets.only(left: 64, right: 64), 47 | child: Text( 48 | "Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore", 49 | textAlign: TextAlign.center, 50 | ), 51 | ), 52 | SizedBox( 53 | height: 48, 54 | ), 55 | Padding( 56 | padding: EdgeInsets.only( 57 | bottom: MediaQuery.of(context).padding.bottom + 16), 58 | child: InkWell( 59 | onTap: () { 60 | widget.animationController.animateTo(0.2); 61 | }, 62 | child: Container( 63 | height: 58, 64 | padding: EdgeInsets.only( 65 | left: 56.0, 66 | right: 56.0, 67 | top: 16, 68 | bottom: 16, 69 | ), 70 | decoration: BoxDecoration( 71 | borderRadius: BorderRadius.circular(38.0), 72 | color: Color(0xff132137), 73 | ), 74 | child: Text( 75 | "Let's begin", 76 | style: TextStyle( 77 | fontSize: 18, 78 | color: Colors.white, 79 | ), 80 | ), 81 | ), 82 | ), 83 | ), 84 | ], 85 | ), 86 | ), 87 | ); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/top_back_skip_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TopBackSkipView extends StatelessWidget { 4 | final AnimationController animationController; 5 | final VoidCallback onBackClick; 6 | final VoidCallback onSkipClick; 7 | 8 | const TopBackSkipView({ 9 | Key? key, 10 | required this.onBackClick, 11 | required this.onSkipClick, 12 | required this.animationController, 13 | }) : super(key: key); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | final _animation = 18 | Tween(begin: Offset(0, -1), end: Offset(0.0, 0.0)) 19 | .animate(CurvedAnimation( 20 | parent: animationController, 21 | curve: Interval( 22 | 0.0, 23 | 0.2, 24 | curve: Curves.fastOutSlowIn, 25 | ), 26 | )); 27 | 28 | // final _backAnimation = 29 | // Tween(begin: Offset(0, 0), end: Offset(-2, 0)) 30 | // .animate(CurvedAnimation( 31 | // parent: animationController, 32 | // curve: Interval( 33 | // 0.6, 34 | // 0.8, 35 | // curve: Curves.fastOutSlowIn, 36 | // ), 37 | // )); 38 | final _skipAnimation = Tween(begin: Offset(0, 0), end: Offset(2, 0)) 39 | .animate(CurvedAnimation( 40 | parent: animationController, 41 | curve: Interval( 42 | 0.6, 43 | 0.8, 44 | curve: Curves.fastOutSlowIn, 45 | ), 46 | )); 47 | 48 | return SlideTransition( 49 | position: _animation, 50 | child: Padding( 51 | padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top), 52 | child: Container( 53 | height: 58, 54 | child: Padding( 55 | padding: const EdgeInsets.only(left: 8, right: 16), 56 | child: Row( 57 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 58 | children: [ 59 | // SlideTransition( 60 | // position: _backAnimation, 61 | // child: 62 | IconButton( 63 | onPressed: onBackClick, 64 | icon: Icon(Icons.arrow_back_ios_new_rounded), 65 | // ), 66 | ), 67 | SlideTransition( 68 | position: _skipAnimation, 69 | child: IconButton( 70 | onPressed: onSkipClick, 71 | icon: Text('Skip'), 72 | ), 73 | ), 74 | ], 75 | ), 76 | ), 77 | ), 78 | ), 79 | ); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/components/welcome_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WelcomeView extends StatelessWidget { 4 | final AnimationController animationController; 5 | const WelcomeView({Key? key, required this.animationController}) 6 | : super(key: key); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | final _firstHalfAnimation = 11 | Tween(begin: Offset(1, 0), end: Offset(0, 0)).animate( 12 | CurvedAnimation( 13 | parent: animationController, 14 | curve: Interval( 15 | 0.6, 16 | 0.8, 17 | curve: Curves.fastOutSlowIn, 18 | ), 19 | ), 20 | ); 21 | final _secondHalfAnimation = 22 | Tween(begin: Offset(0, 0), end: Offset(-1, 0)).animate( 23 | CurvedAnimation( 24 | parent: animationController, 25 | curve: Interval( 26 | 0.8, 27 | 1.0, 28 | curve: Curves.fastOutSlowIn, 29 | ), 30 | ), 31 | ); 32 | 33 | final _welcomeFirstHalfAnimation = 34 | Tween(begin: Offset(2, 0), end: Offset(0, 0)) 35 | .animate(CurvedAnimation( 36 | parent: animationController, 37 | curve: Interval( 38 | 0.6, 39 | 0.8, 40 | curve: Curves.fastOutSlowIn, 41 | ), 42 | )); 43 | 44 | final _welcomeImageAnimation = 45 | Tween(begin: Offset(4, 0), end: Offset(0, 0)) 46 | .animate(CurvedAnimation( 47 | parent: animationController, 48 | curve: Interval( 49 | 0.6, 50 | 0.8, 51 | curve: Curves.fastOutSlowIn, 52 | ), 53 | )); 54 | return SlideTransition( 55 | position: _firstHalfAnimation, 56 | child: SlideTransition( 57 | position: _secondHalfAnimation, 58 | child: Padding( 59 | padding: const EdgeInsets.only(bottom: 100), 60 | child: Column( 61 | mainAxisAlignment: MainAxisAlignment.center, 62 | children: [ 63 | SlideTransition( 64 | position: _welcomeImageAnimation, 65 | child: Container( 66 | constraints: BoxConstraints(maxWidth: 350, maxHeight: 350), 67 | child: Image.asset( 68 | 'assets/introduction_animation/welcome.png', 69 | fit: BoxFit.contain, 70 | ), 71 | ), 72 | ), 73 | SlideTransition( 74 | position: _welcomeFirstHalfAnimation, 75 | child: Text( 76 | "Welcome", 77 | style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold), 78 | ), 79 | ), 80 | Padding( 81 | padding: 82 | EdgeInsets.only(left: 64, right: 64, top: 16, bottom: 16), 83 | child: Text( 84 | "Stay organised and live stress-free with you-do app", 85 | textAlign: TextAlign.center, 86 | ), 87 | ), 88 | ], 89 | ), 90 | ), 91 | ), 92 | ); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/introduction_animation/introduction_animation_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/introduction_animation/components/care_view.dart'; 2 | import 'package:best_flutter_ui_templates/introduction_animation/components/center_next_button.dart'; 3 | import 'package:best_flutter_ui_templates/introduction_animation/components/mood_diary_vew.dart'; 4 | import 'package:best_flutter_ui_templates/introduction_animation/components/relax_view.dart'; 5 | import 'package:best_flutter_ui_templates/introduction_animation/components/splash_view.dart'; 6 | import 'package:best_flutter_ui_templates/introduction_animation/components/top_back_skip_view.dart'; 7 | import 'package:best_flutter_ui_templates/introduction_animation/components/welcome_view.dart'; 8 | import 'package:flutter/material.dart'; 9 | 10 | class IntroductionAnimationScreen extends StatefulWidget { 11 | const IntroductionAnimationScreen({Key? key}) : super(key: key); 12 | 13 | @override 14 | _IntroductionAnimationScreenState createState() => 15 | _IntroductionAnimationScreenState(); 16 | } 17 | 18 | class _IntroductionAnimationScreenState 19 | extends State with TickerProviderStateMixin { 20 | AnimationController? _animationController; 21 | 22 | @override 23 | void initState() { 24 | _animationController = 25 | AnimationController(vsync: this, duration: Duration(seconds: 8)); 26 | _animationController?.animateTo(0.0); 27 | super.initState(); 28 | } 29 | 30 | @override 31 | void dispose() { 32 | _animationController?.dispose(); 33 | super.dispose(); 34 | } 35 | 36 | @override 37 | Widget build(BuildContext context) { 38 | print(_animationController?.value); 39 | return Scaffold( 40 | backgroundColor: Color(0xffF7EBE1), 41 | body: ClipRect( 42 | child: Stack( 43 | children: [ 44 | SplashView( 45 | animationController: _animationController!, 46 | ), 47 | RelaxView( 48 | animationController: _animationController!, 49 | ), 50 | CareView( 51 | animationController: _animationController!, 52 | ), 53 | MoodDiaryVew( 54 | animationController: _animationController!, 55 | ), 56 | WelcomeView( 57 | animationController: _animationController!, 58 | ), 59 | TopBackSkipView( 60 | onBackClick: _onBackClick, 61 | onSkipClick: _onSkipClick, 62 | animationController: _animationController!, 63 | ), 64 | CenterNextButton( 65 | animationController: _animationController!, 66 | onNextClick: _onNextClick, 67 | ), 68 | ], 69 | ), 70 | ), 71 | ); 72 | } 73 | 74 | void _onSkipClick() { 75 | _animationController?.animateTo(0.8, 76 | duration: Duration(milliseconds: 1200)); 77 | } 78 | 79 | void _onBackClick() { 80 | if (_animationController!.value >= 0 && 81 | _animationController!.value <= 0.2) { 82 | _animationController?.animateTo(0.0); 83 | } else if (_animationController!.value > 0.2 && 84 | _animationController!.value <= 0.4) { 85 | _animationController?.animateTo(0.2); 86 | } else if (_animationController!.value > 0.4 && 87 | _animationController!.value <= 0.6) { 88 | _animationController?.animateTo(0.4); 89 | } else if (_animationController!.value > 0.6 && 90 | _animationController!.value <= 0.8) { 91 | _animationController?.animateTo(0.6); 92 | } else if (_animationController!.value > 0.8 && 93 | _animationController!.value <= 1.0) { 94 | _animationController?.animateTo(0.8); 95 | } 96 | } 97 | 98 | void _onNextClick() { 99 | if (_animationController!.value >= 0 && 100 | _animationController!.value <= 0.2) { 101 | _animationController?.animateTo(0.4); 102 | } else if (_animationController!.value > 0.2 && 103 | _animationController!.value <= 0.4) { 104 | _animationController?.animateTo(0.6); 105 | } else if (_animationController!.value > 0.4 && 106 | _animationController!.value <= 0.6) { 107 | _animationController?.animateTo(0.8); 108 | } else if (_animationController!.value > 0.6 && 109 | _animationController!.value <= 0.8) { 110 | _signUpClick(); 111 | } 112 | } 113 | 114 | void _signUpClick() { 115 | Navigator.pop(context); 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/invite_friend_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/app_theme.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class InviteFriend extends StatefulWidget { 5 | @override 6 | _InviteFriendState createState() => _InviteFriendState(); 7 | } 8 | 9 | class _InviteFriendState extends State { 10 | @override 11 | void initState() { 12 | super.initState(); 13 | } 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | var brightness = MediaQuery.of(context).platformBrightness; 18 | bool isLightMode = brightness == Brightness.light; 19 | return Container( 20 | color: isLightMode ? AppTheme.white : AppTheme.nearlyBlack, 21 | child: SafeArea( 22 | top: false, 23 | child: Scaffold( 24 | backgroundColor: isLightMode ? AppTheme.white : AppTheme.nearlyBlack, 25 | body: Column( 26 | children: [ 27 | Container( 28 | padding: EdgeInsets.only( 29 | top: MediaQuery.of(context).padding.top, 30 | left: 16, 31 | right: 16), 32 | child: Image.asset('assets/images/inviteImage.png'), 33 | ), 34 | Container( 35 | padding: const EdgeInsets.only(top: 8), 36 | child: Text( 37 | 'Invite Your Friends', 38 | style: TextStyle( 39 | fontSize: 20, 40 | fontWeight: FontWeight.bold, 41 | color: isLightMode ? Colors.black : Colors.white, 42 | ), 43 | ), 44 | ), 45 | Container( 46 | padding: const EdgeInsets.only(top: 16), 47 | child: Text( 48 | 'Are you one of those who makes everything\n at the last moment?', 49 | textAlign: TextAlign.center, 50 | style: TextStyle( 51 | fontSize: 16, 52 | color: isLightMode ? Colors.black : Colors.white, 53 | ), 54 | ), 55 | ), 56 | Expanded( 57 | child: Padding( 58 | padding: const EdgeInsets.all(8.0), 59 | child: Center( 60 | child: Container( 61 | width: 120, 62 | height: 40, 63 | decoration: BoxDecoration( 64 | color: isLightMode ? Colors.blue : Colors.white, 65 | borderRadius: 66 | const BorderRadius.all(Radius.circular(4.0)), 67 | boxShadow: [ 68 | BoxShadow( 69 | color: Colors.grey.withOpacity(0.6), 70 | offset: const Offset(4, 4), 71 | blurRadius: 8.0), 72 | ], 73 | ), 74 | child: Material( 75 | color: Colors.transparent, 76 | child: InkWell( 77 | onTap: () { 78 | //method here for functionality 79 | print('Share Action.'); 80 | }, 81 | child: Center( 82 | child: Row( 83 | mainAxisAlignment: MainAxisAlignment.center, 84 | crossAxisAlignment: CrossAxisAlignment.center, 85 | children: [ 86 | Icon( 87 | Icons.share, 88 | color: 89 | isLightMode ? Colors.white : Colors.black, 90 | size: 22, 91 | ), 92 | Padding( 93 | padding: const EdgeInsets.all(4.0), 94 | child: Text( 95 | 'Share', 96 | style: TextStyle( 97 | fontWeight: FontWeight.w500, 98 | color: isLightMode 99 | ? Colors.white 100 | : Colors.black, 101 | ), 102 | ), 103 | ), 104 | ], 105 | ), 106 | ), 107 | ), 108 | ), 109 | ), 110 | ), 111 | ), 112 | ) 113 | ], 114 | ), 115 | ), 116 | ), 117 | ); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:best_flutter_ui_templates/app_theme.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/services.dart'; 5 | import 'navigation_home_screen.dart'; 6 | import 'package:flutter/foundation.dart' show kIsWeb; 7 | 8 | void main() async { 9 | WidgetsFlutterBinding.ensureInitialized(); 10 | await SystemChrome.setPreferredOrientations([ 11 | DeviceOrientation.portraitUp, 12 | DeviceOrientation.portraitDown 13 | ]).then((_) => runApp(MyApp())); 14 | } 15 | 16 | class MyApp extends StatelessWidget { 17 | @override 18 | Widget build(BuildContext context) { 19 | SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( 20 | statusBarColor: Colors.transparent, 21 | statusBarIconBrightness: Brightness.dark, 22 | statusBarBrightness: 23 | !kIsWeb && Platform.isAndroid ? Brightness.dark : Brightness.light, 24 | systemNavigationBarColor: Colors.white, 25 | systemNavigationBarDividerColor: Colors.transparent, 26 | systemNavigationBarIconBrightness: Brightness.dark, 27 | )); 28 | return MaterialApp( 29 | title: 'Flutter UI', 30 | debugShowCheckedModeBanner: false, 31 | theme: ThemeData( 32 | primarySwatch: Colors.blue, 33 | textTheme: AppTheme.textTheme, 34 | platform: TargetPlatform.iOS, 35 | ), 36 | home: NavigationHomeScreen(), 37 | ); 38 | } 39 | } 40 | 41 | class HexColor extends Color { 42 | HexColor(final String hexColor) : super(_getColorFromHex(hexColor)); 43 | 44 | static int _getColorFromHex(String hexColor) { 45 | hexColor = hexColor.toUpperCase().replaceAll('#', ''); 46 | if (hexColor.length == 6) { 47 | hexColor = 'FF' + hexColor; 48 | } 49 | return int.parse(hexColor, radix: 16); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/model/homelist.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/design_course/home_design_course.dart'; 2 | import 'package:best_flutter_ui_templates/fitness_app/fitness_app_home_screen.dart'; 3 | import 'package:best_flutter_ui_templates/hotel_booking/hotel_home_screen.dart'; 4 | import 'package:best_flutter_ui_templates/introduction_animation/introduction_animation_screen.dart'; 5 | import 'package:flutter/widgets.dart'; 6 | 7 | class HomeList { 8 | HomeList({ 9 | this.navigateScreen, 10 | this.imagePath = '', 11 | }); 12 | 13 | Widget? navigateScreen; 14 | String imagePath; 15 | 16 | static List homeList = [ 17 | HomeList( 18 | imagePath: 'assets/introduction_animation/introduction_animation.png', 19 | navigateScreen: IntroductionAnimationScreen(), 20 | ), 21 | HomeList( 22 | imagePath: 'assets/hotel/hotel_booking.png', 23 | navigateScreen: HotelHomeScreen(), 24 | ), 25 | HomeList( 26 | imagePath: 'assets/fitness_app/fitness_app.png', 27 | navigateScreen: FitnessAppHomeScreen(), 28 | ), 29 | HomeList( 30 | imagePath: 'assets/design_course/design_course.png', 31 | navigateScreen: DesignCourseHomeScreen(), 32 | ), 33 | ]; 34 | } 35 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/lib/navigation_home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:best_flutter_ui_templates/app_theme.dart'; 2 | import 'package:best_flutter_ui_templates/custom_drawer/drawer_user_controller.dart'; 3 | import 'package:best_flutter_ui_templates/custom_drawer/home_drawer.dart'; 4 | import 'package:best_flutter_ui_templates/feedback_screen.dart'; 5 | import 'package:best_flutter_ui_templates/help_screen.dart'; 6 | import 'package:best_flutter_ui_templates/home_screen.dart'; 7 | import 'package:best_flutter_ui_templates/invite_friend_screen.dart'; 8 | import 'package:flutter/material.dart'; 9 | 10 | class NavigationHomeScreen extends StatefulWidget { 11 | @override 12 | _NavigationHomeScreenState createState() => _NavigationHomeScreenState(); 13 | } 14 | 15 | class _NavigationHomeScreenState extends State { 16 | Widget? screenView; 17 | DrawerIndex? drawerIndex; 18 | 19 | @override 20 | void initState() { 21 | drawerIndex = DrawerIndex.HOME; 22 | screenView = const MyHomePage(); 23 | super.initState(); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Container( 29 | color: AppTheme.white, 30 | child: SafeArea( 31 | top: false, 32 | bottom: false, 33 | child: Scaffold( 34 | backgroundColor: AppTheme.nearlyWhite, 35 | body: DrawerUserController( 36 | screenIndex: drawerIndex, 37 | drawerWidth: MediaQuery.of(context).size.width * 0.75, 38 | onDrawerCall: (DrawerIndex drawerIndexdata) { 39 | changeIndex(drawerIndexdata); 40 | //callback from drawer for replace screen as user need with passing DrawerIndex(Enum index) 41 | }, 42 | screenView: screenView, 43 | //we replace screen view as we need on navigate starting screens like MyHomePage, HelpScreen, FeedbackScreen, etc... 44 | ), 45 | ), 46 | ), 47 | ); 48 | } 49 | 50 | void changeIndex(DrawerIndex drawerIndexdata) { 51 | if (drawerIndex != drawerIndexdata) { 52 | drawerIndex = drawerIndexdata; 53 | switch (drawerIndex) { 54 | case DrawerIndex.HOME: 55 | setState(() { 56 | screenView = const MyHomePage(); 57 | }); 58 | break; 59 | case DrawerIndex.Help: 60 | setState(() { 61 | screenView = HelpScreen(); 62 | }); 63 | break; 64 | case DrawerIndex.FeedBack: 65 | setState(() { 66 | screenView = FeedbackScreen(); 67 | }); 68 | break; 69 | case DrawerIndex.Invite: 70 | setState(() { 71 | screenView = InviteFriend(); 72 | }); 73 | break; 74 | default: 75 | break; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | animations: 5 | dependency: "direct main" 6 | description: 7 | name: animations 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.0.3" 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 | cupertino_icons: 47 | dependency: "direct main" 48 | description: 49 | name: cupertino_icons 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.0.2" 53 | fake_async: 54 | dependency: transitive 55 | description: 56 | name: fake_async 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "1.3.1" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_rating_bar: 66 | dependency: "direct main" 67 | description: 68 | name: flutter_rating_bar 69 | url: "https://pub.dartlang.org" 70 | source: hosted 71 | version: "4.0.1" 72 | flutter_test: 73 | dependency: "direct dev" 74 | description: flutter 75 | source: sdk 76 | version: "0.0.0" 77 | font_awesome_flutter: 78 | dependency: "direct main" 79 | description: 80 | name: font_awesome_flutter 81 | url: "https://pub.dartlang.org" 82 | source: hosted 83 | version: "10.1.0" 84 | intl: 85 | dependency: "direct main" 86 | description: 87 | name: intl 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "0.17.0" 91 | matcher: 92 | dependency: transitive 93 | description: 94 | name: matcher 95 | url: "https://pub.dartlang.org" 96 | source: hosted 97 | version: "0.12.12" 98 | material_color_utilities: 99 | dependency: transitive 100 | description: 101 | name: material_color_utilities 102 | url: "https://pub.dartlang.org" 103 | source: hosted 104 | version: "0.1.5" 105 | meta: 106 | dependency: transitive 107 | description: 108 | name: meta 109 | url: "https://pub.dartlang.org" 110 | source: hosted 111 | version: "1.8.0" 112 | path: 113 | dependency: transitive 114 | description: 115 | name: path 116 | url: "https://pub.dartlang.org" 117 | source: hosted 118 | version: "1.8.2" 119 | sky_engine: 120 | dependency: transitive 121 | description: flutter 122 | source: sdk 123 | version: "0.0.99" 124 | source_span: 125 | dependency: transitive 126 | description: 127 | name: source_span 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "1.9.0" 131 | stack_trace: 132 | dependency: transitive 133 | description: 134 | name: stack_trace 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "1.10.0" 138 | stream_channel: 139 | dependency: transitive 140 | description: 141 | name: stream_channel 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "2.1.0" 145 | string_scanner: 146 | dependency: transitive 147 | description: 148 | name: string_scanner 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "1.1.1" 152 | term_glyph: 153 | dependency: transitive 154 | description: 155 | name: term_glyph 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "1.2.1" 159 | test_api: 160 | dependency: transitive 161 | description: 162 | name: test_api 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "0.4.12" 166 | vector_math: 167 | dependency: transitive 168 | description: 169 | name: vector_math 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "2.1.2" 173 | sdks: 174 | dart: ">=2.17.5 <3.0.0" 175 | flutter: ">=3.0.0" 176 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: best_flutter_ui_templates 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: "none" 7 | # Remove this line if you wish to publish to pub.dev 8 | 9 | # The following defines the version and build number for your application. 10 | # A version number is three numbers separated by dots, like 1.2.43 11 | # followed by an optional build number separated by a +. 12 | # Both the version and the builder number may be overridden in flutter 13 | # build by specifying --build-name and --build-number, respectively. 14 | # In Android, build-name is used as versionName while build-number used as versionCode. 15 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 16 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 17 | # Read more about iOS versioning at 18 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 19 | version: 1.0.0+1 20 | 21 | environment: 22 | sdk: ">=2.17.5 <3.0.0" 23 | 24 | dependencies: 25 | flutter: 26 | sdk: flutter 27 | 28 | # The following adds the Cupertino Icons font to your application. 29 | # Use with the CupertinoIcons class for iOS style icons. 30 | cupertino_icons: ^1.0.2 31 | font_awesome_flutter: ^10.1.0 32 | flutter_rating_bar: ^4.0.1 33 | intl: ^0.17.0 34 | animations: ^2.0.3 35 | 36 | dev_dependencies: 37 | flutter_test: 38 | sdk: flutter 39 | 40 | # For information on the generic Dart part of this file, see the 41 | # following page: https://dart.dev/tools/pub/pubspec 42 | 43 | # The following section is specific to Flutter. 44 | flutter: 45 | # The following line ensures that the Material Icons font is 46 | # included with your application, so that you can use the icons in 47 | # the material Icons class. 48 | uses-material-design: true 49 | 50 | # To add assets to your application, add an assets section, like this: 51 | assets: 52 | - assets/images/ 53 | - assets/design_course/ 54 | - assets/fitness_app/ 55 | - assets/hotel/ 56 | - assets/introduction_animation/ 57 | 58 | # An image asset can refer to one or more resolution-specific "variants", see 59 | # https://flutter.dev/assets-and-images/#resolution-aware. 60 | 61 | # For details regarding adding assets from package dependencies, see 62 | # https://flutter.dev/assets-and-images/#from-packages 63 | 64 | # To add custom fonts to your application, add a fonts section here, 65 | # in this "flutter" section. Each entry in this list should have a 66 | # "family" key with the font family name, and a "fonts" key with a 67 | # list giving the asset and other descriptors for the font. For 68 | # example: 69 | fonts: 70 | - family: WorkSans 71 | fonts: 72 | - asset: assets/fonts/WorkSans-Regular.ttf 73 | - asset: assets/fonts/WorkSans-Medium.ttf 74 | weight: 500 75 | - asset: assets/fonts/WorkSans-SemiBold.ttf 76 | weight: 600 77 | - asset: assets/fonts/WorkSans-Bold.ttf 78 | weight: 700 79 | - family: Roboto 80 | fonts: 81 | - asset: assets/fonts/Roboto-Bold.ttf 82 | - asset: assets/fonts/Roboto-Regular.ttf 83 | - asset: assets/fonts/Roboto-Medium.ttf 84 | weight: 400 85 | # 86 | # For details regarding fonts from package dependencies, 87 | # see https://flutter.dev/custom-fonts/#from-packages 88 | -------------------------------------------------------------------------------- /best_flutter_ui_templates/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 that Flutter provides. 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:best_flutter_ui_templates/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(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 | --------------------------------------------------------------------------------