├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── moisessc
│ │ │ │ └── flutter_samples
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── 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-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── common
│ ├── fonts
│ │ ├── Lexend
│ │ │ ├── Lexend-Bold.ttf
│ │ │ ├── Lexend-ExtraBold.ttf
│ │ │ ├── Lexend-Light.ttf
│ │ │ ├── Lexend-Medium.ttf
│ │ │ ├── Lexend-Regular.ttf
│ │ │ ├── Lexend-SemiBold.ttf
│ │ │ ├── Lexend-Thin.ttf
│ │ │ └── OFL.txt
│ │ └── Mulish
│ │ │ ├── Mulish-Black.ttf
│ │ │ ├── Mulish-BlackItalic.ttf
│ │ │ ├── Mulish-Bold.ttf
│ │ │ ├── Mulish-BoldItalic.ttf
│ │ │ ├── Mulish-ExtraBold.ttf
│ │ │ ├── Mulish-ExtraBoldItalic.ttf
│ │ │ ├── Mulish-ExtraLight.ttf
│ │ │ ├── Mulish-ExtraLightItalic.ttf
│ │ │ ├── Mulish-Italic.ttf
│ │ │ ├── Mulish-Light.ttf
│ │ │ ├── Mulish-LightItalic.ttf
│ │ │ ├── Mulish-Medium.ttf
│ │ │ ├── Mulish-MediumItalic.ttf
│ │ │ ├── Mulish-Regular.ttf
│ │ │ ├── Mulish-SemiBold.ttf
│ │ │ └── Mulish-SemiBoldItalic.ttf
│ └── images
│ │ └── profile_image.jpg
├── delivery_app
│ ├── icons
│ │ ├── hamburger.svg
│ │ ├── menu.svg
│ │ ├── pizza.svg
│ │ ├── shrimp.svg
│ │ ├── soda.svg
│ │ └── spaghetti.svg
│ └── images
│ │ ├── cheese.png
│ │ ├── onion.png
│ │ ├── peperoni.png
│ │ ├── pizza_primavera.png
│ │ ├── pizza_uno.png
│ │ └── tomatos.png
└── facebook_ui
│ ├── icons
│ ├── back-arrow.svg
│ ├── comment_icon.svg
│ ├── dark_mode_icon.png
│ ├── friends_icon.svg
│ ├── games_icon.svg
│ ├── globe.svg
│ ├── heart_icon.svg
│ ├── home_icon.svg
│ ├── jobs_icon.svg
│ ├── like_icon.svg
│ ├── menu_icon.svg
│ ├── saved_icon.svg
│ ├── search_icon.svg
│ ├── share_icon.svg
│ ├── shopping_color_icon.svg
│ ├── shopping_icon.svg
│ ├── smile_icon.png
│ ├── smile_icon.svg
│ ├── watch_color_icon.svg
│ └── watch_icon.svg
│ └── images
│ ├── collections
│ ├── 1.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ └── 5.jpg
│ ├── covid_background.svg
│ ├── people
│ ├── cloe_thompson.jpeg
│ ├── daniela_fernandez(2).png
│ ├── daniela_fernandez.png
│ ├── fernanda.png
│ ├── james.png
│ ├── james_paul.jpeg
│ ├── kate_rob.jpeg
│ ├── mao_lop.png
│ ├── marcus_dail.jpeg
│ ├── michael_bruno.png
│ ├── michael_gais.png
│ ├── samanta_smith.jpeg
│ ├── sarai_perez.png
│ └── wilber_garcia.png
│ ├── profile
│ └── coverage.jpeg
│ ├── settings_ago.png
│ └── stories
│ ├── cloe_preview.png
│ ├── fernanda_preview.png
│ ├── james_preview.png
│ ├── marcus_preview.png
│ └── samanta_preview.png
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── 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
└── build
│ └── XCBuildData
│ ├── 2d58c78e9522e6781a13a2d79bfd2ac1-desc.xcbuild
│ ├── 2d58c78e9522e6781a13a2d79bfd2ac1-manifest.xcbuild
│ ├── 8851e2e3e2baab7498e5f61a8689cde6-desc.xcbuild
│ ├── 8851e2e3e2baab7498e5f61a8689cde6-manifest.xcbuild
│ ├── BuildDescriptionCacheIndex-fdab6e6564df4e9b3f0fbc1015579bf1
│ └── build.db
├── lib
├── delivery_app
│ ├── core
│ │ ├── colors.dart
│ │ └── text_styles.dart
│ ├── data
│ │ ├── categories.dart
│ │ ├── category_state.dart
│ │ └── product_details.dart
│ ├── screens
│ │ ├── detail_screen.dart
│ │ └── main_screen_delivery_food.dart
│ └── widgets
│ │ ├── custom_app_bar.dart
│ │ ├── detail_screen
│ │ ├── details_header.dart
│ │ ├── details_product.dart
│ │ └── list_view_ingredients.dart
│ │ └── main_screen
│ │ ├── custom_circle.dart
│ │ ├── list_view_categories.dart
│ │ ├── list_view_popular_food.dart
│ │ ├── main_header.dart
│ │ └── section_text.dart
├── facebook_ui
│ ├── data
│ │ ├── collections.dart
│ │ ├── friends.dart
│ │ ├── local_providers.dart
│ │ ├── post.dart
│ │ └── storie.dart
│ ├── screens
│ │ ├── home_screen.dart
│ │ ├── profile_screen.dart
│ │ ├── screen_controller.dart
│ │ └── settings_screen.dart
│ ├── theme
│ │ └── theme_state.dart
│ └── widgets
│ │ ├── avatar_icon.dart
│ │ ├── circle_button.dart
│ │ ├── header_app.dart
│ │ ├── home_screen
│ │ ├── posts.dart
│ │ └── stories.dart
│ │ ├── large_button.dart
│ │ ├── navigation_bar.dart
│ │ ├── notification_icon.dart
│ │ └── reaction_icons.dart
├── main.dart
└── utils
│ └── responsive.dart
├── pubspec.lock
├── pubspec.yaml
└── test
└── widget_test.dart
/.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 | **/ios/Flutter/.last_build_id
26 | .dart_tool/
27 | .flutter-plugins
28 | .flutter-plugins-dependencies
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Web related
35 | lib/generated_plugin_registrant.dart
36 |
37 | # Symbolication related
38 | app.*.symbols
39 |
40 | # Obfuscation related
41 | app.*.map.json
42 |
43 | # Android Studio will place build artifacts here
44 | /android/app/debug
45 | /android/app/profile
46 | /android/app/release
47 |
--------------------------------------------------------------------------------
/.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: 8962f6dc68ec8e2206ac2fa874da4a453856c7d3
8 | channel: unknown
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | [](https://pub.dev/packages/very_good_analysis)
4 | 
5 | 
6 | 
7 |
8 | If you like it the content please show me your support :heart: with a star :star:
9 |
10 | ## **Description**
11 | This project contains some sample applications created with Flutter, mainly clones of designs obtained from **dribbble and behance.**
12 |
13 | ---
14 |
15 | ## :rocket: **Getting Started**
16 | 1. If you don't have Flutter, you can find information for install it here! **[Install Flutter](https://flutter.dev/docs/get-started/install)** 👈 👈
17 | 2. Open your terminal and clone this repository in your computer with this command: ```git clone https://github.com/moisessc/flutter_samples.git```
18 | 3. Now go to the cloned repository folder with: ```cd flutter_samples```
19 |
20 | 4. It's time to get all the dependencies, you can do it typing in your terminal: ```flutter pub get```
21 | 5. Make sure your device or emulator is initialized and execute this command: ```flutter run``` and enjoy the samples 🙌
22 |
23 | ---
24 |
25 | ## :iphone: **Flutter clone designs**
26 |
27 | ### **Delivery App :pizza:**
28 | | **Principal screen** | **Details Screen** |
29 | | --- | --- |
30 | |  |  |
31 |
32 | | **Package in the project** | **Design** |
33 | | --- | --- |
34 | | delivery_app | [Food Delivery service - Mobile App](https://dribbble.com/shots/14601764-Food-Delivery-service-Mobile-App) |
35 |
36 | ---
37 |
38 | ### **Facebook Redesign by Mao Lop :eyes:**
39 | ### Light Mode :sunny:
40 | | **Home screen** | **Profile screen** | **Settings screen** |
41 | | --- | --- | --- |
42 | ||||
43 |
44 | ### Dark mode :new_moon:
45 | | **Home screen** | **Profile screen** | **Settings screen** |
46 | | --- | --- | --- |
47 | ||||
48 |
49 |
50 | | **Package in the project** | **Design** |
51 | | --- | --- |
52 | | facebook_ui | [Facebook Redesign Dark Mode](https://dribbble.com/shots/15484818-Facebook-Redesign-Dark-Mode)|
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:very_good_analysis/analysis_options.2.0.0.yaml
2 |
3 | linter:
4 | rules:
5 | public_member_api_docs: false
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion 30
30 |
31 | sourceSets {
32 | main.java.srcDirs += 'src/main/kotlin'
33 | }
34 |
35 | defaultConfig {
36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
37 | applicationId "com.moisessc.flutter_samples"
38 | minSdkVersion 16
39 | targetSdkVersion 30
40 | versionCode flutterVersionCode.toInteger()
41 | versionName flutterVersionName
42 | }
43 |
44 | buildTypes {
45 | release {
46 | // TODO: Add your own signing config for the release build.
47 | // Signing with the debug keys for now, so `flutter run --release` works.
48 | signingConfig signingConfigs.debug
49 | }
50 | }
51 | }
52 |
53 | flutter {
54 | source '../..'
55 | }
56 |
57 | dependencies {
58 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
59 | }
60 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
13 |
17 |
21 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/moisessc/flutter_samples/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.moisessc.flutter_samples
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:4.1.0'
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 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/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-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-Bold.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-ExtraBold.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-Light.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-Medium.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-Regular.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/Lexend-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Lexend/Lexend-Thin.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Lexend/OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2018 The Lexend Project Authors (https://github.com/thomasjockin/lexend), with Reserved Font Name “RevReading Lexend”.
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | http://scripts.sil.org/OFL
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-Black.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-BlackItalic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-Bold.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-ExtraBold.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-ExtraLight.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-Italic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-Light.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-LightItalic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-Medium.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-MediumItalic.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-Regular.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/common/fonts/Mulish/Mulish-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/fonts/Mulish/Mulish-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/common/images/profile_image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/common/images/profile_image.jpg
--------------------------------------------------------------------------------
/assets/delivery_app/icons/hamburger.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/delivery_app/icons/menu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
58 |
--------------------------------------------------------------------------------
/assets/delivery_app/icons/pizza.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/delivery_app/icons/shrimp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
82 |
--------------------------------------------------------------------------------
/assets/delivery_app/images/cheese.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/delivery_app/images/cheese.png
--------------------------------------------------------------------------------
/assets/delivery_app/images/onion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/delivery_app/images/onion.png
--------------------------------------------------------------------------------
/assets/delivery_app/images/peperoni.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/delivery_app/images/peperoni.png
--------------------------------------------------------------------------------
/assets/delivery_app/images/pizza_primavera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/delivery_app/images/pizza_primavera.png
--------------------------------------------------------------------------------
/assets/delivery_app/images/pizza_uno.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/delivery_app/images/pizza_uno.png
--------------------------------------------------------------------------------
/assets/delivery_app/images/tomatos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/delivery_app/images/tomatos.png
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/back-arrow.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/comment_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/dark_mode_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/icons/dark_mode_icon.png
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/friends_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/games_icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/globe.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/heart_icon.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/home_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/jobs_icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/like_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/menu_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/saved_icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/search_icon.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/share_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/shopping_color_icon.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/shopping_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/smile_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/icons/smile_icon.png
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/smile_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/watch_color_icon.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/facebook_ui/icons/watch_icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/facebook_ui/images/collections/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/collections/1.jpg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/collections/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/collections/2.jpg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/collections/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/collections/3.jpg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/collections/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/collections/4.jpg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/collections/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/collections/5.jpg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/cloe_thompson.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/cloe_thompson.jpeg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/daniela_fernandez(2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/daniela_fernandez(2).png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/daniela_fernandez.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/daniela_fernandez.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/fernanda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/fernanda.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/james.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/james.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/james_paul.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/james_paul.jpeg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/kate_rob.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/kate_rob.jpeg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/mao_lop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/mao_lop.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/marcus_dail.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/marcus_dail.jpeg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/michael_bruno.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/michael_bruno.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/michael_gais.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/michael_gais.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/samanta_smith.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/samanta_smith.jpeg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/sarai_perez.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/sarai_perez.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/people/wilber_garcia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/people/wilber_garcia.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/profile/coverage.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/profile/coverage.jpeg
--------------------------------------------------------------------------------
/assets/facebook_ui/images/settings_ago.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/settings_ago.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/stories/cloe_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/stories/cloe_preview.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/stories/fernanda_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/stories/fernanda_preview.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/stories/james_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/stories/james_preview.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/stories/marcus_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/stories/marcus_preview.png
--------------------------------------------------------------------------------
/assets/facebook_ui/images/stories/samanta_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/assets/facebook_ui/images/stories/samanta_preview.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | end
36 |
37 | post_install do |installer|
38 | installer.pods_project.targets.each do |target|
39 | flutter_additional_ios_build_settings(target)
40 | end
41 | end
42 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Flutter (1.0.0)
3 |
4 | DEPENDENCIES:
5 | - Flutter (from `Flutter`)
6 |
7 | EXTERNAL SOURCES:
8 | Flutter:
9 | :path: Flutter
10 |
11 | SPEC CHECKSUMS:
12 | Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
13 |
14 | PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
15 |
16 | COCOAPODS: 1.10.1
17 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | flutter_samples
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/build/XCBuildData/2d58c78e9522e6781a13a2d79bfd2ac1-desc.xcbuild:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/build/XCBuildData/2d58c78e9522e6781a13a2d79bfd2ac1-desc.xcbuild
--------------------------------------------------------------------------------
/ios/build/XCBuildData/8851e2e3e2baab7498e5f61a8689cde6-desc.xcbuild:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/build/XCBuildData/8851e2e3e2baab7498e5f61a8689cde6-desc.xcbuild
--------------------------------------------------------------------------------
/ios/build/XCBuildData/BuildDescriptionCacheIndex-fdab6e6564df4e9b3f0fbc1015579bf1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/build/XCBuildData/BuildDescriptionCacheIndex-fdab6e6564df4e9b3f0fbc1015579bf1
--------------------------------------------------------------------------------
/ios/build/XCBuildData/build.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moisessc/flutter_samples/9461ce9ceebe06abdc3481a9f8cfc4112a7e7b32/ios/build/XCBuildData/build.db
--------------------------------------------------------------------------------
/lib/delivery_app/core/colors.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 | import 'package:flutter/material.dart';
3 |
4 | const kYellow = Color(0xFFFFC91B);
5 | const kYellowCrown = Color(0xFFFFC820);
6 | const kWhite = Color(0xFFFFFFFF);
7 | const kRed = Color(0xFFFA666D);
8 | const kLightGray = Color(0xFFF9F9F9);
9 | const kMiddleBlack = Color(0xFFE6EBE8);
10 | const kLightBlack = Color(0xFFC2C2C2);
11 | const kBlack = Color(0xFF000000);
12 | const kOrange = Color(0xFFFB6428);
13 |
--------------------------------------------------------------------------------
/lib/delivery_app/core/text_styles.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import './colors.dart';
4 |
5 | const kHeader = TextStyle(
6 | fontWeight: FontWeight.w700,
7 | fontSize: 50,
8 | fontFamily: 'Mulish',
9 | );
10 |
11 | const kSubHeader = TextStyle(
12 | fontWeight: FontWeight.w500,
13 | fontSize: 18,
14 | fontFamily: 'Mulish',
15 | );
16 |
17 | const kSection = TextStyle(
18 | fontWeight: FontWeight.w700,
19 | fontSize: 20,
20 | fontFamily: 'Mulish',
21 | );
22 |
23 | const kCategory = TextStyle(
24 | fontWeight: FontWeight.w600,
25 | fontSize: 16,
26 | fontFamily: 'Mulish',
27 | );
28 |
29 | const kTopPopularCard = TextStyle(
30 | fontWeight: FontWeight.w400,
31 | fontSize: 15,
32 | fontFamily: 'Mulish',
33 | );
34 |
35 | const kHeaderPopularCard = TextStyle(
36 | fontWeight: FontWeight.w700,
37 | fontSize: 25,
38 | fontFamily: 'Mulish',
39 | );
40 |
41 | const kSubHeaderPopularCard = TextStyle(
42 | fontWeight: FontWeight.w600,
43 | fontSize: 15,
44 | fontFamily: 'Mulish',
45 | color: kLightBlack,
46 | );
47 |
48 | const kPuntuationPopularCard = TextStyle(
49 | fontWeight: FontWeight.w500,
50 | fontSize: 20,
51 | fontFamily: 'Mulish',
52 | );
53 |
54 | const kPrice = TextStyle(
55 | fontWeight: FontWeight.w600,
56 | fontSize: 47,
57 | fontFamily: 'Lexend',
58 | color: kOrange,
59 | );
60 |
61 | const kPriceSymbol = TextStyle(
62 | fontWeight: FontWeight.w600,
63 | fontSize: 20,
64 | fontFamily: 'Lexend',
65 | color: kOrange,
66 | );
67 |
68 | const kDetailsTitleDescription = TextStyle(
69 | fontWeight: FontWeight.w400,
70 | fontSize: 18,
71 | fontFamily: 'Mulish',
72 | color: kLightBlack,
73 | );
74 |
75 | const kDetailsDescription = TextStyle(
76 | fontWeight: FontWeight.w500,
77 | fontSize: 20,
78 | fontFamily: 'Mulish',
79 | color: kBlack,
80 | );
81 |
--------------------------------------------------------------------------------
/lib/delivery_app/data/categories.dart:
--------------------------------------------------------------------------------
1 | class Category {
2 | Category({
3 | required this.categoryName,
4 | required this.categoryImage,
5 | required this.semanticLabel,
6 | });
7 |
8 | final String categoryName;
9 | final String categoryImage;
10 | final String semanticLabel;
11 | }
12 |
13 | List categories = List.of({
14 | Category(
15 | categoryName: 'Pizza',
16 | categoryImage: 'assets/delivery_app/icons/pizza.svg',
17 | semanticLabel: 'Pizza Label',
18 | ),
19 | Category(
20 | categoryName: 'Seafood',
21 | categoryImage: 'assets/delivery_app/icons/shrimp.svg',
22 | semanticLabel: 'Seafood Label',
23 | ),
24 | Category(
25 | categoryName: 'Soft Drinks',
26 | categoryImage: 'assets/delivery_app/icons/soda.svg',
27 | semanticLabel: 'Soft Drinks Label',
28 | ),
29 | Category(
30 | categoryName: 'Hamburger',
31 | categoryImage: 'assets/delivery_app/icons/hamburger.svg',
32 | semanticLabel: 'Hamburger Label',
33 | ),
34 | Category(
35 | categoryName: 'Italian Food',
36 | categoryImage: 'assets/delivery_app/icons/spaghetti.svg',
37 | semanticLabel: 'Spaghetti Label',
38 | ),
39 | });
40 |
--------------------------------------------------------------------------------
/lib/delivery_app/data/category_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class CategoryState with ChangeNotifier {
4 | int _categorySelected = 0;
5 |
6 | int get categorySelected => _categorySelected;
7 |
8 | set categorySelected(int category) {
9 | _categorySelected = category;
10 | notifyListeners();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/delivery_app/data/product_details.dart:
--------------------------------------------------------------------------------
1 | class ProductDetails {
2 | ProductDetails({
3 | required this.top,
4 | required this.productName,
5 | required this.weight,
6 | required this.stars,
7 | required this.price,
8 | required this.size,
9 | required this.crust,
10 | required this.deliveryTime,
11 | required this.image,
12 | required this.ingredients,
13 | });
14 |
15 | final String top;
16 | final String productName;
17 | final String weight;
18 | final double stars;
19 | final double price;
20 | final String size;
21 | final String crust;
22 | final String deliveryTime;
23 | final String image;
24 | final List ingredients;
25 | }
26 |
27 | List detailsProducts = List.of({
28 | ProductDetails(
29 | top: 'top of the week',
30 | productName: 'Primavera Pizza',
31 | weight: 'Weight 540 gr',
32 | stars: 5.0,
33 | price: 5.99,
34 | size: 'Medium 14"',
35 | crust: 'Thin Crust',
36 | deliveryTime: '30 min',
37 | image: 'assets/delivery_app/images/pizza_primavera.png',
38 | ingredients: List.of({
39 | 'assets/delivery_app/images/peperoni.png',
40 | 'assets/delivery_app/images/tomatos.png',
41 | 'assets/delivery_app/images/onion.png',
42 | 'assets/delivery_app/images/cheese.png',
43 | }),
44 | ),
45 | ProductDetails(
46 | top: 'top of the day',
47 | productName: 'Sausage Pizza',
48 | weight: 'Weight 240 gr',
49 | stars: 4.5,
50 | price: 3.99,
51 | size: 'Medium 14"',
52 | crust: 'Thin Crust',
53 | deliveryTime: '20 min',
54 | image: 'assets/delivery_app/images/pizza_uno.png',
55 | ingredients: List.of({
56 | 'assets/delivery_app/images/peperoni.png',
57 | 'assets/delivery_app/images/tomatos.png',
58 | 'assets/delivery_app/images/onion.png',
59 | 'assets/delivery_app/images/cheese.png',
60 | }),
61 | ),
62 | });
63 |
--------------------------------------------------------------------------------
/lib/delivery_app/screens/main_screen_delivery_food.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_samples/utils/responsive.dart';
3 | import 'package:flutter_svg/svg.dart';
4 |
5 | import '../core/colors.dart';
6 | import '../widgets/custom_app_bar.dart';
7 | import '../widgets/main_screen/custom_circle.dart';
8 | import '../widgets/main_screen/list_view_categories.dart';
9 | import '../widgets/main_screen/list_view_popular_food.dart';
10 | import '../widgets/main_screen/main_header.dart';
11 | import '../widgets/main_screen/section_text.dart';
12 |
13 | class MainScreenDeliveryFood extends StatelessWidget {
14 | const MainScreenDeliveryFood({Key? key}) : super(key: key);
15 |
16 | @override
17 | Widget build(BuildContext context) {
18 | return MaterialApp(
19 | debugShowCheckedModeBanner: false,
20 | theme: ThemeData(
21 | brightness: Brightness.light,
22 | primaryColor: Colors.black,
23 | ),
24 | home: const _HomeScreen(),
25 | );
26 | }
27 | }
28 |
29 | class _HomeScreen extends StatefulWidget {
30 | const _HomeScreen({Key? key}) : super(key: key);
31 |
32 | @override
33 | __HomeScreenState createState() => __HomeScreenState();
34 | }
35 |
36 | class __HomeScreenState extends State<_HomeScreen>
37 | with SingleTickerProviderStateMixin {
38 | late AnimationController _animationController;
39 | late Animation _animationAvatar;
40 | late Animation _animationCircle;
41 | late Animation _animationMenuAndText;
42 | late Animation _animationPopularText;
43 |
44 | void _setupAnimations() {
45 | _animationController = AnimationController(
46 | vsync: this,
47 | duration: const Duration(seconds: 4),
48 | );
49 | _animationAvatar = CurvedAnimation(
50 | parent: _animationController,
51 | curve: const Interval(
52 | 0.20,
53 | 0.50,
54 | curve: Curves.elasticOut,
55 | ),
56 | );
57 | _animationCircle = CurvedAnimation(
58 | parent: _animationController,
59 | curve: const Interval(
60 | 0.10,
61 | 0.50,
62 | curve: Curves.elasticOut,
63 | ),
64 | );
65 | _animationMenuAndText = CurvedAnimation(
66 | parent: _animationController,
67 | curve: const Interval(
68 | 0.20,
69 | 0.50,
70 | curve: Curves.elasticOut,
71 | ),
72 | );
73 | _animationPopularText = CurvedAnimation(
74 | parent: _animationController,
75 | curve: const Interval(
76 | 0.45,
77 | 0.80,
78 | curve: Curves.elasticOut,
79 | ),
80 | );
81 | _animationController.forward();
82 | }
83 |
84 | @override
85 | void initState() {
86 | _setupAnimations();
87 | super.initState();
88 | }
89 |
90 | @override
91 | void dispose() {
92 | _animationController.dispose();
93 | super.dispose();
94 | }
95 |
96 | @override
97 | Widget build(BuildContext context) {
98 | const profileImage = 'assets/common/images/profile_image.jpg';
99 | const menuIcon = 'assets/delivery_app/icons/menu.svg';
100 | final responsive = Responsive.of(context);
101 |
102 | return Scaffold(
103 | backgroundColor: kWhite,
104 | resizeToAvoidBottomInset: false,
105 | body: SafeArea(
106 | bottom: false,
107 | child: AnimatedBuilder(
108 | animation: _animationController,
109 | builder: (_, __) {
110 | return Stack(
111 | children: [
112 | Transform.scale(
113 | alignment: Alignment.center,
114 | scale: _animationCircle.value,
115 | origin: Offset(
116 | -responsive.width * 0.3,
117 | -responsive.height * 0.3,
118 | ),
119 | child: const CustomCircle(),
120 | ),
121 | Column(
122 | crossAxisAlignment: CrossAxisAlignment.start,
123 | children: [
124 | CustomAppBar(
125 | itemLeft: Transform.scale(
126 | scale: _animationAvatar.value,
127 | child: IconButtonTabBar(
128 | icon: const CircleAvatar(
129 | backgroundColor: kWhite,
130 | backgroundImage: AssetImage(profileImage),
131 | radius: 25,
132 | ),
133 | backgroundColor: Colors.transparent,
134 | callback: () => debugPrint('Avatar'),
135 | ),
136 | ),
137 | itemRight: Transform.scale(
138 | scale: _animationMenuAndText.value,
139 | child: IconButtonTabBar(
140 | icon: SvgPicture.asset(
141 | menuIcon,
142 | alignment: Alignment.center,
143 | height: responsive.heightPercent(3.5),
144 | width: responsive.heightPercent(3.5),
145 | ),
146 | backgroundColor: Colors.transparent,
147 | callback: () => debugPrint('menu'),
148 | ),
149 | ),
150 | ),
151 | const SizedBox(height: 15),
152 | GestureDetector(
153 | onTap: () => _animationController.forward(from: 0.0),
154 | child: MainHeader(
155 | animationMenuAndText: _animationMenuAndText,
156 | ),
157 | ),
158 | const SizedBox(height: 20),
159 | Transform.scale(
160 | scale: _animationMenuAndText.value,
161 | child: const SectionText(text: 'Categories'),
162 | ),
163 | ListViewCategories(animationHandler: _animationController),
164 | const SizedBox(height: 10.0),
165 | Transform.scale(
166 | scale: _animationPopularText.value,
167 | child: const SectionText(text: 'Popular'),
168 | ),
169 | ListViewPopularFood(
170 | animationController: _animationController,
171 | ),
172 | ],
173 | ),
174 | ],
175 | );
176 | },
177 | ),
178 | ),
179 | );
180 | }
181 | }
182 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/custom_app_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_samples/delivery_app/core/colors.dart';
3 |
4 | import '../../utils/responsive.dart';
5 |
6 | class CustomAppBar extends StatelessWidget {
7 | const CustomAppBar({
8 | required this.itemLeft,
9 | required this.itemRight,
10 | this.margin = const EdgeInsets.symmetric(horizontal: 20),
11 | Key? key,
12 | }) : super(key: key);
13 |
14 | final Widget itemLeft;
15 | final Widget itemRight;
16 | final EdgeInsets margin;
17 |
18 | @override
19 | Widget build(BuildContext context) {
20 | return Container(
21 | margin: margin,
22 | height: kToolbarHeight,
23 | child: Row(
24 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
25 | crossAxisAlignment: CrossAxisAlignment.center,
26 | children: [itemLeft, itemRight],
27 | ),
28 | );
29 | }
30 | }
31 |
32 | class IconButtonTabBar extends StatelessWidget {
33 | const IconButtonTabBar({
34 | required this.icon,
35 | required this.backgroundColor,
36 | required this.callback,
37 | this.border = false,
38 | Key? key,
39 | }) : super(key: key);
40 |
41 | final Widget icon;
42 | final Color backgroundColor;
43 | final bool border;
44 | final VoidCallback callback;
45 |
46 | @override
47 | Widget build(BuildContext context) {
48 | final responsive = Responsive.of(context);
49 |
50 | return Material(
51 | color: backgroundColor,
52 | borderRadius: BorderRadius.circular(12),
53 | child: InkWell(
54 | onTap: callback,
55 | borderRadius: BorderRadius.circular(12),
56 | child: Container(
57 | height: responsive.heightPercent(6),
58 | width: responsive.heightPercent(6),
59 | decoration: BoxDecoration(
60 | borderRadius: BorderRadius.circular(12),
61 | border: (border)
62 | ? Border.all(
63 | width: 1.0,
64 | color: kLightBlack,
65 | style: BorderStyle.solid,
66 | )
67 | : null,
68 | ),
69 | child: Center(child: icon),
70 | ),
71 | ),
72 | );
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/detail_screen/details_header.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_size_text/auto_size_text.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_samples/utils/responsive.dart';
4 |
5 | import '../../core/text_styles.dart';
6 |
7 | class DetailsHeader extends StatelessWidget {
8 | const DetailsHeader({
9 | Key? key,
10 | required Animation animationAIngredientsAndHeader,
11 | required this.productName,
12 | required this.productNameLength,
13 | required this.productPrice,
14 | this.margin = 20,
15 | }) : _animationAIngredientsAndHeader = animationAIngredientsAndHeader,
16 | super(key: key);
17 |
18 | final Animation _animationAIngredientsAndHeader;
19 | final String productName;
20 | final int productNameLength;
21 | final double productPrice;
22 | final double margin;
23 |
24 | @override
25 | Widget build(BuildContext context) {
26 | final responsive = Responsive.of(context);
27 |
28 | return Column(
29 | crossAxisAlignment: CrossAxisAlignment.start,
30 | children: [
31 | Transform.scale(
32 | alignment: Alignment.centerLeft,
33 | scale: _animationAIngredientsAndHeader.value,
34 | child: Container(
35 | width: responsive.widthPercent(60),
36 | height: responsive.heightPercent(12.5),
37 | child: AutoSizeText(
38 | '$productName',
39 | style: kHeader,
40 | maxLines: 2,
41 | ),
42 | ),
43 | ),
44 | const SizedBox(height: 10),
45 | PriceText(
46 | animationAIngredientsAndHeader: _animationAIngredientsAndHeader,
47 | productPrice: productPrice,
48 | ),
49 | ],
50 | );
51 | }
52 | }
53 |
54 | class PriceText extends StatelessWidget {
55 | const PriceText({
56 | Key? key,
57 | required Animation animationAIngredientsAndHeader,
58 | required this.productPrice,
59 | }) : _animationAIngredientsAndHeader = animationAIngredientsAndHeader,
60 | super(key: key);
61 |
62 | final Animation _animationAIngredientsAndHeader;
63 | final double productPrice;
64 |
65 | @override
66 | Widget build(BuildContext context) {
67 | final responsive = Responsive.of(context);
68 |
69 | return Container(
70 | height: responsive.heightPercent(7.5),
71 | child: IntrinsicHeight(
72 | child: Row(
73 | crossAxisAlignment: CrossAxisAlignment.stretch,
74 | children: [
75 | Padding(
76 | padding: const EdgeInsets.only(top: 5.0),
77 | child: Transform.scale(
78 | scale: _animationAIngredientsAndHeader.value,
79 | child: const Text(
80 | '\$',
81 | style: kPriceSymbol,
82 | ),
83 | ),
84 | ),
85 | Transform.scale(
86 | scale: _animationAIngredientsAndHeader.value,
87 | alignment: Alignment.centerLeft,
88 | child: Text(
89 | '$productPrice',
90 | style: kPrice,
91 | ),
92 | ),
93 | ],
94 | ),
95 | ),
96 | );
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/detail_screen/details_product.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_size_text/auto_size_text.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_samples/utils/responsive.dart';
4 |
5 | import '../../core/text_styles.dart';
6 |
7 | class DetailsProduct extends StatelessWidget {
8 | const DetailsProduct({
9 | Key? key,
10 | required Animation animationSize,
11 | required this.productSize,
12 | required Animation animationCrust,
13 | required this.productCrust,
14 | required Animation animationDelivery,
15 | required this.productDeliveryTime,
16 | }) : _animationSize = animationSize,
17 | _animationCrust = animationCrust,
18 | _animationDelivery = animationDelivery,
19 | super(key: key);
20 |
21 | final Animation _animationSize;
22 | final Animation _animationDelivery;
23 | final Animation _animationCrust;
24 | final String productSize;
25 | final String productCrust;
26 | final String productDeliveryTime;
27 |
28 | @override
29 | Widget build(BuildContext context) {
30 | return Column(
31 | crossAxisAlignment: CrossAxisAlignment.start,
32 | children: [
33 | Transform.translate(
34 | offset: Offset(
35 | _animationSize.value,
36 | 0.0,
37 | ),
38 | child: DescriptionProductElement(
39 | tittle: 'Size',
40 | value: '$productSize',
41 | ),
42 | ),
43 | Transform.translate(
44 | offset: Offset(
45 | _animationCrust.value,
46 | 0.0,
47 | ),
48 | child: DescriptionProductElement(
49 | tittle: 'Crust',
50 | value: '$productCrust',
51 | ),
52 | ),
53 | Transform.translate(
54 | offset: Offset(
55 | _animationDelivery.value,
56 | 0.0,
57 | ),
58 | child: DescriptionProductElement(
59 | tittle: 'Delivery in',
60 | value: '$productDeliveryTime',
61 | ),
62 | ),
63 | ],
64 | );
65 | }
66 | }
67 |
68 | class DescriptionProductElement extends StatelessWidget {
69 | const DescriptionProductElement({
70 | required this.tittle,
71 | required this.value,
72 | Key? key,
73 | }) : super(key: key);
74 |
75 | final String tittle;
76 | final String value;
77 |
78 | @override
79 | Widget build(BuildContext context) {
80 | final responsive = Responsive.of(context);
81 |
82 | return Container(
83 | margin: EdgeInsets.only(top: responsive.heightPercent(2.5)),
84 | child: Column(
85 | crossAxisAlignment: CrossAxisAlignment.start,
86 | children: [
87 | Container(
88 | height: responsive.heightPercent(3),
89 | child: AutoSizeText(
90 | '$tittle',
91 | style: kDetailsTitleDescription,
92 | maxLines: 1,
93 | ),
94 | ),
95 | const SizedBox(height: 5),
96 | Container(
97 | height: responsive.heightPercent(3),
98 | child: AutoSizeText('$value', style: kDetailsDescription),
99 | ),
100 | ],
101 | ),
102 | );
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/detail_screen/list_view_ingredients.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_samples/utils/responsive.dart';
3 |
4 | import '../../core/colors.dart';
5 |
6 | class IngredientsBuilder extends StatelessWidget {
7 | const IngredientsBuilder({
8 | required this.ingredients,
9 | required Animation animationAIngredientsAndHeader,
10 | Key? key,
11 | }) : _animationAIngredientsAndHeader = animationAIngredientsAndHeader,
12 | super(key: key);
13 |
14 | final List ingredients;
15 | final Animation _animationAIngredientsAndHeader;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | final responsive = Responsive.of(context);
20 |
21 | return ListView.separated(
22 | itemCount: ingredients.length,
23 | scrollDirection: Axis.horizontal,
24 | physics: const BouncingScrollPhysics(),
25 | padding: EdgeInsets.symmetric(
26 | horizontal: responsive.widthPercent(5),
27 | vertical: responsive.heightPercent(2),
28 | ),
29 | itemBuilder: (_, index) {
30 | return Transform.scale(
31 | alignment: Alignment.topCenter,
32 | scale: _animationAIngredientsAndHeader.value,
33 | child: Container(
34 | width: responsive.widthPercent(25),
35 | padding: EdgeInsets.all(responsive.heightPercent(1)),
36 | decoration: BoxDecoration(
37 | color: kWhite,
38 | borderRadius: BorderRadius.circular(10),
39 | boxShadow: [
40 | BoxShadow(
41 | color: Colors.grey.withOpacity(0.3),
42 | blurRadius: 5.0,
43 | offset: const Offset(0, 5),
44 | ),
45 | ],
46 | ),
47 | child: Transform.scale(
48 | scale: _animationAIngredientsAndHeader.value,
49 | alignment: Alignment.topCenter,
50 | child: Image.asset(ingredients[index]),
51 | ),
52 | ),
53 | );
54 | },
55 | separatorBuilder: (_, __) => const SizedBox(width: 30),
56 | );
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/main_screen/custom_circle.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../../utils/responsive.dart';
4 | import '../../core/colors.dart';
5 |
6 | class CustomCircle extends StatelessWidget {
7 | const CustomCircle({
8 | Key? key,
9 | }) : super(key: key);
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | final responsive = Responsive.of(context);
14 | return Container(
15 | height: responsive.height,
16 | width: responsive.width,
17 | child: CustomPaint(
18 | painter: CircleWidget(),
19 | ),
20 | );
21 | }
22 | }
23 |
24 | class CircleWidget extends CustomPainter {
25 | @override
26 | void paint(Canvas canvas, Size size) {
27 | final paint = Paint()
28 | ..color = kLightGray
29 | ..style = PaintingStyle.fill
30 | ..strokeWidth = 20;
31 | final offsetDraw = Offset(size.width * 0.2, size.height * 0.1);
32 | canvas.drawCircle(offsetDraw, size.width * 0.6, paint);
33 | }
34 |
35 | @override
36 | bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
37 | }
38 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/main_screen/list_view_categories.dart:
--------------------------------------------------------------------------------
1 | import 'package:auto_size_text/auto_size_text.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
4 | import 'package:flutter_svg/flutter_svg.dart';
5 | import 'package:provider/provider.dart';
6 |
7 | import '../../../utils/responsive.dart';
8 | import '../../core/colors.dart';
9 | import '../../core/text_styles.dart';
10 | import '../../data/categories.dart';
11 | import '../../data/category_state.dart';
12 |
13 | class ListViewCategories extends StatelessWidget {
14 | const ListViewCategories({
15 | Key? key,
16 | required AnimationController animationHandler,
17 | }) : _animationHandler = animationHandler,
18 | super(key: key);
19 |
20 | final AnimationController _animationHandler;
21 |
22 | @override
23 | Widget build(BuildContext context) {
24 | final responsive = Responsive.of(context);
25 |
26 | return Container(
27 | height: responsive.heightPercent(25),
28 | child: ListView.separated(
29 | scrollDirection: Axis.horizontal,
30 | physics: const BouncingScrollPhysics(),
31 | itemCount: categories.length,
32 | itemBuilder: (_, index) => _CardCategory(
33 | animationController: _animationHandler,
34 | category: categories[index],
35 | index: index,
36 | ),
37 | separatorBuilder: (_, __) => const SizedBox(width: 25),
38 | padding: EdgeInsets.only(
39 | left: 20,
40 | right: 20,
41 | top: responsive.heightPercent(2.5),
42 | bottom: responsive.heightPercent(4.5),
43 | ),
44 | ),
45 | );
46 | }
47 | }
48 |
49 | class _CardCategory extends StatelessWidget {
50 | const _CardCategory({
51 | required this.animationController,
52 | required this.index,
53 | required this.category,
54 | Key? key,
55 | }) : super(key: key);
56 |
57 | final AnimationController animationController;
58 | final Category category;
59 | final int index;
60 |
61 | @override
62 | Widget build(BuildContext context) {
63 | final responsive = Responsive.of(context);
64 |
65 | final categoryState = Provider.of(context);
66 | final categorySelected = categoryState.categorySelected;
67 | final isCategorySelected = categorySelected == index;
68 |
69 | Animation _animationCardCategories;
70 | Animation _animationContentCard;
71 |
72 | _animationCardCategories = CurvedAnimation(
73 | parent: animationController,
74 | curve: Interval(
75 | 0.30 + (0.05 * index),
76 | 0.75,
77 | curve: Curves.elasticOut,
78 | ),
79 | );
80 | _animationContentCard = CurvedAnimation(
81 | parent: animationController,
82 | curve: Interval(
83 | 0.40 + (0.05 * index),
84 | 0.75,
85 | curve: Curves.elasticOut,
86 | ),
87 | );
88 |
89 | return Transform.scale(
90 | scale: _animationCardCategories.value,
91 | child: InkWell(
92 | onTap: () => categoryState.categorySelected = index,
93 | borderRadius: BorderRadius.circular(20),
94 | splashColor: Colors.white.withOpacity(0.3),
95 | child: AnimatedContainer(
96 | duration: const Duration(milliseconds: 300),
97 | width: responsive.widthPercent(25),
98 | decoration: BoxDecoration(
99 | color: (isCategorySelected) ? kYellow : kWhite,
100 | borderRadius: BorderRadius.circular(20),
101 | boxShadow: [
102 | const BoxShadow(
103 | color: kMiddleBlack,
104 | blurRadius: 5.0,
105 | offset: Offset(0, 5),
106 | ),
107 | ],
108 | ),
109 | child: Column(
110 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
111 | children: [
112 | Transform.scale(
113 | scale: _animationContentCard.value,
114 | child: SvgPicture.asset(
115 | '${category.categoryImage}',
116 | semanticsLabel: '${category.semanticLabel}',
117 | alignment: Alignment.center,
118 | height: responsive.heightPercent(5.5),
119 | width: responsive.heightPercent(5.5),
120 | ),
121 | ),
122 | Container(
123 | width: responsive.widthPercent(25),
124 | height: responsive.heightPercent(3),
125 | child: Transform.scale(
126 | scale: _animationContentCard.value,
127 | child: AutoSizeText(
128 | '${category.categoryName}',
129 | style: kCategory,
130 | textAlign: TextAlign.center,
131 | maxLines: 1,
132 | ),
133 | ),
134 | ),
135 | Transform.scale(
136 | scale: _animationContentCard.value,
137 | child: _DotCategories(
138 | background: (isCategorySelected) ? kWhite : kRed,
139 | iconColor: (isCategorySelected) ? Colors.black : kWhite,
140 | ),
141 | )
142 | ],
143 | ),
144 | ),
145 | ),
146 | );
147 | }
148 | }
149 |
150 | class _DotCategories extends StatelessWidget {
151 | const _DotCategories({
152 | required this.background,
153 | required this.iconColor,
154 | Key? key,
155 | }) : super(key: key);
156 |
157 | final Color background;
158 | final Color iconColor;
159 |
160 | @override
161 | Widget build(BuildContext context) {
162 | final responsive = Responsive.of(context);
163 |
164 | return AnimatedContainer(
165 | duration: const Duration(milliseconds: 500),
166 | width: responsive.heightPercent(3.5),
167 | height: responsive.heightPercent(3.5),
168 | decoration: BoxDecoration(
169 | color: background,
170 | shape: BoxShape.circle,
171 | ),
172 | child: Center(
173 | child: FaIcon(
174 | FontAwesomeIcons.angleRight,
175 | size: 10,
176 | color: iconColor,
177 | ),
178 | ),
179 | );
180 | }
181 | }
182 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/main_screen/list_view_popular_food.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math' as math;
2 | import 'package:auto_size_text/auto_size_text.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
5 |
6 | import '../../../utils/responsive.dart';
7 | import '../../core/colors.dart';
8 | import '../../core/text_styles.dart';
9 | import '../../data/product_details.dart';
10 | import '../../screens/detail_screen.dart';
11 |
12 | class ListViewPopularFood extends StatelessWidget {
13 | const ListViewPopularFood({
14 | Key? key,
15 | required AnimationController animationController,
16 | }) : _animationController = animationController,
17 | super(key: key);
18 |
19 | final AnimationController _animationController;
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | return Expanded(
24 | child: ListView.separated(
25 | itemCount: detailsProducts.length,
26 | physics: const BouncingScrollPhysics(),
27 | padding: const EdgeInsets.symmetric(horizontal: 15.0),
28 | itemBuilder: (_, index) => _CardPopularFood(
29 | animationController: _animationController,
30 | product: detailsProducts[index],
31 | index: index,
32 | ),
33 | separatorBuilder: (_, __) => const SizedBox(height: 25.0),
34 | ),
35 | );
36 | }
37 | }
38 |
39 | class _CardPopularFood extends StatelessWidget {
40 | const _CardPopularFood({
41 | required this.animationController,
42 | required this.product,
43 | required this.index,
44 | Key? key,
45 | }) : super(key: key);
46 |
47 | final AnimationController animationController;
48 | final ProductDetails product;
49 | final int index;
50 |
51 | @override
52 | Widget build(BuildContext context) {
53 | final responsive = Responsive.of(context);
54 |
55 | final _animationSlide = Tween(begin: 200.0, end: 0.0).animate(
56 | CurvedAnimation(
57 | parent: animationController,
58 | curve: Interval(
59 | 0.59 + (0.05 * index),
60 | 1.0,
61 | curve: Curves.decelerate,
62 | ),
63 | ),
64 | );
65 | final _animationRotate = Tween(begin: math.pi, end: 0.0).animate(
66 | CurvedAnimation(
67 | parent: animationController,
68 | curve: Interval(
69 | 0.59 + (0.1 * index),
70 | 1.0,
71 | curve: Curves.decelerate,
72 | ),
73 | ),
74 | );
75 |
76 | return GestureDetector(
77 | onTap: () => Navigator.of(context).push(
78 | PageRouteBuilder(
79 | transitionDuration: const Duration(milliseconds: 750),
80 | reverseTransitionDuration: const Duration(milliseconds: 750),
81 | transitionsBuilder: (_, animation, __, child) => FadeTransition(
82 | opacity: animation,
83 | child: child,
84 | ),
85 | pageBuilder: (_, __, ___) => DetailScreen(
86 | product: product,
87 | ),
88 | ),
89 | ),
90 | child: Stack(
91 | children: [
92 | Container(
93 | height: responsive.heightPercent(22),
94 | padding: const EdgeInsets.only(
95 | right: 20.0,
96 | bottom: 5.0,
97 | top: 5.0,
98 | ),
99 | child: _CardPopularProduct(
100 | product: product,
101 | index: index,
102 | animationController: animationController,
103 | ),
104 | ),
105 | Positioned(
106 | right: 0,
107 | top: responsive.heightPercent(1.5),
108 | bottom: responsive.heightPercent(2.5),
109 | child: Hero(
110 | tag: product.image,
111 | flightShuttleBuilder: (
112 | flightContext,
113 | animation,
114 | flightDirection,
115 | fromHeroContext,
116 | toHeroContext,
117 | ) {
118 | final toHero = toHeroContext.widget;
119 | return RotationTransition(
120 | turns: animation,
121 | child: toHero,
122 | );
123 | },
124 | child: Transform.translate(
125 | offset: Offset(_animationSlide.value, 0.0),
126 | child: Transform.rotate(
127 | angle: _animationRotate.value,
128 | child: Image.asset('${product.image}'),
129 | ),
130 | ),
131 | ),
132 | ),
133 | ],
134 | ),
135 | );
136 | }
137 | }
138 |
139 | class _CardPopularProduct extends StatelessWidget {
140 | const _CardPopularProduct({
141 | Key? key,
142 | required this.product,
143 | required this.index,
144 | required AnimationController animationController,
145 | }) : _animationController = animationController,
146 | super(key: key);
147 |
148 | final int index;
149 | final ProductDetails product;
150 | final AnimationController _animationController;
151 |
152 | @override
153 | Widget build(BuildContext context) {
154 | final _animationCardPopularFood = CurvedAnimation(
155 | parent: _animationController,
156 | curve: Interval(
157 | 0.50 + (0.05 * index),
158 | 1.0,
159 | curve: Curves.elasticOut,
160 | ),
161 | );
162 | final _animationCrown = CurvedAnimation(
163 | parent: _animationController,
164 | curve: Interval(
165 | 0.57 + (0.05 * index),
166 | .85,
167 | curve: Curves.elasticOut,
168 | ),
169 | );
170 |
171 | return Transform.scale(
172 | scale: _animationCardPopularFood.value,
173 | child: Hero(
174 | tag: product.productName,
175 | child: Material(
176 | color: kWhite,
177 | child: Container(
178 | decoration: BoxDecoration(
179 | color: kWhite,
180 | borderRadius: BorderRadius.circular(20.0),
181 | boxShadow: [
182 | const BoxShadow(
183 | color: kMiddleBlack,
184 | blurRadius: 10.0,
185 | offset: Offset(10, 5),
186 | ),
187 | ],
188 | ),
189 | child: Column(
190 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
191 | children: [
192 | _ProductInformation(
193 | product: product,
194 | index: index,
195 | animationCrown: _animationCrown,
196 | ),
197 | _BottomCard(
198 | product: product,
199 | animationCrown: _animationCrown,
200 | )
201 | ],
202 | ),
203 | ),
204 | ),
205 | ),
206 | );
207 | }
208 | }
209 |
210 | class _ProductInformation extends StatelessWidget {
211 | const _ProductInformation({
212 | Key? key,
213 | required this.product,
214 | required this.index,
215 | required Animation animationCrown,
216 | }) : _animationCrown = animationCrown,
217 | super(key: key);
218 |
219 | final ProductDetails product;
220 | final int index;
221 | final Animation _animationCrown;
222 |
223 | @override
224 | Widget build(BuildContext context) {
225 | final responsive = Responsive.of(context);
226 |
227 | return Padding(
228 | padding: EdgeInsets.only(
229 | top: responsive.heightPercent(1.5),
230 | left: responsive.heightPercent(1.5),
231 | ),
232 | child: Column(
233 | crossAxisAlignment: CrossAxisAlignment.start,
234 | children: [
235 | Row(
236 | crossAxisAlignment: CrossAxisAlignment.center,
237 | children: [
238 | Transform.scale(
239 | scale: _animationCrown.value,
240 | child: const FaIcon(
241 | FontAwesomeIcons.crown,
242 | size: 10,
243 | color: kYellowCrown,
244 | ),
245 | ),
246 | const SizedBox(width: 5),
247 | Text(
248 | '${product.top}',
249 | style: kTopPopularCard,
250 | ),
251 | ],
252 | ),
253 | SizedBox(height: responsive.heightPercent(3)),
254 | Column(
255 | mainAxisSize: MainAxisSize.min,
256 | crossAxisAlignment: CrossAxisAlignment.start,
257 | children: [
258 | Container(
259 | height: responsive.heightPercent(3),
260 | child: AutoSizeText(
261 | '${product.productName}',
262 | style: kHeaderPopularCard,
263 | maxLines: 1,
264 | ),
265 | ),
266 | SizedBox(height: responsive.heightPercent(.5)),
267 | Container(
268 | height: responsive.heightPercent(2.5),
269 | child: AutoSizeText(
270 | '${product.weight}',
271 | style: kSubHeaderPopularCard,
272 | maxLines: 1,
273 | ),
274 | ),
275 | ],
276 | ),
277 | ],
278 | ),
279 | );
280 | }
281 | }
282 |
283 | class _BottomCard extends StatelessWidget {
284 | const _BottomCard({
285 | Key? key,
286 | required Animation animationCrown,
287 | required this.product,
288 | }) : _animationCrown = animationCrown,
289 | super(key: key);
290 |
291 | final Animation _animationCrown;
292 | final ProductDetails product;
293 |
294 | @override
295 | Widget build(BuildContext context) {
296 | final responsive = Responsive.of(context);
297 |
298 | return Row(
299 | children: [
300 | Container(
301 | height: responsive.heightPercent(6),
302 | width: responsive.widthPercent(25),
303 | decoration: const BoxDecoration(
304 | borderRadius: BorderRadius.only(
305 | topRight: Radius.circular(20),
306 | bottomLeft: Radius.circular(20),
307 | ),
308 | color: kYellow,
309 | ),
310 | child: Center(
311 | child: Transform.scale(
312 | scale: _animationCrown.value,
313 | child: const FaIcon(
314 | FontAwesomeIcons.plus,
315 | size: 12,
316 | ),
317 | ),
318 | ),
319 | ),
320 | const SizedBox(width: 20.0),
321 | Row(
322 | crossAxisAlignment: CrossAxisAlignment.center,
323 | children: [
324 | const FaIcon(
325 | FontAwesomeIcons.solidStar,
326 | size: 10,
327 | ),
328 | const SizedBox(width: 5),
329 | Container(
330 | height: responsive.heightPercent(3),
331 | child: Center(
332 | child: AutoSizeText(
333 | '${product.stars}',
334 | style: kPuntuationPopularCard,
335 | maxLines: 1,
336 | ),
337 | ),
338 | ),
339 | ],
340 | )
341 | ],
342 | );
343 | }
344 | }
345 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/main_screen/main_header.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 |
3 | import 'package:auto_size_text/auto_size_text.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:flutter_samples/delivery_app/core/colors.dart';
6 | import 'package:flutter_samples/utils/responsive.dart';
7 |
8 | import '../../core/text_styles.dart';
9 |
10 | class MainHeader extends StatelessWidget {
11 | const MainHeader({
12 | Key? key,
13 | required Animation animationMenuAndText,
14 | }) : _animationMenuAndText = animationMenuAndText,
15 | super(key: key);
16 |
17 | final Animation _animationMenuAndText;
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | final responsive = Responsive.of(context);
22 |
23 | return Container(
24 | margin: const EdgeInsets.symmetric(horizontal: 25),
25 | child: Column(
26 | crossAxisAlignment: CrossAxisAlignment.start,
27 | children: [
28 | Column(
29 | crossAxisAlignment: CrossAxisAlignment.start,
30 | children: [
31 | Container(
32 | height: responsive.heightPercent(3),
33 | child: Transform.scale(
34 | scale: _animationMenuAndText.value,
35 | child: const AutoSizeText(
36 | 'Food',
37 | style: kSubHeader,
38 | maxLines: 1,
39 | ),
40 | ),
41 | ),
42 | Container(
43 | width: responsive.widthPercent(50),
44 | height: responsive.heightPercent(8),
45 | child: Transform.scale(
46 | scale: _animationMenuAndText.value,
47 | child: const AutoSizeText(
48 | 'Delivery',
49 | style: kHeader,
50 | maxLines: 1,
51 | ),
52 | ),
53 | ),
54 | ],
55 | ),
56 | Transform.scale(
57 | scale: _animationMenuAndText.value,
58 | child: const TextField(
59 | decoration: InputDecoration(
60 | hintText: 'Search...',
61 | hintStyle: TextStyle(color: kLightBlack),
62 | icon: Icon(
63 | Icons.search,
64 | size: 25,
65 | ),
66 | ),
67 | ),
68 | ),
69 | ],
70 | ),
71 | );
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/main_screen/section_text.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../core/text_styles.dart';
4 |
5 | class SectionText extends StatelessWidget {
6 | const SectionText({
7 | required this.text,
8 | Key? key,
9 | }) : super(key: key);
10 |
11 | final String text;
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | return Padding(
16 | padding: const EdgeInsets.symmetric(horizontal: 30.0),
17 | child: Text('$text', style: kSection),
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/lib/facebook_ui/data/collections.dart:
--------------------------------------------------------------------------------
1 | class Collection {
2 | Collection({
3 | required this.collectionImage,
4 | required this.collectionName,
5 | });
6 |
7 | final String collectionImage;
8 | final String collectionName;
9 | }
10 |
11 | List collections = List.of({
12 | Collection(
13 | collectionImage: 'assets/common/images/profile_image.jpg',
14 | collectionName: 'Colección',
15 | ),
16 | Collection(
17 | collectionImage: 'assets/facebook_ui/images/profile/coverage.jpeg',
18 | collectionName: 'Colección',
19 | ),
20 | Collection(
21 | collectionImage: 'assets/facebook_ui/images/collections/1.jpg',
22 | collectionName: 'Colección',
23 | ),
24 | Collection(
25 | collectionImage: 'assets/facebook_ui/images/collections/2.jpg',
26 | collectionName: 'Colección',
27 | ),
28 | Collection(
29 | collectionImage: 'assets/facebook_ui/images/collections/3.jpg',
30 | collectionName: 'Colección',
31 | ),
32 | Collection(
33 | collectionImage: 'assets/facebook_ui/images/collections/4.jpg',
34 | collectionName: 'Colección',
35 | ),
36 | Collection(
37 | collectionImage: 'assets/facebook_ui/images/collections/5.jpg',
38 | collectionName: 'Colección',
39 | ),
40 | });
41 |
--------------------------------------------------------------------------------
/lib/facebook_ui/data/friends.dart:
--------------------------------------------------------------------------------
1 | class Friend {
2 | Friend({
3 | required this.friendImage,
4 | required this.friendName,
5 | });
6 |
7 | final String friendImage;
8 | final String friendName;
9 | }
10 |
11 | List friends = List.of({
12 | Friend(
13 | friendImage: 'assets/facebook_ui/images/people/wilber_garcia.png',
14 | friendName: 'Wilber Garcia',
15 | ),
16 | Friend(
17 | friendImage: 'assets/facebook_ui/images/people/michael_gais.png',
18 | friendName: 'Michael Gais',
19 | ),
20 | Friend(
21 | friendImage: 'assets/facebook_ui/images/people/daniela_fernandez.png',
22 | friendName: 'Daniela Fernández',
23 | ),
24 | Friend(
25 | friendImage: 'assets/facebook_ui/images/people/sarai_perez.png',
26 | friendName: 'Saraí Pérez',
27 | ),
28 | Friend(
29 | friendImage: 'assets/facebook_ui/images/people/samanta_smith.jpeg',
30 | friendName: 'Samanta Smith',
31 | ),
32 | Friend(
33 | friendImage: 'assets/facebook_ui/images/people/marcus_dail.jpeg',
34 | friendName: 'Marcus',
35 | ),
36 | Friend(
37 | friendImage: 'assets/facebook_ui/images/people/kate_rob.jpeg',
38 | friendName: 'Kate Rob',
39 | ),
40 | });
41 |
--------------------------------------------------------------------------------
/lib/facebook_ui/data/local_providers.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class BottomBarState with ChangeNotifier {
4 | bool _showBottomBar = true;
5 |
6 | bool get showBottomBar => _showBottomBar;
7 |
8 | set showBottomBar(bool hideMenu) {
9 | _showBottomBar = hideMenu;
10 | notifyListeners();
11 | }
12 | }
13 |
14 | class ScreensState with ChangeNotifier {
15 | final _pageController = PageController();
16 | int _page = 0;
17 |
18 | int get page => _page;
19 | PageController get pageController => _pageController;
20 |
21 | set page(int page) {
22 | _page = page;
23 | if (_page <= 1) {
24 | _pageController.animateToPage(
25 | _page,
26 | duration: const Duration(milliseconds: 350),
27 | curve: Curves.easeIn,
28 | );
29 | }
30 | notifyListeners();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/facebook_ui/data/post.dart:
--------------------------------------------------------------------------------
1 | class Post {
2 | Post({
3 | required this.userProfileIcon,
4 | required this.userName,
5 | required this.timePost,
6 | required this.descriptionPost,
7 | required this.postImage,
8 | required this.comments,
9 | required this.shared,
10 | required this.reactions,
11 | required this.principalUserReaction,
12 | required this.comment,
13 | });
14 |
15 | final String userProfileIcon;
16 | final String userName;
17 | final String timePost;
18 | final String descriptionPost;
19 | final String postImage;
20 | final int comments;
21 | final int shared;
22 | final int reactions;
23 | final String principalUserReaction;
24 | final Comment comment;
25 | }
26 |
27 | class Comment {
28 | Comment({
29 | required this.userProfileIcon,
30 | required this.userName,
31 | required this.comment,
32 | });
33 |
34 | final String userProfileIcon;
35 | final String userName;
36 | final String comment;
37 | }
38 |
39 | List posts = List.of({
40 | Post(
41 | userProfileIcon:
42 | 'assets/facebook_ui/images/people/daniela_fernandez(2).png',
43 | userName: 'Daniela Fernández Ramos',
44 | timePost: 'Hace 3 días',
45 | descriptionPost: 'Me encanto la sesión de fotos que me hizo mi amigo 😍🥺 ',
46 | postImage: 'assets/facebook_ui/images/people/daniela_fernandez.png',
47 | comments: 30,
48 | shared: 5,
49 | reactions: 50,
50 | principalUserReaction: 'Mao Lop',
51 | comment: Comment(
52 | userProfileIcon: 'assets/facebook_ui/images/people/michael_bruno.png',
53 | userName: 'Michael Bruno',
54 | comment: 'Esta foto está muy cool, deberías ser modelo',
55 | ),
56 | ),
57 | Post(
58 | userProfileIcon: 'assets/facebook_ui/images/people/samanta_smith.jpeg',
59 | userName: 'Samanta Smith',
60 | timePost: 'Hace 2 días',
61 | descriptionPost: 'I love this photo 😍',
62 | postImage: 'assets/facebook_ui/images/people/samanta_smith.jpeg',
63 | comments: 50,
64 | shared: 20,
65 | reactions: 66,
66 | principalUserReaction: 'Jhonny',
67 | comment: Comment(
68 | userProfileIcon: 'assets/facebook_ui/images/people/michael_bruno.png',
69 | userName: 'Michael Bruno',
70 | comment: '📸 📸 📸',
71 | ),
72 | ),
73 | Post(
74 | userProfileIcon: 'assets/facebook_ui/images/people/cloe_thompson.jpeg',
75 | userName: 'Cloe Thompson',
76 | timePost: 'Hace 1 día',
77 | descriptionPost: 'Relax... 🍃 🍂',
78 | postImage: 'assets/facebook_ui/images/people/cloe_thompson.jpeg',
79 | comments: 53,
80 | shared: 2,
81 | reactions: 53,
82 | principalUserReaction: 'Cloe',
83 | comment: Comment(
84 | userProfileIcon: 'assets/facebook_ui/images/people/michael_bruno.png',
85 | userName: 'Michael Bruno',
86 | comment: '✨ ✨ ✨',
87 | ),
88 | ),
89 | Post(
90 | userProfileIcon: 'assets/facebook_ui/images/people/james_paul.jpeg',
91 | userName: 'James Paul',
92 | timePost: 'Hace 2 días',
93 | descriptionPost: 'Work hard! 💪 🤙',
94 | postImage: 'assets/facebook_ui/images/people/james_paul.jpeg',
95 | comments: 32,
96 | shared: 1,
97 | reactions: 57,
98 | principalUserReaction: 'Mónica',
99 | comment: Comment(
100 | userProfileIcon: 'assets/facebook_ui/images/people/michael_bruno.png',
101 | userName: 'Michael Bruno',
102 | comment: 'Ohh! Yess! 😎 😎 ',
103 | ),
104 | ),
105 | Post(
106 | userProfileIcon: 'assets/facebook_ui/images/people/marcus_dail.jpeg',
107 | userName: 'Marcus Dail',
108 | timePost: 'Hace 4 días',
109 | descriptionPost: 'Just do it!!... 😎',
110 | postImage: 'assets/facebook_ui/images/people/marcus_dail.jpeg',
111 | comments: 55,
112 | shared: 12,
113 | reactions: 64,
114 | principalUserReaction: 'Daniela',
115 | comment: Comment(
116 | userProfileIcon: 'assets/facebook_ui/images/people/michael_bruno.png',
117 | userName: 'Michael Bruno',
118 | comment: '🔥 🔥 🔥 🔥',
119 | ),
120 | ),
121 | Post(
122 | userProfileIcon: 'assets/facebook_ui/images/people/kate_rob.jpeg',
123 | userName: 'Kate Rob',
124 | timePost: 'Hace 3 días',
125 | descriptionPost: 'Nueva sesión... 😍 👀',
126 | postImage: 'assets/facebook_ui/images/people/kate_rob.jpeg',
127 | comments: 70,
128 | shared: 18,
129 | reactions: 84,
130 | principalUserReaction: 'Marcus',
131 | comment: Comment(
132 | userProfileIcon: 'assets/facebook_ui/images/people/kate_rob.jpeg',
133 | userName: 'Michael Bruno',
134 | comment: '🙌 🎉 🎉',
135 | ),
136 | ),
137 | });
138 |
--------------------------------------------------------------------------------
/lib/facebook_ui/data/storie.dart:
--------------------------------------------------------------------------------
1 | class Storie {
2 | const Storie({
3 | required this.previewStory,
4 | required this.userImage,
5 | required this.userName,
6 | });
7 |
8 | final String previewStory;
9 | final String userImage;
10 | final String userName;
11 | }
12 |
13 | List stories = List.of({
14 | const Storie(
15 | previewStory: 'assets/common/images/profile_image.jpg',
16 | userImage: 'none',
17 | userName: 'Crear historia',
18 | ),
19 | const Storie(
20 | previewStory: 'assets/facebook_ui/images/people/mao_lop.png',
21 | userImage: 'assets/facebook_ui/images/people/mao_lop.png',
22 | userName: 'Mao',
23 | ),
24 | const Storie(
25 | previewStory: 'assets/facebook_ui/images/stories/fernanda_preview.png',
26 | userImage: 'assets/facebook_ui/images/people/fernanda.png',
27 | userName: 'Fernanda',
28 | ),
29 | const Storie(
30 | previewStory: 'assets/facebook_ui/images/stories/james_preview.png',
31 | userImage: 'assets/facebook_ui/images/people/james.png',
32 | userName: 'James',
33 | ),
34 | const Storie(
35 | previewStory: 'assets/facebook_ui/images/stories/samanta_preview.png',
36 | userImage: 'assets/facebook_ui/images/people/samanta_smith.jpeg',
37 | userName: 'Samanta',
38 | ),
39 | const Storie(
40 | previewStory: 'assets/facebook_ui/images/stories/marcus_preview.png',
41 | userImage: 'assets/facebook_ui/images/people/marcus_dail.jpeg',
42 | userName: 'Marcus',
43 | ),
44 | const Storie(
45 | previewStory: 'assets/facebook_ui/images/stories/cloe_preview.png',
46 | userImage: 'assets/facebook_ui/images/people/cloe_thompson.jpeg',
47 | userName: 'Cloe',
48 | ),
49 | });
50 |
--------------------------------------------------------------------------------
/lib/facebook_ui/screens/home_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter/rendering.dart';
3 | import 'package:provider/provider.dart';
4 |
5 | import '../../utils/responsive.dart';
6 | import '../data/local_providers.dart';
7 | import '../data/post.dart';
8 | import '../widgets/header_app.dart';
9 | import '../widgets/home_screen/posts.dart';
10 | import '../widgets/home_screen/stories.dart';
11 |
12 | class HomeScreen extends StatefulWidget {
13 | const HomeScreen({Key? key}) : super(key: key);
14 |
15 | @override
16 | _HomeScreenState createState() => _HomeScreenState();
17 | }
18 |
19 | class _HomeScreenState extends State {
20 | final _scrollController = ScrollController();
21 | late bool _showBottomBar;
22 |
23 | void _showBottomBarByScroll(BuildContext context) {
24 | final bottomBarState = Provider.of(context, listen: false);
25 |
26 | _showBottomBar = bottomBarState.showBottomBar;
27 |
28 | if (_scrollController.position.userScrollDirection ==
29 | ScrollDirection.reverse &&
30 | _showBottomBar) {
31 | bottomBarState.showBottomBar = false;
32 | } else if (_scrollController.position.userScrollDirection ==
33 | ScrollDirection.forward &&
34 | !_showBottomBar) {
35 | bottomBarState.showBottomBar = true;
36 | }
37 | }
38 |
39 | @override
40 | void dispose() {
41 | _scrollController.dispose();
42 | super.dispose();
43 | }
44 |
45 | @override
46 | Widget build(BuildContext context) {
47 | final responsive = Responsive.of(context);
48 | return Scaffold(
49 | resizeToAvoidBottomInset: false,
50 | body: Stack(
51 | children: [
52 | NotificationListener(
53 | onNotification: (notification) {
54 | _showBottomBarByScroll(context);
55 | return true;
56 | },
57 | child: CustomScrollView(
58 | physics: const BouncingScrollPhysics(),
59 | controller: _scrollController,
60 | slivers: [
61 | SliverPersistentHeader(
62 | pinned: true,
63 | floating: true,
64 | delegate: CustomSliverHeader(
65 | maxHeight: responsive.heightPercent(25),
66 | minHeight: responsive.heightPercent(11),
67 | child: const HeaderApp(),
68 | ),
69 | ),
70 | const SliverToBoxAdapter(child: Stories()),
71 | SliverList(
72 | delegate: SliverChildBuilderDelegate(
73 | (_, index) => PostWidget(post: posts[index]),
74 | childCount: posts.length,
75 | ),
76 | ),
77 | ],
78 | ),
79 | ),
80 | ],
81 | ),
82 | );
83 | }
84 | }
85 |
86 | class CustomSliverHeader extends SliverPersistentHeaderDelegate {
87 | CustomSliverHeader({
88 | required this.maxHeight,
89 | required this.minHeight,
90 | required this.child,
91 | }) : assert(maxHeight > minHeight);
92 |
93 | final double maxHeight;
94 | final double minHeight;
95 | final Widget child;
96 |
97 | @override
98 | Widget build(context, double shrinkOffset, bool overlapsContent) =>
99 | SizedBox.expand(child: child);
100 |
101 | @override
102 | double get maxExtent => maxHeight;
103 |
104 | @override
105 | double get minExtent => minHeight;
106 |
107 | @override
108 | bool shouldRebuild(covariant CustomSliverHeader oldDelegate) =>
109 | maxHeight != oldDelegate.maxHeight ||
110 | minHeight != oldDelegate.minHeight ||
111 | child != oldDelegate.child;
112 | }
113 |
--------------------------------------------------------------------------------
/lib/facebook_ui/screens/screen_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 |
4 | import '../data/local_providers.dart';
5 | import '../theme/theme_state.dart';
6 | import '../widgets/navigation_bar.dart';
7 | import './home_screen.dart';
8 | import './settings_screen.dart';
9 |
10 | class ScreenController extends StatelessWidget {
11 | const ScreenController({Key? key}) : super(key: key);
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | final bottomBarState = Provider.of(context);
16 | final screensState = Provider.of(context);
17 | final themeState = Provider.of(context);
18 |
19 | return MaterialApp(
20 | debugShowCheckedModeBanner: false,
21 | title: 'Facebook UI',
22 | theme: themeState.currentTheme,
23 | home: Scaffold(
24 | body: Stack(
25 | children: [
26 | PageView(
27 | controller: screensState.pageController,
28 | physics: const NeverScrollableScrollPhysics(),
29 | children: [
30 | const HomeScreen(),
31 | const SettingsScreen(),
32 | ],
33 | ),
34 | NavigationBar(
35 | showBar: bottomBarState.showBottomBar,
36 | selectedIndex: screensState.page,
37 | ),
38 | ],
39 | ),
40 | ),
41 | );
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/lib/facebook_ui/theme/theme_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter/services.dart';
3 |
4 | class ThemeState with ChangeNotifier {
5 | ThemeData _currentTheme = lightMode;
6 | bool _darkTheme = false;
7 |
8 | ThemeData get currentTheme => _currentTheme;
9 | bool get isDarkTheme => _darkTheme;
10 | set isDarkTheme(bool value) {
11 | _darkTheme = value;
12 |
13 | if (value) {
14 | _currentTheme = darkMode;
15 | SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
16 | } else {
17 | _currentTheme = lightMode;
18 | SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
19 | }
20 | notifyListeners();
21 | }
22 | }
23 |
24 | final ThemeData darkMode = ThemeData(
25 | scaffoldBackgroundColor: const Color(0xff070c20),
26 | backgroundColor: const Color(0xff272d3a),
27 | buttonColor: const Color(0xff2f3643),
28 | accentColor: const Color(0xffffffff),
29 | iconTheme: const IconThemeData(color: Color(0xff515765)),
30 | dividerColor: const Color(0xff2d3340),
31 | cardColor: const Color(0xff2e3441),
32 | );
33 |
34 | final ThemeData lightMode = ThemeData(
35 | scaffoldBackgroundColor: const Color(0xfff4f6f8),
36 | backgroundColor: const Color(0xffffffff),
37 | buttonColor: const Color(0xfff9fafb),
38 | accentColor: const Color(0xff364987),
39 | iconTheme: const IconThemeData(color: Color(0xffd5dcef)),
40 | dividerColor: const Color(0xfff8f8f8),
41 | cardColor: const Color(0xffffffff),
42 | );
43 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/avatar_icon.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AvatarIcon extends StatelessWidget {
4 | const AvatarIcon({
5 | Key? key,
6 | required this.profileImage,
7 | required this.child,
8 | required this.height,
9 | required this.width,
10 | this.marginColor = const Color(0xfff4f6f8),
11 | this.marginWidth = 2,
12 | }) : super(key: key);
13 |
14 | final double height;
15 | final double width;
16 | final double marginWidth;
17 | final Color marginColor;
18 | final String profileImage;
19 | final Widget child;
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | return Container(
24 | height: height,
25 | width: width,
26 | decoration: BoxDecoration(
27 | shape: BoxShape.circle,
28 | image: DecorationImage(
29 | image: AssetImage(profileImage),
30 | ),
31 | border: Border.all(
32 | color: marginColor,
33 | width: marginWidth,
34 | ),
35 | ),
36 | child: child,
37 | );
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/circle_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../utils/responsive.dart';
4 |
5 | class CircleButton extends StatelessWidget {
6 | CircleButton({
7 | Key? key,
8 | required this.callback,
9 | required this.icon,
10 | required this.backgroundColor,
11 | this.height = 0.0,
12 | this.width = 0.0,
13 | }) : super(key: key);
14 |
15 | final VoidCallback callback;
16 | final Widget icon;
17 | final Color backgroundColor;
18 | final double height;
19 | final double width;
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | final responsive = Responsive.of(context);
24 | final heightResponfive =
25 | (height == 0.0) ? responsive.heightPercent(4.5) : height;
26 | final widthResponfive =
27 | (width == 0.0) ? responsive.heightPercent(4.5) : width;
28 | return ClipOval(
29 | child: Container(
30 | height: heightResponfive,
31 | width: widthResponfive,
32 | decoration: BoxDecoration(
33 | shape: BoxShape.circle,
34 | color: backgroundColor,
35 | ),
36 | child: Material(
37 | color: Colors.transparent,
38 | child: InkWell(
39 | onTap: callback,
40 | child: Center(child: icon),
41 | ),
42 | ),
43 | ),
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/header_app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_samples/facebook_ui/screens/profile_screen.dart';
3 | import 'package:flutter_svg/svg.dart';
4 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
5 | import 'package:provider/provider.dart';
6 |
7 | import '../../utils/responsive.dart';
8 | import '../theme/theme_state.dart';
9 | import '../widgets/avatar_icon.dart';
10 | import '../widgets/circle_button.dart';
11 | import '../widgets/large_button.dart';
12 |
13 | class HeaderApp extends StatelessWidget {
14 | const HeaderApp({
15 | Key? key,
16 | }) : super(key: key);
17 |
18 | @override
19 | Widget build(BuildContext context) {
20 | final responsive = Responsive.of(context);
21 | const profileImage = 'assets/common/images/profile_image.jpg';
22 |
23 | return Container(
24 | height: responsive.heightPercent(25),
25 | padding: const EdgeInsets.symmetric(horizontal: 15),
26 | decoration: BoxDecoration(
27 | color: Theme.of(context).backgroundColor,
28 | borderRadius: const BorderRadius.vertical(
29 | bottom: Radius.circular(20),
30 | ),
31 | ),
32 | child: SafeArea(
33 | bottom: false,
34 | child: Stack(
35 | children: [
36 | Positioned(
37 | right: 0,
38 | left: 0,
39 | bottom: responsive.widthPercent(4.5),
40 | child: Column(
41 | children: [
42 | const Divider(thickness: 2),
43 | SizedBox(height: responsive.widthPercent(1)),
44 | const _PostBar(profileImage: profileImage),
45 | SizedBox(height: responsive.heightPercent(2.5)),
46 | const PostActions(),
47 | ],
48 | ),
49 | ),
50 | Container(
51 | color: Theme.of(context).backgroundColor,
52 | child: const _FacebookAppBar(profileImage: profileImage),
53 | ),
54 | ],
55 | ),
56 | ),
57 | );
58 | }
59 | }
60 |
61 | class _FacebookAppBar extends StatelessWidget {
62 | const _FacebookAppBar({
63 | Key? key,
64 | required this.profileImage,
65 | }) : super(key: key);
66 |
67 | final String profileImage;
68 |
69 | @override
70 | Widget build(BuildContext context) {
71 | final responsive = Responsive.of(context);
72 | final themeState = Provider.of(context);
73 | final accentColor = Theme.of(context).accentColor;
74 |
75 | const searchIcon = 'assets/facebook_ui/icons/search_icon.svg';
76 |
77 | return Padding(
78 | padding: EdgeInsets.only(top: responsive.heightPercent(1)),
79 | child: Row(
80 | crossAxisAlignment: CrossAxisAlignment.center,
81 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
82 | children: [
83 | CircleButton(
84 | callback: () => debugPrint('Facebook'),
85 | icon: FittedBox(
86 | fit: BoxFit.none,
87 | child: FaIcon(
88 | FontAwesomeIcons.facebook,
89 | size: responsive.widthPercent(8.5),
90 | color: const Color(0xff3284f5),
91 | textDirection: TextDirection.ltr,
92 | ),
93 | ),
94 | backgroundColor: Colors.white,
95 | height: responsive.widthPercent(8),
96 | width: responsive.widthPercent(8),
97 | ),
98 | Container(
99 | width: responsive.widthPercent(48),
100 | child: Row(
101 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
102 | crossAxisAlignment: CrossAxisAlignment.center,
103 | children: [
104 | CircleButton(
105 | callback: () => debugPrint('Search'),
106 | icon: SvgPicture.asset(
107 | searchIcon,
108 | color: accentColor,
109 | height: responsive.widthPercent(4),
110 | ),
111 | backgroundColor: Theme.of(context).buttonColor,
112 | height: responsive.widthPercent(8.5),
113 | width: responsive.widthPercent(8.5),
114 | ),
115 | Stack(
116 | children: [
117 | CircleButton(
118 | callback: () => debugPrint('Bell'),
119 | icon: FaIcon(
120 | FontAwesomeIcons.solidBell,
121 | size: responsive.widthPercent(4.2),
122 | color: accentColor,
123 | ),
124 | backgroundColor: Theme.of(context).buttonColor,
125 | height: responsive.widthPercent(8.5),
126 | width: responsive.widthPercent(8.5),
127 | ),
128 | Positioned(
129 | right: 6,
130 | top: 4,
131 | child: Container(
132 | height: responsive.heightPercent(0.9),
133 | width: responsive.heightPercent(0.9),
134 | decoration: const BoxDecoration(
135 | color: Color(0xffee305e),
136 | shape: BoxShape.circle,
137 | ),
138 | ),
139 | )
140 | ],
141 | ),
142 | CircleButton(
143 | callback: () => debugPrint('Messenger'),
144 | icon: FaIcon(
145 | FontAwesomeIcons.facebookMessenger,
146 | size: responsive.widthPercent(4.2),
147 | color: (themeState.isDarkTheme)
148 | ? accentColor
149 | : const Color(0xff3ca1f5),
150 | ),
151 | backgroundColor: Theme.of(context).buttonColor,
152 | height: responsive.widthPercent(8.5),
153 | width: responsive.widthPercent(8.5),
154 | ),
155 | const SizedBox(width: 1),
156 | ClipOval(
157 | child: Hero(
158 | tag: profileImage,
159 | child: AvatarIcon(
160 | profileImage: profileImage,
161 | marginColor: (themeState.isDarkTheme)
162 | ? Theme.of(context).accentColor
163 | : Colors.transparent,
164 | height: responsive.widthPercent(8.5),
165 | width: responsive.widthPercent(8.5),
166 | child: Material(
167 | color: Colors.transparent,
168 | child: InkWell(
169 | onTap: () => Navigator.of(context).push(
170 | MaterialPageRoute(
171 | builder: (_) => const ProfileScreen(),
172 | ),
173 | ),
174 | child: const SizedBox(),
175 | ),
176 | ),
177 | ),
178 | ),
179 | ),
180 | ],
181 | ),
182 | ),
183 | ],
184 | ),
185 | );
186 | }
187 | }
188 |
189 | class _PostBar extends StatelessWidget {
190 | const _PostBar({
191 | Key? key,
192 | required this.profileImage,
193 | }) : super(key: key);
194 |
195 | final String profileImage;
196 |
197 | @override
198 | Widget build(BuildContext context) {
199 | final themeState = Provider.of(context);
200 | final responsive = Responsive.of(context);
201 | const smileIcon = 'assets/facebook_ui/icons/smile_icon.png';
202 |
203 | return Row(
204 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
205 | crossAxisAlignment: CrossAxisAlignment.start,
206 | children: [
207 | AvatarIcon(
208 | profileImage: profileImage,
209 | height: responsive.widthPercent(6),
210 | width: responsive.widthPercent(6),
211 | marginWidth: 1.5,
212 | child: const SizedBox(),
213 | marginColor: (themeState.isDarkTheme)
214 | ? Theme.of(context).accentColor
215 | : Colors.transparent,
216 | ),
217 | SizedBox(width: responsive.widthPercent(2)),
218 | Container(
219 | width: responsive.widthPercent(70),
220 | height: responsive.widthPercent(6.5),
221 | child: TextField(
222 | decoration: InputDecoration(
223 | enabledBorder: InputBorder.none,
224 | border: InputBorder.none,
225 | hintText: '¿Qué estas pensado, Moisés?',
226 | hintStyle: TextStyle(
227 | fontSize: responsive.widthPercent(3.5),
228 | color: (themeState.isDarkTheme)
229 | ? Theme.of(context).accentColor
230 | : const Color(0xff9aa2bf),
231 | ),
232 | ),
233 | style: TextStyle(
234 | color: Theme.of(context).accentColor,
235 | fontSize: responsive.heightPercent(1.5),
236 | ),
237 | ),
238 | ),
239 | ClipOval(
240 | child: Container(
241 | height: responsive.widthPercent(5),
242 | width: responsive.widthPercent(5),
243 | decoration: const BoxDecoration(
244 | shape: BoxShape.circle,
245 | image: DecorationImage(
246 | image: AssetImage(smileIcon),
247 | ),
248 | ),
249 | child: Material(
250 | color: Colors.transparent,
251 | child: InkWell(
252 | onTap: () => debugPrint('Smile'),
253 | child: const Center(),
254 | ),
255 | ),
256 | ),
257 | ),
258 | ],
259 | );
260 | }
261 | }
262 |
263 | class PostActions extends StatelessWidget {
264 | const PostActions({
265 | Key? key,
266 | }) : super(key: key);
267 |
268 | @override
269 | Widget build(BuildContext context) {
270 | final responsive = Responsive.of(context);
271 |
272 | return Row(
273 | mainAxisAlignment: MainAxisAlignment.spaceAround,
274 | children: [
275 | LargeButton(
276 | callback: () => debugPrint('Fotos'),
277 | text: 'Fotos',
278 | height: responsive.heightPercent(4),
279 | width: responsive.widthPercent(27),
280 | icon: const FaIcon(
281 | FontAwesomeIcons.camera,
282 | color: Color(0xff76c997),
283 | size: 14,
284 | ),
285 | fontSize: responsive.heightPercent(1),
286 | ),
287 | LargeButton(
288 | callback: () => debugPrint('En vivo'),
289 | text: 'En vivo',
290 | height: responsive.heightPercent(4),
291 | width: responsive.widthPercent(27),
292 | icon: Stack(
293 | children: [
294 | const FaIcon(
295 | FontAwesomeIcons.video,
296 | color: Color(0xffee305e),
297 | size: 14,
298 | ),
299 | Positioned(
300 | left: 2,
301 | top: 3,
302 | child: Container(
303 | height: 3,
304 | width: 3,
305 | decoration: const BoxDecoration(
306 | color: Colors.white,
307 | shape: BoxShape.circle,
308 | ),
309 | ),
310 | )
311 | ],
312 | ),
313 | fontSize: responsive.heightPercent(1),
314 | ),
315 | LargeButton(
316 | height: responsive.heightPercent(4),
317 | width: responsive.widthPercent(30),
318 | callback: () => debugPrint('Video corto'),
319 | text: 'Video corto',
320 | icon: const FaIcon(
321 | FontAwesomeIcons.eye,
322 | color: Color(0xff3284f5),
323 | size: 14,
324 | ),
325 | fontSize: responsive.heightPercent(1),
326 | )
327 | ],
328 | );
329 | }
330 | }
331 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/home_screen/stories.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:dotted_border/dotted_border.dart';
3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
4 | import 'package:provider/provider.dart';
5 |
6 | import '../../../utils/responsive.dart';
7 | import '../../data/storie.dart';
8 | import '../../theme/theme_state.dart';
9 |
10 | class Stories extends StatelessWidget {
11 | const Stories({
12 | Key? key,
13 | }) : super(key: key);
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | final responsive = Responsive.of(context);
18 |
19 | return Container(
20 | height: responsive.widthPercent(31),
21 | decoration: const BoxDecoration(
22 | borderRadius: BorderRadius.vertical(
23 | bottom: Radius.circular(25),
24 | ),
25 | ),
26 | child: ListView.builder(
27 | itemCount: stories.length,
28 | padding: const EdgeInsets.symmetric(horizontal: 15),
29 | physics: const BouncingScrollPhysics(),
30 | scrollDirection: Axis.horizontal,
31 | itemBuilder: (_, index) {
32 | return StorieWidget(storie: stories[index]);
33 | },
34 | ),
35 | );
36 | }
37 | }
38 |
39 | class StorieWidget extends StatelessWidget {
40 | const StorieWidget({
41 | Key? key,
42 | required this.storie,
43 | }) : super(key: key);
44 |
45 | final Storie storie;
46 |
47 | @override
48 | Widget build(BuildContext context) {
49 | final themeState = Provider.of(context);
50 | final responsive = Responsive.of(context);
51 | final previewStory = storie.previewStory;
52 | final userImage = storie.userImage;
53 | final userName = storie.userName;
54 | final dotPattern =
55 | (userImage == 'none') ? List.of([3.5]) : List.of([130.0]);
56 |
57 | return Container(
58 | width: responsive.widthPercent(20),
59 | margin: const EdgeInsets.symmetric(horizontal: 5),
60 | child: LayoutBuilder(builder: (_, constraints) {
61 | return Stack(
62 | children: [
63 | LayoutBuilder(
64 | builder: (_, constraints) {
65 | return Row(
66 | mainAxisAlignment: MainAxisAlignment.center,
67 | children: [
68 | Container(
69 | margin: EdgeInsets.only(
70 | top: responsive.heightPercent(1.5),
71 | ),
72 | height: (constraints.maxHeight > 115)
73 | ? constraints.maxHeight * .55
74 | : constraints.maxHeight * .63,
75 | width: constraints.maxWidth * .9,
76 | decoration: BoxDecoration(
77 | image: DecorationImage(
78 | image: AssetImage(previewStory),
79 | fit: BoxFit.cover,
80 | ),
81 | borderRadius:
82 | BorderRadius.circular(responsive.widthPercent(6.5)),
83 | ),
84 | child: Material(
85 | color: Colors.transparent,
86 | child: InkWell(
87 | borderRadius: BorderRadius.circular(
88 | responsive.widthPercent(6.5),
89 | ),
90 | onTap: () => debugPrint(
91 | '$userName',
92 | ),
93 | child: const SizedBox(),
94 | ),
95 | ),
96 | ),
97 | ],
98 | );
99 | },
100 | ),
101 | Positioned(
102 | right: 1,
103 | left: 1,
104 | // top: 1,
105 | bottom: (constraints.maxHeight > 115)
106 | ? constraints.maxWidth / 5
107 | : constraints.maxWidth / 50,
108 | child: Container(
109 | child: Column(
110 | mainAxisSize: MainAxisSize.min,
111 | children: [
112 | DottedBorder(
113 | borderType: BorderType.RRect,
114 | radius: const Radius.circular(30),
115 | padding: const EdgeInsets.all(1),
116 | dashPattern: dotPattern,
117 | color: const Color(0xff3ca1f5),
118 | strokeWidth: 1.5,
119 | child: Container(
120 | height: responsive.widthPercent(6),
121 | width: responsive.widthPercent(6),
122 | decoration: const BoxDecoration(
123 | shape: BoxShape.circle,
124 | ),
125 | child: Center(
126 | child: CircleAvatar(
127 | backgroundColor: const Color(0xff3284f5),
128 | backgroundImage: (userImage == 'none')
129 | ? null
130 | : AssetImage(userImage),
131 | child: (userImage == 'none')
132 | ? const FaIcon(
133 | FontAwesomeIcons.plus,
134 | color: Colors.white,
135 | size: 7,
136 | )
137 | : null,
138 | maxRadius: responsive.heightPercent(1),
139 | ),
140 | ),
141 | ),
142 | ),
143 | const SizedBox(height: 5),
144 | Text(
145 | userName,
146 | style: TextStyle(
147 | fontSize: responsive.widthPercent(2.7),
148 | fontWeight: FontWeight.w400,
149 | color: (themeState.isDarkTheme)
150 | ? const Color(0xffd4d5d8)
151 | : const Color(0xff747c96),
152 | ),
153 | textAlign: TextAlign.center,
154 | )
155 | ],
156 | ),
157 | ),
158 | )
159 | ],
160 | );
161 | }),
162 | );
163 | }
164 | }
165 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/large_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:auto_size_text/auto_size_text.dart';
3 |
4 | class LargeButton extends StatelessWidget {
5 | const LargeButton({
6 | Key? key,
7 | required this.text,
8 | required this.icon,
9 | required this.callback,
10 | required this.height,
11 | required this.width,
12 | required this.fontSize,
13 | }) : super(key: key);
14 |
15 | final String text;
16 | final Widget icon;
17 | final VoidCallback callback;
18 | final double height;
19 | final double width;
20 | final double fontSize;
21 |
22 | @override
23 | Widget build(BuildContext context) {
24 | return Container(
25 | height: height,
26 | width: width,
27 | child: TextButton(
28 | onPressed: callback,
29 | style: ButtonStyle(
30 | elevation: MaterialStateProperty.all(0.0),
31 | backgroundColor:
32 | MaterialStateProperty.all(Theme.of(context).buttonColor),
33 | overlayColor:
34 | MaterialStateProperty.all(ThemeData().splashColor),
35 | ),
36 | child: Row(
37 | mainAxisAlignment: MainAxisAlignment.center,
38 | crossAxisAlignment: CrossAxisAlignment.center,
39 | children: [
40 | icon,
41 | const SizedBox(width: 10),
42 | AutoSizeText(
43 | text,
44 | style: TextStyle(
45 | color: Theme.of(context).accentColor,
46 | fontWeight: FontWeight.w500,
47 | fontSize: fontSize,
48 | ),
49 | ),
50 | ],
51 | ),
52 | ),
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/navigation_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_svg/svg.dart';
3 | import 'package:provider/provider.dart';
4 |
5 | import '../../utils/responsive.dart';
6 | import '../data/local_providers.dart';
7 | import '../theme/theme_state.dart';
8 | import '../widgets/circle_button.dart';
9 | import './notification_icon.dart';
10 |
11 | const _duration = Duration(milliseconds: 400);
12 | const double _bottomBarHide = -100.0;
13 | const double _bottomBarShow = 0.0;
14 |
15 | class NavigationBar extends StatelessWidget {
16 | const NavigationBar({
17 | Key? key,
18 | this.showBar = true,
19 | required this.selectedIndex,
20 | }) : super(key: key);
21 |
22 | final bool showBar;
23 | final int selectedIndex;
24 |
25 | @override
26 | Widget build(BuildContext context) {
27 | final screensState = Provider.of(context);
28 | final themeState = Provider.of(context);
29 | final responsive = Responsive.of(context);
30 |
31 | return AnimatedPositioned(
32 | duration: _duration,
33 | bottom: showBar ? _bottomBarShow : _bottomBarHide,
34 | left: 0,
35 | right: 0,
36 | child: Container(
37 | height: responsive.heightPercent(8),
38 | decoration: BoxDecoration(
39 | color: (themeState.isDarkTheme)
40 | ? (selectedIndex == 1)
41 | ? Theme.of(context).backgroundColor
42 | : Theme.of(context).scaffoldBackgroundColor
43 | : Theme.of(context).backgroundColor,
44 | borderRadius: const BorderRadius.vertical(
45 | top: Radius.circular(25),
46 | ),
47 | ),
48 | child: Row(
49 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
50 | crossAxisAlignment: CrossAxisAlignment.center,
51 | children: [
52 | CircleButton(
53 | callback: () => screensState.page = 0,
54 | icon: SvgPicture.asset(
55 | 'assets/facebook_ui/icons/home_icon.svg',
56 | color: (selectedIndex == 0)
57 | ? const Color(0xff3284f5)
58 | : Theme.of(context).iconTheme.color,
59 | height: responsive.heightPercent(2.5),
60 | ),
61 | backgroundColor: Colors.transparent,
62 | ),
63 | Stack(
64 | children: [
65 | CircleButton(
66 | callback: () => screensState.page = 2,
67 | icon: SvgPicture.asset(
68 | 'assets/facebook_ui/icons/watch_icon.svg',
69 | color: (selectedIndex == 2)
70 | ? const Color(0xff3284f5)
71 | : Theme.of(context).iconTheme.color,
72 | height: responsive.heightPercent(2.5),
73 | ),
74 | backgroundColor: Colors.transparent,
75 | ),
76 | const Positioned(
77 | right: 2,
78 | top: 6,
79 | child: NotificationIcon(),
80 | ),
81 | ],
82 | ),
83 | Stack(
84 | children: [
85 | CircleButton(
86 | callback: () => screensState.page = 3,
87 | icon: SvgPicture.asset(
88 | 'assets/facebook_ui/icons/shopping_icon.svg',
89 | color: (selectedIndex == 3)
90 | ? const Color(0xff3284f5)
91 | : Theme.of(context).iconTheme.color,
92 | height: responsive.heightPercent(2.5),
93 | ),
94 | backgroundColor: Colors.transparent,
95 | ),
96 | const Positioned(
97 | right: 2,
98 | top: 7,
99 | child: NotificationIcon(),
100 | ),
101 | ],
102 | ),
103 | CircleButton(
104 | callback: () => screensState.page = 4,
105 | icon: SvgPicture.asset(
106 | 'assets/facebook_ui/icons/friends_icon.svg',
107 | color: (selectedIndex == 4)
108 | ? const Color(0xff3284f5)
109 | : Theme.of(context).iconTheme.color,
110 | height: responsive.heightPercent(2.5),
111 | ),
112 | backgroundColor: Colors.transparent,
113 | ),
114 | CircleButton(
115 | callback: () => screensState.page = 1,
116 | icon: SvgPicture.asset(
117 | 'assets/facebook_ui/icons/menu_icon.svg',
118 | color: (selectedIndex == 1)
119 | ? const Color(0xff3284f5)
120 | : Theme.of(context).iconTheme.color,
121 | height: responsive.heightPercent(2.5),
122 | ),
123 | backgroundColor: Colors.transparent,
124 | ),
125 | ],
126 | ),
127 | ),
128 | );
129 | }
130 | }
131 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/notification_icon.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../utils/responsive.dart';
4 |
5 | class NotificationIcon extends StatelessWidget {
6 | const NotificationIcon({
7 | Key? key,
8 | }) : super(key: key);
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | final responsive = Responsive.of(context);
13 |
14 | return Container(
15 | height: responsive.heightPercent(1.3),
16 | width: responsive.heightPercent(1.3),
17 | decoration: const BoxDecoration(
18 | color: Colors.white,
19 | shape: BoxShape.circle,
20 | ),
21 | child: Center(
22 | child: Container(
23 | height: responsive.heightPercent(1),
24 | width: responsive.heightPercent(1),
25 | decoration: const BoxDecoration(
26 | color: Color(0xffee305e),
27 | shape: BoxShape.circle,
28 | ),
29 | ),
30 | ),
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/lib/facebook_ui/widgets/reaction_icons.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 |
4 | class Reactions extends StatelessWidget {
5 | const Reactions({
6 | Key? key,
7 | required this.principalCircleHight,
8 | required this.principalCircleWidth,
9 | required this.secondaryCircleHight,
10 | required this.secondaryCircleWidth,
11 | required this.iconSize,
12 | required this.rightSeparation,
13 | }) : super(key: key);
14 |
15 | final double principalCircleHight;
16 | final double principalCircleWidth;
17 | final double secondaryCircleHight;
18 | final double secondaryCircleWidth;
19 | final double iconSize;
20 | final double rightSeparation;
21 |
22 | @override
23 | Widget build(BuildContext context) {
24 | return Stack(
25 | children: [
26 | Positioned(
27 | right: rightSeparation,
28 | child: Container(
29 | height: principalCircleHight,
30 | width: principalCircleWidth,
31 | decoration: const BoxDecoration(
32 | color: Colors.white,
33 | shape: BoxShape.circle,
34 | ),
35 | child: Center(
36 | child: Container(
37 | height: secondaryCircleHight,
38 | width: secondaryCircleWidth,
39 | decoration: const BoxDecoration(
40 | color: Color(0xff3284f5),
41 | shape: BoxShape.circle,
42 | ),
43 | child: Center(
44 | child: FaIcon(
45 | FontAwesomeIcons.solidThumbsUp,
46 | color: Colors.white,
47 | size: iconSize,
48 | ),
49 | ),
50 | ),
51 | ),
52 | ),
53 | ),
54 | Positioned(
55 | right: 0,
56 | child: Container(
57 | height: principalCircleHight,
58 | width: principalCircleWidth,
59 | decoration: const BoxDecoration(
60 | color: Colors.white,
61 | shape: BoxShape.circle,
62 | ),
63 | child: Center(
64 | child: Container(
65 | height: secondaryCircleHight,
66 | width: secondaryCircleWidth,
67 | decoration: const BoxDecoration(
68 | color: Color(0xffee305e),
69 | shape: BoxShape.circle,
70 | ),
71 | child: Center(
72 | child: FaIcon(
73 | FontAwesomeIcons.solidHeart,
74 | color: Colors.white,
75 | size: iconSize,
76 | ),
77 | ),
78 | ),
79 | ),
80 | ),
81 | ),
82 | ],
83 | );
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:flutter/services.dart';
4 |
5 | import 'delivery_app/data/category_state.dart';
6 | import 'delivery_app/screens/main_screen_delivery_food.dart';
7 |
8 | import 'facebook_ui/data/local_providers.dart';
9 | import 'facebook_ui/screens/screen_controller.dart';
10 | import 'facebook_ui/theme/theme_state.dart';
11 |
12 | void main() {
13 | SystemChrome.setSystemUIOverlayStyle(
14 | const SystemUiOverlayStyle(
15 | statusBarColor: Colors.transparent,
16 | statusBarIconBrightness: Brightness.dark,
17 | ),
18 | );
19 | runApp(MyApp());
20 | }
21 |
22 | class MyApp extends StatelessWidget {
23 | @override
24 | Widget build(BuildContext context) {
25 | return MultiProvider(
26 | providers: [
27 | ChangeNotifierProvider(create: (_) => CategoryState()),
28 | ChangeNotifierProvider(create: (_) => BottomBarState()),
29 | ChangeNotifierProvider(create: (_) => ScreensState()),
30 | ChangeNotifierProvider(create: (_) => ThemeState()),
31 | ],
32 | child: const MaterialApp(
33 | debugShowCheckedModeBanner: false,
34 | home: Scaffold(
35 | body: MainScreen(),
36 | ),
37 | ),
38 | );
39 | }
40 | }
41 |
42 | class MainScreen extends StatelessWidget {
43 | const MainScreen({Key? key}) : super(key: key);
44 |
45 | @override
46 | Widget build(BuildContext context) {
47 | return Container(
48 | child: Scaffold(
49 | body: Center(
50 | child: Column(
51 | mainAxisAlignment: MainAxisAlignment.center,
52 | children: [
53 | ElevatedButton(
54 | onPressed: () => Navigator.of(context).push(
55 | MaterialPageRoute(
56 | builder: (_) => const MainScreenDeliveryFood(),
57 | ),
58 | ),
59 | child: const Text('Delivery App'),
60 | ),
61 | ElevatedButton(
62 | onPressed: () => Navigator.of(context).push(
63 | MaterialPageRoute(
64 | builder: (_) => const ScreenController(),
65 | ),
66 | ),
67 | child: const Text('Facebook UI (Mao Lop)'),
68 | ),
69 | ],
70 | ),
71 | ),
72 | ),
73 | );
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/lib/utils/responsive.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math' as math;
2 | import 'package:flutter/widgets.dart';
3 |
4 | class Responsive {
5 | const Responsive({
6 | required this.width,
7 | required this.height,
8 | required this.inch,
9 | });
10 |
11 | factory Responsive.of(BuildContext context) {
12 | final data = MediaQuery.of(context);
13 | final size = data.size;
14 | final inch = math.sqrt(math.pow(size.width, 2) + math.pow(size.height, 2));
15 |
16 | return Responsive(height: size.height, width: size.width, inch: inch);
17 | }
18 |
19 | final double width, height, inch;
20 |
21 | double widthPercent(double percent) {
22 | return width * percent / 100;
23 | }
24 |
25 | double heightPercent(double percent) {
26 | return height * percent / 100;
27 | }
28 |
29 | double inchPercent(double percent) {
30 | return inch * percent / 100;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "2.5.0"
11 | auto_size_text:
12 | dependency: "direct main"
13 | description:
14 | name: auto_size_text
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "3.0.0-nullsafety.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.1.0"
32 | charcode:
33 | dependency: transitive
34 | description:
35 | name: charcode
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.2.0"
39 | clock:
40 | dependency: transitive
41 | description:
42 | name: clock
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "1.1.0"
46 | collection:
47 | dependency: transitive
48 | description:
49 | name: collection
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "1.15.0"
53 | cupertino_icons:
54 | dependency: "direct main"
55 | description:
56 | name: cupertino_icons
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "1.0.2"
60 | dotted_border:
61 | dependency: "direct main"
62 | description:
63 | name: dotted_border
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "2.0.0-nullsafety.0"
67 | fake_async:
68 | dependency: transitive
69 | description:
70 | name: fake_async
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "1.2.0"
74 | flutter:
75 | dependency: "direct main"
76 | description: flutter
77 | source: sdk
78 | version: "0.0.0"
79 | flutter_svg:
80 | dependency: "direct main"
81 | description:
82 | name: flutter_svg
83 | url: "https://pub.dartlang.org"
84 | source: hosted
85 | version: "0.21.0-nullsafety.0"
86 | flutter_test:
87 | dependency: "direct dev"
88 | description: flutter
89 | source: sdk
90 | version: "0.0.0"
91 | font_awesome_flutter:
92 | dependency: "direct main"
93 | description:
94 | name: font_awesome_flutter
95 | url: "https://pub.dartlang.org"
96 | source: hosted
97 | version: "9.0.0"
98 | matcher:
99 | dependency: transitive
100 | description:
101 | name: matcher
102 | url: "https://pub.dartlang.org"
103 | source: hosted
104 | version: "0.12.10"
105 | meta:
106 | dependency: transitive
107 | description:
108 | name: meta
109 | url: "https://pub.dartlang.org"
110 | source: hosted
111 | version: "1.3.0"
112 | nested:
113 | dependency: transitive
114 | description:
115 | name: nested
116 | url: "https://pub.dartlang.org"
117 | source: hosted
118 | version: "1.0.0"
119 | path:
120 | dependency: transitive
121 | description:
122 | name: path
123 | url: "https://pub.dartlang.org"
124 | source: hosted
125 | version: "1.8.0"
126 | path_drawing:
127 | dependency: transitive
128 | description:
129 | name: path_drawing
130 | url: "https://pub.dartlang.org"
131 | source: hosted
132 | version: "0.5.0-nullsafety.0"
133 | path_parsing:
134 | dependency: transitive
135 | description:
136 | name: path_parsing
137 | url: "https://pub.dartlang.org"
138 | source: hosted
139 | version: "0.2.0-nullsafety.0"
140 | pedantic:
141 | dependency: transitive
142 | description:
143 | name: pedantic
144 | url: "https://pub.dartlang.org"
145 | source: hosted
146 | version: "1.11.0"
147 | petitparser:
148 | dependency: transitive
149 | description:
150 | name: petitparser
151 | url: "https://pub.dartlang.org"
152 | source: hosted
153 | version: "4.1.0"
154 | provider:
155 | dependency: "direct main"
156 | description:
157 | name: provider
158 | url: "https://pub.dartlang.org"
159 | source: hosted
160 | version: "5.0.0"
161 | sky_engine:
162 | dependency: transitive
163 | description: flutter
164 | source: sdk
165 | version: "0.0.99"
166 | source_span:
167 | dependency: transitive
168 | description:
169 | name: source_span
170 | url: "https://pub.dartlang.org"
171 | source: hosted
172 | version: "1.8.0"
173 | stack_trace:
174 | dependency: transitive
175 | description:
176 | name: stack_trace
177 | url: "https://pub.dartlang.org"
178 | source: hosted
179 | version: "1.10.0"
180 | stream_channel:
181 | dependency: transitive
182 | description:
183 | name: stream_channel
184 | url: "https://pub.dartlang.org"
185 | source: hosted
186 | version: "2.1.0"
187 | string_scanner:
188 | dependency: transitive
189 | description:
190 | name: string_scanner
191 | url: "https://pub.dartlang.org"
192 | source: hosted
193 | version: "1.1.0"
194 | term_glyph:
195 | dependency: transitive
196 | description:
197 | name: term_glyph
198 | url: "https://pub.dartlang.org"
199 | source: hosted
200 | version: "1.2.0"
201 | test_api:
202 | dependency: transitive
203 | description:
204 | name: test_api
205 | url: "https://pub.dartlang.org"
206 | source: hosted
207 | version: "0.2.19"
208 | typed_data:
209 | dependency: transitive
210 | description:
211 | name: typed_data
212 | url: "https://pub.dartlang.org"
213 | source: hosted
214 | version: "1.3.0"
215 | vector_math:
216 | dependency: transitive
217 | description:
218 | name: vector_math
219 | url: "https://pub.dartlang.org"
220 | source: hosted
221 | version: "2.1.0"
222 | very_good_analysis:
223 | dependency: "direct dev"
224 | description:
225 | name: very_good_analysis
226 | url: "https://pub.dartlang.org"
227 | source: hosted
228 | version: "2.0.0"
229 | xml:
230 | dependency: transitive
231 | description:
232 | name: xml
233 | url: "https://pub.dartlang.org"
234 | source: hosted
235 | version: "5.1.0"
236 | sdks:
237 | dart: ">=2.12.0 <3.0.0"
238 | flutter: ">=1.24.0-7.0"
239 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: flutter_samples
2 | description: Flutter apps samples
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' # Remove this line if you wish to publish to pub.dev
7 |
8 | # The following defines the version and build number for your application.
9 | # A version number is three numbers separated by dots, like 1.2.43
10 | # followed by an optional build number separated by a +.
11 | # Both the version and the builder number may be overridden in flutter
12 | # build by specifying --build-name and --build-number, respectively.
13 | # In Android, build-name is used as versionName while build-number used as versionCode.
14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
16 | # Read more about iOS versioning at
17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: ">=2.12.0 <3.0.0"
22 |
23 | dependencies:
24 | flutter:
25 | sdk: flutter
26 | auto_size_text: ^3.0.0-nullsafety.0
27 | dotted_border: ^2.0.0-nullsafety.0
28 | flutter_svg: ^0.21.0-nullsafety.0
29 | font_awesome_flutter: ^9.0.0
30 | provider: ^5.0.0
31 |
32 |
33 | # The following adds the Cupertino Icons font to your application.
34 | # Use with the CupertinoIcons class for iOS style icons.
35 | cupertino_icons: ^1.0.2
36 |
37 | dev_dependencies:
38 | flutter_test:
39 | sdk: flutter
40 | very_good_analysis: ^2.0.0
41 |
42 | # For information on the generic Dart part of this file, see the
43 | # following page: https://dart.dev/tools/pub/pubspec
44 |
45 | # The following section is specific to Flutter.
46 | flutter:
47 |
48 | # The following line ensures that the Material Icons font is
49 | # included with your application, so that you can use the icons in
50 | # the material Icons class.
51 | uses-material-design: true
52 |
53 | # To add assets to your application, add an assets section, like this:
54 | assets:
55 | - assets/common/images/
56 | - assets/delivery_app/icons/
57 | - assets/delivery_app/images/
58 | - assets/facebook_ui/icons/
59 | - assets/facebook_ui/images/
60 | - assets/facebook_ui/images/collections/
61 | - assets/facebook_ui/images/people/
62 | - assets/facebook_ui/images/profile/
63 | - assets/facebook_ui/images/stories/
64 |
65 | # example:
66 | fonts:
67 | - family: Lexend
68 | fonts:
69 | - asset: assets/common/fonts/Lexend/Lexend-Bold.ttf
70 | weight: 700
71 | - asset: assets/common/fonts/Lexend/Lexend-Light.ttf
72 | - asset: assets/common/fonts/Lexend/Lexend-Medium.ttf
73 | - asset: assets/common/fonts/Lexend/Lexend-Regular.ttf
74 | - asset: assets/common/fonts/Lexend/Lexend-SemiBold.ttf
75 |
76 | - family: Mulish
77 | fonts:
78 | - asset: assets/common/fonts/Mulish/Mulish-Bold.ttf
79 | weight: 700
80 | - asset: assets/common/fonts/Mulish/Mulish-Light.ttf
81 | - asset: assets/common/fonts/Mulish/Mulish-Medium.ttf
82 | - asset: assets/common/fonts/Mulish/Mulish-Regular.ttf
83 | - asset: assets/common/fonts/Mulish/Mulish-SemiBold.ttf
--------------------------------------------------------------------------------
/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:flutter_samples/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 |
--------------------------------------------------------------------------------