├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── kevynmh │ │ │ │ └── flutter_projects │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ ├── ic_launcher_background.xml │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── icons │ ├── icon.png │ └── md_icons │ │ ├── MdIcons.ttf │ │ └── config.json ├── img │ ├── boats │ │ ├── boat1.png │ │ ├── boat2.png │ │ ├── boat3.png │ │ ├── boat4.png │ │ ├── gallery1.jpg │ │ ├── gallery2.jpg │ │ ├── gallery3.jpg │ │ ├── gallery4.jpg │ │ └── gallery5.jpg │ ├── books │ │ ├── black buck.jpg │ │ ├── breath.jpg │ │ ├── dont promise me rainbows.jpg │ │ ├── food what should i cook.jpg │ │ ├── food what should i eat.jpg │ │ ├── it ends with us.jpg │ │ ├── poisoned.jpg │ │ ├── see her die.jpg │ │ ├── small time.jpg │ │ ├── the book of why.jpg │ │ ├── the copenhagen trilogy.jpg │ │ ├── the dancing girls.jpg │ │ ├── the food lab.jpg │ │ ├── the four winds.jpg │ │ ├── the lives of lucian freud.jpg │ │ ├── the shining.jpg │ │ ├── the ultimate hitchhikers guide to the galaxy.jpg │ │ └── when harry met minnie.jpg │ ├── findout │ │ ├── background1.jpg │ │ ├── background2.jpg │ │ ├── background3.jpg │ │ ├── bar.jpg │ │ ├── friends1.jpg │ │ ├── friends2.jpg │ │ ├── friends3.jpg │ │ └── map.jpg │ ├── flags │ │ ├── belgium.png │ │ ├── brazil.png │ │ ├── canada.png │ │ ├── china.png │ │ ├── colombia.png │ │ ├── egypt.png │ │ ├── england.png │ │ ├── italy.png │ │ ├── mexico.png │ │ ├── south-africa.png │ │ ├── south-korea.png │ │ ├── sweden.png │ │ ├── united-kingdom.png │ │ └── united-states-of-america.png │ ├── gaming │ │ ├── animal_crossing.jpg │ │ ├── boy.png │ │ ├── codwarzone.jpg │ │ ├── crash_bandicoot_4.jpg │ │ ├── cyberpunk2077.jpg │ │ ├── doom_eternal.jpg │ │ ├── fall_guys.jpg │ │ ├── lol.jpg │ │ ├── ori.jpg │ │ ├── orix_cube.png │ │ ├── spiderman.jpg │ │ └── valorant.jpg │ ├── instagram │ │ ├── discord.png │ │ ├── facebook.png │ │ ├── github.png │ │ ├── instagram.png │ │ ├── snapchat.png │ │ ├── twitch.png │ │ ├── twitter.png │ │ ├── unsplash.png │ │ ├── uplabs.png │ │ └── youtube.png │ ├── movie │ │ ├── actor1.jpg │ │ ├── actor2.jpg │ │ ├── actor3.jpg │ │ ├── actor4.jpg │ │ ├── actor5.jpg │ │ ├── apokolips_war.jpg │ │ ├── bad_boys2.jpg │ │ ├── bird_prey.jpg │ │ ├── jojo_rabbit.jpg │ │ ├── kissing_both.jpg │ │ ├── mision_rescate.jpg │ │ ├── mortal_kombat.jpg │ │ ├── onward.jpg │ │ ├── qr_code.png │ │ ├── rambo.jpg │ │ ├── red_son.jpg │ │ ├── sonic.jpg │ │ └── star_wars.jpg │ ├── music │ │ ├── bipolar.jpg │ │ ├── cortamanbo.jpg │ │ ├── espejo.jpg │ │ ├── jueves.jpg │ │ ├── porfiado.jpg │ │ ├── raro.jpg │ │ ├── vinyl.png │ │ └── zombie.jpg │ ├── projects │ │ ├── boats.gif │ │ ├── book_app.gif │ │ ├── broco.png │ │ ├── findout.png │ │ ├── heroes.gif │ │ ├── ig.png │ │ ├── medical_appointment.png │ │ ├── movie.gif │ │ ├── music.gif │ │ ├── music_two.png │ │ ├── orix_gaming.jpg │ │ ├── photographers_app.png │ │ ├── streaming_app.png │ │ ├── template_gallery.gif │ │ ├── travel.gif │ │ └── vpn.jpg │ ├── streaming │ │ ├── Descubrir@3x.png │ │ ├── Explorar@3x.png │ │ ├── Profile@3x.png │ │ ├── blue-particles.png │ │ ├── clash.png │ │ ├── controls-ilustration.png │ │ ├── free.png │ │ ├── lol.png │ │ ├── purple-particles.png │ │ └── red-particles.png │ └── superheroes │ │ ├── antman-a.png │ │ ├── blackwidow-a.png │ │ ├── captain-b.png │ │ ├── hawkeye.png │ │ ├── hulk-b.png │ │ ├── ironman-a.png │ │ ├── marvel_logo.jpg │ │ ├── spiderman-a.png │ │ └── thor-c.png └── svg │ ├── instagram │ └── heart_colored.svg │ ├── medical │ ├── mc-blood-pressure.svg │ ├── mc-cardiogram.svg │ ├── mc-cholesterol.svg │ ├── mc-glucose.svg │ ├── mc-height.svg │ ├── mc-hemoglobin.svg │ ├── mc-weight.svg │ ├── mi-drink-water.svg │ ├── mi-eat-vegatables.svg │ ├── mi-make-exercise.svg │ ├── mi-no-coffee.svg │ ├── mi-no-drinking.svg │ └── mi-no-fast-food.svg │ └── streaming │ ├── action.svg │ ├── music.svg │ ├── skull.svg │ └── tenis-ball.svg ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── core │ ├── app │ │ └── app.dart │ ├── models │ │ └── project_model.dart │ ├── routes │ │ └── routes.dart │ ├── shared │ │ └── ui │ │ │ └── animations │ │ │ └── tween_animations.dart │ └── ui │ │ ├── screens │ │ └── broco_projects_screen.dart │ │ └── widgets │ │ └── project_card.dart ├── main.dart └── projects │ ├── boats_app │ ├── boats_app.dart │ ├── models │ │ └── boat.dart │ └── ui │ │ ├── screens │ │ ├── boat_list_screen.dart │ │ └── boat_specs_screen.dart │ │ └── widgets │ │ └── boat_card.dart │ ├── bookstore_app │ ├── bloc │ │ ├── categories_bloc.dart │ │ └── categories_bloc_provider.dart │ ├── book_app.dart │ ├── models │ │ ├── book.dart │ │ └── user_book.dart │ ├── theme │ │ └── theme.dart │ └── ui │ │ ├── screens │ │ ├── book_detail │ │ │ ├── book_detail_page.dart │ │ │ ├── open_book_page.dart │ │ │ └── widgets │ │ │ │ └── book_detail_header.dart │ │ ├── filters │ │ │ └── filter_page.dart │ │ ├── home │ │ │ └── home_page.dart │ │ └── navigation │ │ │ └── book_navigation_screen.dart │ │ └── widgets │ │ ├── book_rate_stars.dart │ │ ├── book_readers_row.dart │ │ ├── cover_page_book.dart │ │ └── widgets.dart │ ├── find_out │ ├── find_out_app.dart │ ├── models │ │ ├── comments.dart │ │ └── place.dart │ └── ui │ │ ├── forms │ │ ├── login_form.dart │ │ └── register_form.dart │ │ ├── screens │ │ ├── home │ │ │ ├── home_screen.dart │ │ │ └── widgets │ │ │ │ ├── drop_down_widget.dart │ │ │ │ └── page_view_places.dart │ │ ├── social_screen │ │ │ ├── social_screen.dart │ │ │ └── widgets │ │ │ │ ├── background_shader_image.dart │ │ │ │ ├── comment_card.dart │ │ │ │ ├── custom_bottom_navigation.dart │ │ │ │ ├── place_information_card.dart │ │ │ │ ├── social_screen_header.dart │ │ │ │ └── widgets.dart │ │ └── welcome_screen │ │ │ ├── welcome_screen.dart │ │ │ └── widgets │ │ │ ├── animated_background.dart │ │ │ └── snake_button.dart │ │ └── widgets │ │ ├── common_widgets.dart │ │ ├── inverted_top_border_clipper.dart │ │ └── text_input_find_out.dart │ ├── instagram_redesign │ ├── bloc │ │ ├── bloc_provider.dart │ │ └── instagram_bloc.dart │ ├── instagram_app.dart │ ├── models │ │ ├── ig_activity.dart │ │ ├── ig_collection.dart │ │ ├── ig_external_platform.dart │ │ ├── ig_post.dart │ │ ├── ig_user.dart │ │ └── ig_user_stories.dart │ ├── theme │ │ └── themes.dart │ └── ui │ │ ├── pages │ │ ├── activity │ │ │ ├── activities_page.dart │ │ │ └── widgets │ │ │ │ ├── activity_container.dart │ │ │ │ ├── type_activity_toggle_button.dart │ │ │ │ └── widgets.dart │ │ ├── home │ │ │ ├── instagram_home.dart │ │ │ └── widgets │ │ │ │ ├── instagram_add_story.dart │ │ │ │ ├── instagram_stories_item.dart │ │ │ │ ├── settings_blur_card.dart │ │ │ │ └── widgets.dart │ │ └── profile │ │ │ ├── instagram_profile.dart │ │ │ └── widgets │ │ │ ├── bottom_tab_view_profile.dart │ │ │ ├── profile_app_bar.dart │ │ │ ├── title_subtitle_text.dart │ │ │ └── widgets.dart │ │ ├── screens │ │ ├── navigation │ │ │ └── instagram_navigation_screen.dart │ │ ├── post_detail │ │ │ ├── instagram_post_detail.dart │ │ │ └── widgets │ │ │ │ ├── add_comment_text_field.dart │ │ │ │ ├── comment_list_tile.dart │ │ │ │ └── widgets.dart │ │ └── story │ │ │ ├── instagram_stories.dart │ │ │ └── widgets │ │ │ ├── animated_line.dart │ │ │ ├── icon_blur_button.dart │ │ │ ├── send_message_text_field.dart │ │ │ └── widgets.dart │ │ └── widgets │ │ ├── ample_post_card.dart │ │ ├── clean_post_card.dart │ │ ├── footer_post.dart │ │ ├── ig_user_border_image.dart │ │ ├── like_button.dart │ │ ├── page_indicators.dart │ │ ├── post_buttons.dart │ │ ├── red_dot.dart │ │ ├── rounded_border_image.dart │ │ ├── rounded_navigation_bar.dart │ │ └── widgets.dart │ ├── medical_appointment │ ├── medical_app.dart │ ├── models │ │ ├── md_address.dart │ │ ├── md_appointment.dart │ │ ├── md_check.dart │ │ ├── md_doctor.dart │ │ ├── md_doctor_category.dart │ │ ├── md_indication.dart │ │ ├── md_patient.dart │ │ └── medical_check_item.dart │ ├── ui │ │ ├── doctors │ │ │ └── doctors_page.dart │ │ ├── home │ │ │ ├── home_page.dart │ │ │ ├── painters │ │ │ │ └── tongue_painter.dart │ │ │ └── widgets │ │ │ │ ├── appointment_details.dart │ │ │ │ ├── category_card.dart │ │ │ │ ├── home_widgets.dart │ │ │ │ ├── medical_check_card.dart │ │ │ │ ├── next_appointment_card.dart │ │ │ │ ├── search_app_bar.dart │ │ │ │ └── top_doctors_card.dart │ │ └── widgets │ │ │ └── top_rounded_navigation_bar.dart │ └── utils │ │ ├── md_app_colors.dart │ │ ├── md_icons_icons.dart │ │ └── md_utils.dart │ ├── movie_selection │ ├── constants │ │ └── constants.dart │ ├── models │ │ ├── actors.dart │ │ ├── billboard.dart │ │ ├── movie.dart │ │ └── seats.dart │ ├── movie_selection_app.dart │ └── ui │ │ ├── screens │ │ ├── cinema_selection │ │ │ ├── cinema_selection_page.dart │ │ │ └── widgets │ │ │ │ ├── hour_container.dart │ │ │ │ ├── hours_movie_list.dart │ │ │ │ └── select_cinema.dart │ │ ├── detail │ │ │ ├── movie_detail.dart │ │ │ └── widgets │ │ │ │ ├── actors_list.dart │ │ │ │ ├── gradient_button.dart │ │ │ │ ├── movie_main_details.dart │ │ │ │ └── synopsis.dart │ │ ├── home │ │ │ ├── movie_home.dart │ │ │ └── widgets │ │ │ │ ├── billboard_list.dart │ │ │ │ └── header_option.dart │ │ ├── payment │ │ │ └── payment_page.dart │ │ ├── seats_selection │ │ │ ├── seats_selection_page.dart │ │ │ └── widgets │ │ │ │ └── seats_selection_widgets.dart │ │ ├── summary │ │ │ └── summary_page.dart │ │ └── ticket │ │ │ ├── ticket_page.dart │ │ │ └── widgets │ │ │ └── ticket_page_widgets.dart │ │ └── widgets │ │ ├── credit_card_slide.dart │ │ ├── gradient_animation_button.dart │ │ ├── row_stars.dart │ │ ├── tag_container.dart │ │ └── top_bordered_container.dart │ ├── music_album_collection │ ├── models │ │ └── album_model.dart │ ├── music_album_collection.dart │ └── screens │ │ ├── albums │ │ ├── albums_screen.dart │ │ └── widgets │ │ │ ├── album_grid_view_card.dart │ │ │ └── album_list_view_card.dart │ │ ├── music_player │ │ ├── music_player_screen.dart │ │ └── widgets │ │ │ ├── animated_player_controls.dart │ │ │ └── wave_painter.dart │ │ └── widgets │ │ └── album_card_text.dart │ ├── music_vinyl_player │ ├── models │ │ ├── album.dart │ │ └── song.dart │ ├── music_vinyl_player.dart │ └── ui │ │ ├── my_library │ │ ├── my_library_page.dart │ │ └── widgets │ │ │ ├── description_card.dart │ │ │ ├── my_library_widgets.dart │ │ │ ├── row_stars.dart │ │ │ ├── song_play_footer.dart │ │ │ └── vinyl_disk_card.dart │ │ ├── song_player │ │ ├── song_player_page.dart │ │ └── widgets │ │ │ ├── now_playing_app_bar.dart │ │ │ ├── player_controls.dart │ │ │ ├── player_indicator.dart │ │ │ └── song_player_widgets.dart │ │ └── widgets │ │ └── vinyl_disk.dart │ ├── orix_gaming │ ├── models │ │ └── video_game.dart │ ├── orix_gaming_app.dart │ └── ui │ │ ├── home │ │ ├── orix_gaming_home_page.dart │ │ └── widgets │ │ │ └── game_play_card.dart │ │ ├── trending │ │ └── orix_trending_page.dart │ │ └── widgets │ │ ├── orix_navigation_bar.dart │ │ ├── rounded_icon_button.dart │ │ └── user_avatar.dart │ ├── photographers_app │ ├── models │ │ ├── post.dart │ │ └── users.dart │ ├── photographers_app.dart │ ├── theme │ │ └── photo_app_colors.dart │ └── ui │ │ ├── home │ │ ├── photo_home_page.dart │ │ └── widgets │ │ │ └── image_user_container.dart │ │ ├── profile │ │ └── photo_profile_page.dart │ │ └── widgets │ │ ├── curved_navigation_bar.dart │ │ ├── photo_post_card.dart │ │ ├── tile_clipper.dart │ │ └── tile_skew_clipper.dart │ ├── superheroes │ ├── models │ │ └── superhero.dart │ ├── superheroes_app.dart │ └── ui │ │ ├── superhero_detail_page.dart │ │ ├── superhero_slider_page.dart │ │ └── widgets │ │ └── superhero_card.dart │ ├── template_gallery │ ├── models │ │ └── contact.dart │ ├── template_gallery_app.dart │ └── ui │ │ ├── contact_detail_screen.dart │ │ ├── contact_list_page.dart │ │ └── widgets │ │ ├── cards.dart │ │ └── perspective_list_view.dart │ └── travel_app │ ├── extensions │ └── text_theme_x.dart │ ├── models │ └── place.dart │ ├── theme │ └── theme.dart │ ├── travel_app.dart │ └── ui │ ├── detail │ ├── place_detail_screen.dart │ └── widgets │ │ ├── animated_detail_header.dart │ │ ├── place_comments_widget.dart │ │ └── place_images_page_view.dart │ ├── feed │ ├── feed_screen.dart │ └── widgets │ │ ├── place_card.dart │ │ └── travel_navigation_bar.dart │ └── widgets │ ├── gradient_status_tag.dart │ └── translate_animation.dart └── pubspec.yaml /.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 | pubspec.lock 43 | -------------------------------------------------------------------------------- /.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: d408d302e22179d598f467e11da5dd968dbdc9ec 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | linter: 3 | rules: 4 | 5 | analyzer: 6 | strong-mode: 7 | implicit-casts: true 8 | implicit-dynamic: true -------------------------------------------------------------------------------- /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/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 9 | 13 | 21 | 25 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/kevynmh/flutter_projects/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.kevynmh.flutter_projects 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0C2019 4 | -------------------------------------------------------------------------------- /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.6.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.1.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", 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 | #Sat Feb 05 11:11:39 CST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | 8 | -------------------------------------------------------------------------------- /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/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/icons/icon.png -------------------------------------------------------------------------------- /assets/icons/md_icons/MdIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/icons/md_icons/MdIcons.ttf -------------------------------------------------------------------------------- /assets/img/boats/boat1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/boat1.png -------------------------------------------------------------------------------- /assets/img/boats/boat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/boat2.png -------------------------------------------------------------------------------- /assets/img/boats/boat3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/boat3.png -------------------------------------------------------------------------------- /assets/img/boats/boat4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/boat4.png -------------------------------------------------------------------------------- /assets/img/boats/gallery1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/gallery1.jpg -------------------------------------------------------------------------------- /assets/img/boats/gallery2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/gallery2.jpg -------------------------------------------------------------------------------- /assets/img/boats/gallery3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/gallery3.jpg -------------------------------------------------------------------------------- /assets/img/boats/gallery4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/gallery4.jpg -------------------------------------------------------------------------------- /assets/img/boats/gallery5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/boats/gallery5.jpg -------------------------------------------------------------------------------- /assets/img/books/black buck.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/black buck.jpg -------------------------------------------------------------------------------- /assets/img/books/breath.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/breath.jpg -------------------------------------------------------------------------------- /assets/img/books/dont promise me rainbows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/dont promise me rainbows.jpg -------------------------------------------------------------------------------- /assets/img/books/food what should i cook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/food what should i cook.jpg -------------------------------------------------------------------------------- /assets/img/books/food what should i eat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/food what should i eat.jpg -------------------------------------------------------------------------------- /assets/img/books/it ends with us.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/it ends with us.jpg -------------------------------------------------------------------------------- /assets/img/books/poisoned.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/poisoned.jpg -------------------------------------------------------------------------------- /assets/img/books/see her die.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/see her die.jpg -------------------------------------------------------------------------------- /assets/img/books/small time.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/small time.jpg -------------------------------------------------------------------------------- /assets/img/books/the book of why.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the book of why.jpg -------------------------------------------------------------------------------- /assets/img/books/the copenhagen trilogy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the copenhagen trilogy.jpg -------------------------------------------------------------------------------- /assets/img/books/the dancing girls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the dancing girls.jpg -------------------------------------------------------------------------------- /assets/img/books/the food lab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the food lab.jpg -------------------------------------------------------------------------------- /assets/img/books/the four winds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the four winds.jpg -------------------------------------------------------------------------------- /assets/img/books/the lives of lucian freud.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the lives of lucian freud.jpg -------------------------------------------------------------------------------- /assets/img/books/the shining.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the shining.jpg -------------------------------------------------------------------------------- /assets/img/books/the ultimate hitchhikers guide to the galaxy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/the ultimate hitchhikers guide to the galaxy.jpg -------------------------------------------------------------------------------- /assets/img/books/when harry met minnie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/books/when harry met minnie.jpg -------------------------------------------------------------------------------- /assets/img/findout/background1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/background1.jpg -------------------------------------------------------------------------------- /assets/img/findout/background2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/background2.jpg -------------------------------------------------------------------------------- /assets/img/findout/background3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/background3.jpg -------------------------------------------------------------------------------- /assets/img/findout/bar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/bar.jpg -------------------------------------------------------------------------------- /assets/img/findout/friends1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/friends1.jpg -------------------------------------------------------------------------------- /assets/img/findout/friends2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/friends2.jpg -------------------------------------------------------------------------------- /assets/img/findout/friends3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/friends3.jpg -------------------------------------------------------------------------------- /assets/img/findout/map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/findout/map.jpg -------------------------------------------------------------------------------- /assets/img/flags/belgium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/belgium.png -------------------------------------------------------------------------------- /assets/img/flags/brazil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/brazil.png -------------------------------------------------------------------------------- /assets/img/flags/canada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/canada.png -------------------------------------------------------------------------------- /assets/img/flags/china.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/china.png -------------------------------------------------------------------------------- /assets/img/flags/colombia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/colombia.png -------------------------------------------------------------------------------- /assets/img/flags/egypt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/egypt.png -------------------------------------------------------------------------------- /assets/img/flags/england.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/england.png -------------------------------------------------------------------------------- /assets/img/flags/italy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/italy.png -------------------------------------------------------------------------------- /assets/img/flags/mexico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/mexico.png -------------------------------------------------------------------------------- /assets/img/flags/south-africa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/south-africa.png -------------------------------------------------------------------------------- /assets/img/flags/south-korea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/south-korea.png -------------------------------------------------------------------------------- /assets/img/flags/sweden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/sweden.png -------------------------------------------------------------------------------- /assets/img/flags/united-kingdom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/united-kingdom.png -------------------------------------------------------------------------------- /assets/img/flags/united-states-of-america.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/flags/united-states-of-america.png -------------------------------------------------------------------------------- /assets/img/gaming/animal_crossing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/animal_crossing.jpg -------------------------------------------------------------------------------- /assets/img/gaming/boy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/boy.png -------------------------------------------------------------------------------- /assets/img/gaming/codwarzone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/codwarzone.jpg -------------------------------------------------------------------------------- /assets/img/gaming/crash_bandicoot_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/crash_bandicoot_4.jpg -------------------------------------------------------------------------------- /assets/img/gaming/cyberpunk2077.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/cyberpunk2077.jpg -------------------------------------------------------------------------------- /assets/img/gaming/doom_eternal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/doom_eternal.jpg -------------------------------------------------------------------------------- /assets/img/gaming/fall_guys.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/fall_guys.jpg -------------------------------------------------------------------------------- /assets/img/gaming/lol.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/lol.jpg -------------------------------------------------------------------------------- /assets/img/gaming/ori.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/ori.jpg -------------------------------------------------------------------------------- /assets/img/gaming/orix_cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/orix_cube.png -------------------------------------------------------------------------------- /assets/img/gaming/spiderman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/spiderman.jpg -------------------------------------------------------------------------------- /assets/img/gaming/valorant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/gaming/valorant.jpg -------------------------------------------------------------------------------- /assets/img/instagram/discord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/discord.png -------------------------------------------------------------------------------- /assets/img/instagram/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/facebook.png -------------------------------------------------------------------------------- /assets/img/instagram/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/github.png -------------------------------------------------------------------------------- /assets/img/instagram/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/instagram.png -------------------------------------------------------------------------------- /assets/img/instagram/snapchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/snapchat.png -------------------------------------------------------------------------------- /assets/img/instagram/twitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/twitch.png -------------------------------------------------------------------------------- /assets/img/instagram/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/twitter.png -------------------------------------------------------------------------------- /assets/img/instagram/unsplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/unsplash.png -------------------------------------------------------------------------------- /assets/img/instagram/uplabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/uplabs.png -------------------------------------------------------------------------------- /assets/img/instagram/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/instagram/youtube.png -------------------------------------------------------------------------------- /assets/img/movie/actor1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/actor1.jpg -------------------------------------------------------------------------------- /assets/img/movie/actor2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/actor2.jpg -------------------------------------------------------------------------------- /assets/img/movie/actor3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/actor3.jpg -------------------------------------------------------------------------------- /assets/img/movie/actor4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/actor4.jpg -------------------------------------------------------------------------------- /assets/img/movie/actor5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/actor5.jpg -------------------------------------------------------------------------------- /assets/img/movie/apokolips_war.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/apokolips_war.jpg -------------------------------------------------------------------------------- /assets/img/movie/bad_boys2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/bad_boys2.jpg -------------------------------------------------------------------------------- /assets/img/movie/bird_prey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/bird_prey.jpg -------------------------------------------------------------------------------- /assets/img/movie/jojo_rabbit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/jojo_rabbit.jpg -------------------------------------------------------------------------------- /assets/img/movie/kissing_both.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/kissing_both.jpg -------------------------------------------------------------------------------- /assets/img/movie/mision_rescate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/mision_rescate.jpg -------------------------------------------------------------------------------- /assets/img/movie/mortal_kombat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/mortal_kombat.jpg -------------------------------------------------------------------------------- /assets/img/movie/onward.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/onward.jpg -------------------------------------------------------------------------------- /assets/img/movie/qr_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/qr_code.png -------------------------------------------------------------------------------- /assets/img/movie/rambo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/rambo.jpg -------------------------------------------------------------------------------- /assets/img/movie/red_son.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/red_son.jpg -------------------------------------------------------------------------------- /assets/img/movie/sonic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/sonic.jpg -------------------------------------------------------------------------------- /assets/img/movie/star_wars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/movie/star_wars.jpg -------------------------------------------------------------------------------- /assets/img/music/bipolar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/bipolar.jpg -------------------------------------------------------------------------------- /assets/img/music/cortamanbo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/cortamanbo.jpg -------------------------------------------------------------------------------- /assets/img/music/espejo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/espejo.jpg -------------------------------------------------------------------------------- /assets/img/music/jueves.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/jueves.jpg -------------------------------------------------------------------------------- /assets/img/music/porfiado.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/porfiado.jpg -------------------------------------------------------------------------------- /assets/img/music/raro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/raro.jpg -------------------------------------------------------------------------------- /assets/img/music/vinyl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/vinyl.png -------------------------------------------------------------------------------- /assets/img/music/zombie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/music/zombie.jpg -------------------------------------------------------------------------------- /assets/img/projects/boats.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/boats.gif -------------------------------------------------------------------------------- /assets/img/projects/book_app.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/book_app.gif -------------------------------------------------------------------------------- /assets/img/projects/broco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/broco.png -------------------------------------------------------------------------------- /assets/img/projects/findout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/findout.png -------------------------------------------------------------------------------- /assets/img/projects/heroes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/heroes.gif -------------------------------------------------------------------------------- /assets/img/projects/ig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/ig.png -------------------------------------------------------------------------------- /assets/img/projects/medical_appointment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/medical_appointment.png -------------------------------------------------------------------------------- /assets/img/projects/movie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/movie.gif -------------------------------------------------------------------------------- /assets/img/projects/music.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/music.gif -------------------------------------------------------------------------------- /assets/img/projects/music_two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/music_two.png -------------------------------------------------------------------------------- /assets/img/projects/orix_gaming.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/orix_gaming.jpg -------------------------------------------------------------------------------- /assets/img/projects/photographers_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/photographers_app.png -------------------------------------------------------------------------------- /assets/img/projects/streaming_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/streaming_app.png -------------------------------------------------------------------------------- /assets/img/projects/template_gallery.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/template_gallery.gif -------------------------------------------------------------------------------- /assets/img/projects/travel.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/travel.gif -------------------------------------------------------------------------------- /assets/img/projects/vpn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/projects/vpn.jpg -------------------------------------------------------------------------------- /assets/img/streaming/Descubrir@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/Descubrir@3x.png -------------------------------------------------------------------------------- /assets/img/streaming/Explorar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/Explorar@3x.png -------------------------------------------------------------------------------- /assets/img/streaming/Profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/Profile@3x.png -------------------------------------------------------------------------------- /assets/img/streaming/blue-particles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/blue-particles.png -------------------------------------------------------------------------------- /assets/img/streaming/clash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/clash.png -------------------------------------------------------------------------------- /assets/img/streaming/controls-ilustration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/controls-ilustration.png -------------------------------------------------------------------------------- /assets/img/streaming/free.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/free.png -------------------------------------------------------------------------------- /assets/img/streaming/lol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/lol.png -------------------------------------------------------------------------------- /assets/img/streaming/purple-particles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/purple-particles.png -------------------------------------------------------------------------------- /assets/img/streaming/red-particles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/streaming/red-particles.png -------------------------------------------------------------------------------- /assets/img/superheroes/antman-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/antman-a.png -------------------------------------------------------------------------------- /assets/img/superheroes/blackwidow-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/blackwidow-a.png -------------------------------------------------------------------------------- /assets/img/superheroes/captain-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/captain-b.png -------------------------------------------------------------------------------- /assets/img/superheroes/hawkeye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/hawkeye.png -------------------------------------------------------------------------------- /assets/img/superheroes/hulk-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/hulk-b.png -------------------------------------------------------------------------------- /assets/img/superheroes/ironman-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/ironman-a.png -------------------------------------------------------------------------------- /assets/img/superheroes/marvel_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/marvel_logo.jpg -------------------------------------------------------------------------------- /assets/img/superheroes/spiderman-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/spiderman-a.png -------------------------------------------------------------------------------- /assets/img/superheroes/thor-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/assets/img/superheroes/thor-c.png -------------------------------------------------------------------------------- /assets/svg/medical/mc-cardiogram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/svg/medical/mc-cholesterol.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/svg/medical/mc-glucose.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/svg/medical/mi-no-coffee.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/svg/streaming/music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/svg/streaming/tenis-ball.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /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 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /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/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.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/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brocodev/flutter_projects/d739d01ef8bd86222e705b288b49eb989b6cecc9/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/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 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleDisplayName 10 | Brocodev Projects 11 | CFBundleExecutable 12 | $(EXECUTABLE_NAME) 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | flutter_projects 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | $(FLUTTER_BUILD_NAME) 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | $(FLUTTER_BUILD_NUMBER) 27 | LSRequiresIPhoneOS 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UIViewControllerBasedStatusBarAppearance 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/core/app/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/core/routes/routes.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class BrocodevProjectsApp extends StatelessWidget { 6 | const BrocodevProjectsApp({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | debugShowCheckedModeBanner: false, 12 | title: 'Brocodev Projects', 13 | theme: ThemeData( 14 | scaffoldBackgroundColor: Colors.grey[50], 15 | textTheme: GoogleFonts.poppinsTextTheme(), 16 | visualDensity: VisualDensity.adaptivePlatformDensity, 17 | colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.blue) 18 | .copyWith(background: Colors.grey[50]), 19 | ), 20 | initialRoute: '/', 21 | routes: ProjectRoutes.routes, 22 | ); 23 | } 24 | } -------------------------------------------------------------------------------- /lib/core/routes/routes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_projects/core/models/project_model.dart'; 3 | import 'package:flutter_projects/core/ui/screens/broco_projects_screen.dart'; 4 | import 'package:flutter_projects/projects/boats_app/boats_app.dart'; 5 | import 'package:flutter_projects/projects/bookstore_app/book_app.dart'; 6 | import 'package:flutter_projects/projects/find_out/find_out_app.dart'; 7 | import 'package:flutter_projects/projects/instagram_redesign/instagram_app.dart'; 8 | import 'package:flutter_projects/projects/medical_appointment/medical_app.dart'; 9 | import 'package:flutter_projects/projects/movie_selection/movie_selection_app.dart'; 10 | import 'package:flutter_projects/projects/music_album_collection/music_album_collection.dart'; 11 | import 'package:flutter_projects/projects/music_vinyl_player/music_vinyl_player.dart'; 12 | import 'package:flutter_projects/projects/orix_gaming/orix_gaming_app.dart'; 13 | import 'package:flutter_projects/projects/photographers_app/photographers_app.dart'; 14 | import 'package:flutter_projects/projects/superheroes/superheroes_app.dart'; 15 | import 'package:flutter_projects/projects/template_gallery/template_gallery_app.dart'; 16 | import 'package:flutter_projects/projects/travel_app/travel_app.dart'; 17 | 18 | class ProjectRoutes { 19 | static Map routes = { 20 | '/': (context) => const BrocoProjectsScreen(), 21 | ProjectModel.findOut.route: (_) => const FindOutApp(), 22 | ProjectModel.movieSelection.route: (_) => const MovieSelectionApp(), 23 | ProjectModel.musicApp.route: (_) => const MusicAlbumList(), 24 | ProjectModel.musicAppTwo.route: (_) => const MusicVinylPlayer(), 25 | ProjectModel.medicalAppointment.route: (_) => const MedicalApp(), 26 | ProjectModel.photographersApp.route: (_) => const PhotographersApp(), 27 | ProjectModel.instagram.route: (_) => const InstagramApp(), 28 | ProjectModel.superheroes.route: (_) => const SuperheroesApp(), 29 | ProjectModel.orixGaming.route: (_) => const OrixGamingApp(), 30 | ProjectModel.bookApp.route: (_) => const BookStoreApp(), 31 | ProjectModel.boatsApp.route: (_) => const BoatsApp(), 32 | ProjectModel.templateGallery.route: (_) => const TemplateGalleryApp(), 33 | ProjectModel.travelApp.route: (_) => const TravelApp(), 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /lib/core/ui/screens/broco_projects_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/core/models/project_model.dart'; 3 | import 'package:flutter_projects/core/ui/widgets/project_card.dart'; 4 | import 'package:google_fonts/google_fonts.dart'; 5 | 6 | class BrocoProjectsScreen extends StatelessWidget { 7 | const BrocoProjectsScreen({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Scaffold( 12 | backgroundColor: Colors.white, 13 | appBar: AppBar( 14 | backgroundColor: Colors.white, 15 | elevation: 0, 16 | leading: const Padding( 17 | padding: EdgeInsets.only(left: 20), 18 | child: Center( 19 | child: CircleAvatar( 20 | backgroundImage: AssetImage('assets/img/projects/broco.png'), 21 | ), 22 | ), 23 | ), 24 | title: Text( 25 | 'Brocodev Projects', 26 | style: GoogleFonts.poppins( 27 | color: const Color(0xff001800), 28 | fontWeight: FontWeight.w600, 29 | ), 30 | ), 31 | actions: const [ 32 | Padding( 33 | padding: EdgeInsets.only(right: 20), 34 | child: FlutterLogo(size: 25), 35 | ) 36 | ], 37 | ), 38 | body: ListView.builder( 39 | physics: const BouncingScrollPhysics(), 40 | padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), 41 | itemCount: ProjectModel.listProjects.reversed.length, 42 | reverse: true, 43 | primary: true, 44 | itemBuilder: (context, index) { 45 | final project = ProjectModel.listProjects[index]; 46 | return ProjectCard( 47 | project: project, 48 | index: ProjectModel.listProjects.length - index, 49 | ); 50 | }, 51 | ), 52 | ); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import 'package:flutter_projects/core/app/app.dart'; 4 | 5 | void main() { 6 | SystemChrome.setSystemUIOverlayStyle( 7 | const SystemUiOverlayStyle( 8 | statusBarColor: Colors.transparent, 9 | ), 10 | ); 11 | runApp(const BrocodevProjectsApp()); 12 | } 13 | -------------------------------------------------------------------------------- /lib/projects/boats_app/boats_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/boats_app/ui/screens/boat_list_screen.dart'; 3 | 4 | class BoatsApp extends StatelessWidget { 5 | const BoatsApp({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return MaterialApp( 10 | theme: ThemeData( 11 | scaffoldBackgroundColor: Colors.white, 12 | textTheme: TextTheme( 13 | headline4: TextStyle( 14 | fontSize: 32, 15 | color: Colors.grey[800], 16 | ), 17 | bodyText2: const TextStyle(fontSize: 16), 18 | ), 19 | ), 20 | home: const BoatListPage(), 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/projects/boats_app/models/boat.dart: -------------------------------------------------------------------------------- 1 | class Boat { 2 | const Boat({ 3 | required this.model, 4 | required this.owner, 5 | required this.description, 6 | required this.specs, 7 | required this.gallery, 8 | required this.imagePath, 9 | }); 10 | 11 | final String model; 12 | final String owner; 13 | final String description; 14 | final Map specs; 15 | final List gallery; 16 | final String imagePath; 17 | 18 | static const _description = 19 | 'Cum agripeta cantare, omnes humani generises transferre fatalis, gratis gloses.'; 20 | static const _gallery = [ 21 | 'assets/img/boats/gallery1.jpg', 22 | 'assets/img/boats/gallery2.jpg', 23 | 'assets/img/boats/gallery3.jpg', 24 | 'assets/img/boats/gallery4.jpg', 25 | 'assets/img/boats/gallery5.jpg', 26 | ]; 27 | static const _specs = { 28 | 'Boat Length': "24'2", 29 | 'Beam': '102\'', 30 | 'Weight': '2765 KG', 31 | 'Fuel Capacity': '322 L' 32 | }; 33 | static const listBoats = [ 34 | Boat( 35 | model: 'XCLR8 Speed', 36 | owner: 'Tennison', 37 | imagePath: 'assets/img/boats/boat1.png', 38 | description: _description, 39 | gallery: _gallery, 40 | specs: _specs), 41 | Boat( 42 | model: 'X-FORCE', 43 | owner: 'W - Wilson', 44 | imagePath: 'assets/img/boats/boat2.png', 45 | description: _description, 46 | gallery: _gallery, 47 | specs: _specs), 48 | Boat( 49 | model: 'X12 Force', 50 | owner: 'Mastercraft', 51 | imagePath: 'assets/img/boats/boat3.png', 52 | description: _description, 53 | gallery: _gallery, 54 | specs: _specs), 55 | Boat( 56 | model: 'X21 Strength', 57 | owner: 'NeoCraft', 58 | imagePath: 'assets/img/boats/boat4.png', 59 | description: _description, 60 | gallery: _gallery, 61 | specs: _specs), 62 | ]; 63 | } 64 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/bloc/categories_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | class CategoriesBloc { 4 | CategoriesBloc() { 5 | _eventsStreamCtrl.stream.listen(mapEventToState); 6 | } 7 | 8 | final List _listCategories = [ 9 | 'Food', 10 | 'Fiction', 11 | 'Drama', 12 | 'Art', 13 | 'Programming', 14 | 'Astrology', 15 | 'Biology', 16 | ]; 17 | 18 | final StreamController> _categoriesStreamCtrl = 19 | StreamController>.broadcast(); 20 | 21 | final StreamController _eventsStreamCtrl = 22 | StreamController.broadcast(); 23 | 24 | Stream> get categoriesStream => _categoriesStreamCtrl.stream; 25 | 26 | Sink get eventsSink => _eventsStreamCtrl.sink; 27 | 28 | Future mapEventToState(CategoriesEvent? event) async { 29 | if (event is AddCategoryEvent) { 30 | _listCategories.add(event.category); 31 | } 32 | if (event is RemoveCategoryEvent) { 33 | _listCategories.remove(event.category); 34 | } 35 | _categoriesStreamCtrl.add(_listCategories); 36 | } 37 | 38 | void dispose() { 39 | _categoriesStreamCtrl.close(); 40 | _eventsStreamCtrl.close(); 41 | } 42 | } 43 | 44 | abstract class CategoriesEvent { 45 | const CategoriesEvent(this.category); 46 | 47 | final String category; 48 | } 49 | 50 | class AddCategoryEvent extends CategoriesEvent { 51 | AddCategoryEvent(super.category); 52 | } 53 | 54 | class RemoveCategoryEvent extends CategoriesEvent { 55 | RemoveCategoryEvent(super.category); 56 | } 57 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/bloc/categories_bloc_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_projects/projects/bookstore_app/bloc/categories_bloc.dart'; 3 | 4 | class CategoriesBlocProvider extends InheritedWidget { 5 | const CategoriesBlocProvider({ 6 | super.key, 7 | required this.categoriesBloc, 8 | required super.child, 9 | }); 10 | 11 | final CategoriesBloc categoriesBloc; 12 | 13 | static CategoriesBlocProvider? of(BuildContext context) { 14 | return context.dependOnInheritedWidgetOfExactType(); 15 | } 16 | 17 | @override 18 | bool updateShouldNotify(CategoriesBlocProvider oldWidget) => true; 19 | } 20 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/book_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/bookstore_app/bloc/categories_bloc.dart'; 3 | import 'package:flutter_projects/projects/bookstore_app/bloc/categories_bloc_provider.dart'; 4 | import 'package:flutter_projects/projects/bookstore_app/theme/theme.dart'; 5 | import 'package:flutter_projects/projects/bookstore_app/ui/screens/navigation/book_navigation_screen.dart'; 6 | 7 | class BookStoreApp extends StatelessWidget { 8 | const BookStoreApp({super.key}); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return CategoriesBlocProvider( 13 | categoriesBloc: CategoriesBloc(), 14 | child: MaterialApp( 15 | theme: BookAppTheme.themeData, 16 | home: const BookNavigationScreen(), 17 | ), 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/theme/theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class BookAppTheme { 5 | static final _appBarTheme = AppBarTheme( 6 | color: Colors.white, 7 | elevation: 0, 8 | toolbarTextStyle: GoogleFonts.workSans( 9 | color: Colors.grey[800], 10 | fontSize: 26, 11 | fontWeight: FontWeight.w600, 12 | ), 13 | ); 14 | 15 | static final _textTheme = GoogleFonts.workSansTextTheme().copyWith( 16 | headline6: GoogleFonts.workSans( 17 | color: Colors.white, 18 | fontSize: 18, 19 | ), 20 | headline5: GoogleFonts.workSans( 21 | color: Colors.white, 22 | fontWeight: FontWeight.w500, 23 | fontSize: 22, 24 | ), 25 | headline4: GoogleFonts.workSans( 26 | color: Colors.white, 27 | fontWeight: FontWeight.w500, 28 | ), 29 | subtitle1: GoogleFonts.workSans( 30 | fontSize: 16, 31 | color: Colors.grey[800], 32 | fontWeight: FontWeight.w500, 33 | ), 34 | subtitle2: GoogleFonts.workSans( 35 | fontSize: 15, 36 | color: Colors.grey[400], 37 | fontWeight: FontWeight.w400, 38 | ), 39 | ); 40 | 41 | static final themeData = ThemeData( 42 | scaffoldBackgroundColor: Colors.white, 43 | backgroundColor: Colors.white, 44 | primaryColor: Colors.white, 45 | textTheme: _textTheme, 46 | appBarTheme: _appBarTheme,); 47 | } 48 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/ui/widgets/book_rate_stars.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BookRateStars extends StatelessWidget { 4 | const BookRateStars({ 5 | super.key, 6 | required this.rate, 7 | required this.heroTag, 8 | this.starsColor = Colors.yellow, 9 | this.voidStarsColor = const Color(0xFFFFDAAE), 10 | this.iconSize = 18, 11 | this.fontSize = 14, 12 | }) : assert( 13 | rate >= 0.0 && rate <= 5.0, 14 | 'The rate value must be between 0 to 5', 15 | ); 16 | 17 | final double rate; 18 | final Color starsColor; 19 | final Color voidStarsColor; 20 | final double iconSize; 21 | final double fontSize; 22 | final String? heroTag; 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | final showHalfStar = rate - rate.floor() >= .4; 27 | final listStars = List.generate( 28 | rate.floor(), 29 | (index) => Hero( 30 | tag: 'star$index$heroTag', 31 | child: Icon( 32 | Icons.star_rounded, 33 | color: starsColor, 34 | size: 18, 35 | ), 36 | ), 37 | ); 38 | 39 | if (showHalfStar) { 40 | listStars.add( 41 | Hero( 42 | tag: 'star${rate.floor()}$heroTag', 43 | child: Icon( 44 | Icons.star_half_rounded, 45 | color: starsColor, 46 | size: 18, 47 | ), 48 | ), 49 | ); 50 | } 51 | 52 | listStars.addAll( 53 | List.generate(5 - rate.floor() - (showHalfStar ? 1 : 0), (index) { 54 | return Hero( 55 | tag: 'star${rate.ceil() + index}$heroTag', 56 | child: Icon( 57 | Icons.star_rounded, 58 | color: voidStarsColor, 59 | size: 18, 60 | ), 61 | ); 62 | }), 63 | ); 64 | 65 | return Row( 66 | children: listStars 67 | ..add( 68 | Hero( 69 | tag: 'rate$heroTag', 70 | child: Material( 71 | color: Colors.transparent, 72 | child: Text( 73 | ' $rate', 74 | style: TextStyle( 75 | fontSize: fontSize, 76 | fontWeight: FontWeight.bold, 77 | color: starsColor, 78 | ), 79 | ), 80 | ), 81 | ), 82 | ), 83 | ); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/ui/widgets/book_readers_row.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_projects/projects/bookstore_app/models/book.dart'; 5 | 6 | class ReadersRow extends StatelessWidget { 7 | const ReadersRow({ 8 | super.key, 9 | required this.readers, 10 | this.avatarSize = 30, 11 | }); 12 | 13 | final List? readers; 14 | final double avatarSize; 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | final hasUserExcess = readers!.length > 4; 19 | 20 | return Row( 21 | children: List.generate(hasUserExcess ? 4 : readers!.length, (index) { 22 | final user = readers![index]; 23 | return Align( 24 | alignment: Alignment.centerLeft, 25 | widthFactor: .7, 26 | child: Container( 27 | height: avatarSize, 28 | width: avatarSize, 29 | decoration: BoxDecoration( 30 | shape: BoxShape.circle, 31 | border: Border.all(color: Colors.white, width: 1.5), 32 | image: DecorationImage( 33 | image: NetworkImage(user.photoUrl!), 34 | fit: BoxFit.cover, 35 | ), 36 | ), 37 | child: index == 3 38 | ? Container( 39 | height: avatarSize, 40 | width: avatarSize, 41 | clipBehavior: Clip.antiAlias, 42 | alignment: Alignment.center, 43 | decoration: BoxDecoration( 44 | color: Colors.black26, 45 | borderRadius: BorderRadius.circular(avatarSize), 46 | ), 47 | child: BackdropFilter( 48 | filter: ImageFilter.blur(sigmaY: 3, sigmaX: 3), 49 | child: Text( 50 | '${readers!.length - 3}+', 51 | textAlign: TextAlign.center, 52 | style: const TextStyle( 53 | color: Colors.white, 54 | fontSize: 12, 55 | fontWeight: FontWeight.bold, 56 | ), 57 | ), 58 | ), 59 | ) 60 | : null, 61 | ), 62 | ); 63 | }), 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/ui/widgets/cover_page_book.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CoverPageBook extends StatelessWidget { 4 | const CoverPageBook({ 5 | super.key, 6 | required this.srcImageBook, 7 | }); 8 | 9 | final String? srcImageBook; 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return DecoratedBox( 14 | decoration: BoxDecoration( 15 | border: Border.all(color: Colors.white, width: 3), 16 | boxShadow: const [ 17 | BoxShadow( 18 | color: Colors.black12, 19 | blurRadius: 10, 20 | offset: Offset(5, 5), 21 | ) 22 | ], 23 | image: 24 | DecorationImage(image: AssetImage(srcImageBook!), fit: BoxFit.cover), 25 | ), 26 | ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/projects/bookstore_app/ui/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'book_rate_stars.dart'; 2 | export 'book_readers_row.dart'; 3 | export 'cover_page_book.dart'; 4 | -------------------------------------------------------------------------------- /lib/projects/find_out/find_out_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/find_out/ui/screens/welcome_screen/welcome_screen.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class FindOutApp extends StatelessWidget { 6 | const FindOutApp({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | theme: ThemeData.dark().copyWith( 12 | primaryColor: const Color(0xFFFF256C), 13 | textTheme: GoogleFonts.poppinsTextTheme().apply( 14 | bodyColor: Colors.white, 15 | ), 16 | visualDensity: VisualDensity.adaptivePlatformDensity, 17 | ), 18 | home: WelcomeScreen(), 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/projects/find_out/ui/screens/home/widgets/drop_down_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class DropDownWidget extends StatelessWidget { 5 | const DropDownWidget({ 6 | super.key, 7 | required this.labels, 8 | }); 9 | final List labels; 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return DropdownButton( 14 | elevation: 0, 15 | onChanged: (value) {}, 16 | icon: const Icon(Icons.keyboard_arrow_down, color: Colors.white), 17 | style: GoogleFonts.poppins( 18 | color: Colors.white, 19 | fontSize: 18, 20 | fontWeight: FontWeight.w500, 21 | ), 22 | iconSize: 28, 23 | dropdownColor: Colors.black26, 24 | underline: const SizedBox(), 25 | value: labels.first, 26 | items: List.generate(labels.length, (index) { 27 | return DropdownMenuItem( 28 | value: labels[index], 29 | child: Text(labels[index]), 30 | ); 31 | }), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/projects/find_out/ui/screens/social_screen/widgets/background_shader_image.dart: -------------------------------------------------------------------------------- 1 | import 'package:cached_network_image/cached_network_image.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class BackgroundShaderImage extends StatelessWidget { 6 | const BackgroundShaderImage({ 7 | super.key, 8 | required this.imageUrl, 9 | }); 10 | 11 | final String imageUrl; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Stack( 16 | children: [ 17 | CachedNetworkImage( 18 | imageUrl: imageUrl, 19 | height: double.infinity, 20 | width: double.infinity, 21 | fit: BoxFit.cover, 22 | placeholder: (context, url) => const Center( 23 | child: CupertinoActivityIndicator(radius: 40), 24 | ), 25 | ), 26 | Positioned.fill( 27 | child: DecoratedBox( 28 | decoration: BoxDecoration( 29 | gradient: LinearGradient( 30 | colors: [ 31 | Colors.black12, 32 | Colors.black.withOpacity(.6), 33 | ], 34 | begin: Alignment.topCenter, 35 | end: Alignment.bottomCenter, 36 | stops: const [0.3, .7], 37 | ), 38 | ), 39 | ), 40 | ) 41 | ], 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/projects/find_out/ui/screens/social_screen/widgets/custom_bottom_navigation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CustomBottomNavigation extends StatelessWidget { 4 | const CustomBottomNavigation({super.key}); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | final color = Colors.grey[400]; 9 | return CustomPaint( 10 | painter: BottomBarPainter(), 11 | child: SizedBox( 12 | height: kToolbarHeight, 13 | child: Row( 14 | children: [ 15 | Expanded( 16 | child: Icon( 17 | Icons.search, 18 | color: color, 19 | ), 20 | ), 21 | Expanded( 22 | child: Icon( 23 | Icons.notifications_none, 24 | color: color, 25 | ), 26 | ), 27 | const Spacer(), 28 | Expanded( 29 | child: Icon( 30 | Icons.favorite_border, 31 | color: color, 32 | ), 33 | ), 34 | Expanded( 35 | child: Icon( 36 | Icons.person_outline, 37 | color: color, 38 | ), 39 | ), 40 | ], 41 | ), 42 | ), 43 | ); 44 | } 45 | } 46 | 47 | class BottomBarPainter extends CustomPainter { 48 | @override 49 | void paint(Canvas canvas, Size size) { 50 | final w = size.width; 51 | final h = size.height; 52 | // cambiar a lineas comentadas, para un recorte del dock fijo 53 | // final w2 = size.width * .5; 54 | final path = Path() 55 | ..lineTo(w * .32, 0) 56 | ..cubicTo(w * .42, 0, w * .4, h * .6, w * .5, h * .65) 57 | ..cubicTo(w * .6, h * .6, w * .58, 0, w * .68, 0) 58 | // ..lineTo(w2 - 55, 0) 59 | // ..cubicTo(w2 - 30, 0, w2 - 38, 35, w2, 37) 60 | // ..cubicTo(w2 + 38, 35, w2 + 30, 0, w2 + 55, 0) 61 | ..lineTo(w, 0) 62 | ..lineTo(w, h) 63 | ..lineTo(0, h); 64 | 65 | canvas 66 | ..drawShadow(path, Colors.black, 40, false) 67 | ..drawShadow(path, Colors.black, 40, false) 68 | ..drawPath(path, Paint()..color = Colors.white); 69 | } 70 | 71 | @override 72 | bool shouldRepaint(CustomPainter oldDelegate) => true; 73 | } 74 | -------------------------------------------------------------------------------- /lib/projects/find_out/ui/screens/social_screen/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'background_shader_image.dart'; 2 | export 'comment_card.dart'; 3 | export 'custom_bottom_navigation.dart'; 4 | export 'place_information_card.dart'; 5 | export 'social_screen_header.dart'; 6 | -------------------------------------------------------------------------------- /lib/projects/find_out/ui/widgets/inverted_top_border_clipper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class InvertedTopBorderClipper extends CustomClipper { 4 | InvertedTopBorderClipper({required this.circularRadius}); 5 | 6 | final double circularRadius; 7 | 8 | @override 9 | Path getClip(Size size) { 10 | final path = Path(); 11 | final curveMiddlePoint = circularRadius / 3; 12 | final widthCurve = circularRadius * 1.66; 13 | path 14 | ..quadraticBezierTo( 15 | curveMiddlePoint, circularRadius, widthCurve, circularRadius,) 16 | ..lineTo(size.width - widthCurve, circularRadius) 17 | ..quadraticBezierTo( 18 | size.width - curveMiddlePoint, circularRadius, size.width, 0,) 19 | ..lineTo(size.width, size.height) 20 | ..lineTo(0, size.height); 21 | return path; 22 | } 23 | 24 | @override 25 | bool shouldReclip(CustomClipper oldClipper) => false; 26 | } 27 | -------------------------------------------------------------------------------- /lib/projects/find_out/ui/widgets/text_input_find_out.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class TextInputFindOut extends StatelessWidget { 5 | const TextInputFindOut({ 6 | super.key, 7 | required this.label, 8 | required this.iconData, 9 | this.textInputType, 10 | }); 11 | final String label; 12 | final IconData iconData; 13 | final TextInputType? textInputType; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | final isPassword = textInputType == TextInputType.visiblePassword; 18 | final outlineInputBorder = OutlineInputBorder( 19 | borderRadius: BorderRadius.circular(20), 20 | borderSide: BorderSide( 21 | color: Colors.grey[100]!, 22 | width: 2, 23 | ), 24 | ); 25 | final hidePasswordNotifier = ValueNotifier(true); 26 | return ValueListenableBuilder( 27 | valueListenable: hidePasswordNotifier, 28 | builder: (context, value, child) { 29 | return TextField( 30 | keyboardType: textInputType, 31 | obscureText: isPassword, 32 | style: const TextStyle(color: Colors.black), 33 | decoration: InputDecoration( 34 | filled: true, 35 | fillColor: Colors.white, 36 | suffixIcon: isPassword 37 | ? IconButton( 38 | onPressed: () => hidePasswordNotifier.value = 39 | !hidePasswordNotifier.value, 40 | icon: Icon( 41 | value ? Icons.visibility : Icons.visibility_off, 42 | color: Colors.grey[700], 43 | ), 44 | ) 45 | : null, 46 | enabledBorder: outlineInputBorder, 47 | hintText: label, 48 | focusedBorder: outlineInputBorder.copyWith( 49 | borderSide: const BorderSide(color: Colors.pink, width: 2), 50 | ), 51 | hintStyle: const TextStyle(color: Colors.grey), 52 | prefixIcon: Icon(iconData, color: Colors.pinkAccent, size: 18), 53 | ), 54 | ); 55 | }, 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/bloc/bloc_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/bloc/instagram_bloc.dart'; 3 | export 'package:flutter_projects/projects/instagram_redesign/bloc/instagram_bloc.dart'; 4 | 5 | class InstagramBlocProvider extends InheritedWidget { 6 | const InstagramBlocProvider({ 7 | super.key, 8 | required this.instagramBloc, 9 | required super.child, 10 | }); 11 | 12 | final InstagramBloc instagramBloc; 13 | 14 | static InstagramBlocProvider? of(BuildContext context) => 15 | context.dependOnInheritedWidgetOfExactType(); 16 | 17 | @override 18 | bool updateShouldNotify(InheritedWidget oldWidget) => this != oldWidget; 19 | } 20 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/bloc/instagram_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | export 'package:flutter_projects/projects/instagram_redesign/models/ig_activity.dart'; 4 | export 'package:flutter_projects/projects/instagram_redesign/models/ig_collection.dart'; 5 | export 'package:flutter_projects/projects/instagram_redesign/models/ig_external_platform.dart'; 6 | export 'package:flutter_projects/projects/instagram_redesign/models/ig_post.dart'; 7 | export 'package:flutter_projects/projects/instagram_redesign/models/ig_user.dart'; 8 | export 'package:flutter_projects/projects/instagram_redesign/models/ig_user_stories.dart'; 9 | enum SettingsState { visible, hide } 10 | enum ViewState { ample, clean, old } 11 | 12 | class InstagramBloc with ChangeNotifier { 13 | SettingsState settingState = SettingsState.hide; 14 | ViewState viewState = ViewState.ample; 15 | ThemeMode themeMode = ThemeMode.light; 16 | 17 | 18 | 19 | void showSettings() { 20 | settingState = SettingsState.visible; 21 | notifyListeners(); 22 | } 23 | 24 | void hideSettings() { 25 | settingState = SettingsState.hide; 26 | notifyListeners(); 27 | } 28 | 29 | void changeView(ViewState state) { 30 | viewState = state; 31 | notifyListeners(); 32 | } 33 | 34 | void setThemeMode(ThemeMode mode) { 35 | themeMode = mode; 36 | notifyListeners(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/instagram_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/bloc/bloc_provider.dart'; 3 | import 'package:flutter_projects/projects/instagram_redesign/theme/themes.dart'; 4 | import 'package:flutter_projects/projects/instagram_redesign/ui/screens/navigation/instagram_navigation_screen.dart'; 5 | 6 | class InstagramApp extends StatelessWidget { 7 | const InstagramApp({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return InstagramBlocProvider( 12 | instagramBloc: InstagramBloc(), 13 | child: const _InstagramApp(), 14 | ); 15 | } 16 | } 17 | 18 | class _InstagramApp extends StatelessWidget { 19 | const _InstagramApp(); 20 | 21 | @override 22 | Widget build(BuildContext context) { 23 | final instagramBloc = InstagramBlocProvider.of(context)!.instagramBloc; 24 | return AnimatedBuilder( 25 | animation: instagramBloc, 26 | builder: (context, child) { 27 | return MaterialApp( 28 | title: 'Instagram', 29 | debugShowCheckedModeBanner: false, 30 | themeMode: instagramBloc.themeMode, 31 | darkTheme: InstagramTheme.darkTheme, 32 | theme: InstagramTheme.lightTheme, 33 | home: child, 34 | ); 35 | }, 36 | child: const InstagramNavigationScreen(), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/models/ig_external_platform.dart: -------------------------------------------------------------------------------- 1 | enum ExternalPlatform { 2 | discord._( 3 | name: 'Discord', 4 | haveDarkImage: false, 5 | imagePath: 'assets/img/instagram/discord.png', 6 | ), 7 | facebook._( 8 | name: 'Facebook', 9 | haveDarkImage: true, 10 | imagePath: 'assets/img/instagram/facebook.png', 11 | ), 12 | gitHub._( 13 | name: 'GitHub', 14 | haveDarkImage: true, 15 | imagePath: 'assets/img/instagram/github.png', 16 | ), 17 | twitch._( 18 | name: 'twitch', 19 | haveDarkImage: true, 20 | imagePath: 'assets/img/instagram/twitch.png', 21 | ), 22 | unsplash._( 23 | name: 'Unsplash', 24 | haveDarkImage: true, 25 | imagePath: 'assets/img/instagram/unsplash.png', 26 | ), 27 | instagram._( 28 | name: 'Unsplash', 29 | haveDarkImage: false, 30 | imagePath: 'assets/img/instagram/instagram.png', 31 | ), 32 | snapchat._( 33 | name: 'Snapchat', 34 | haveDarkImage: false, 35 | imagePath: 'assets/img/instagram/snapchat.png', 36 | ), 37 | twitter._( 38 | name: 'Twitter', 39 | haveDarkImage: true, 40 | imagePath: 'assets/img/instagram/twitter.png', 41 | ), 42 | uplabs._( 43 | name: 'Uplabs', 44 | haveDarkImage: false, 45 | imagePath: 'assets/img/instagram/uplabs.png', 46 | ), 47 | youtube._( 48 | name: 'YouTube', 49 | haveDarkImage: false, 50 | imagePath: 'assets/img/instagram/youtube.png', 51 | ); 52 | 53 | const ExternalPlatform._({ 54 | this.name, 55 | this.imagePath, 56 | this.haveDarkImage, 57 | }); 58 | 59 | final String? name; 60 | final String? imagePath; 61 | final bool? haveDarkImage; 62 | } 63 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/models/ig_post.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/instagram_redesign/models/ig_user.dart'; 2 | 3 | class IgPost { 4 | IgPost({ 5 | this.id, 6 | this.userPost, 7 | this.comments, 8 | this.likes, 9 | this.description = 10 | 'Lorem Ipsum is simply dummy text of the printing and typesetting' 11 | ' industry. Lorem Ipsum has been the industry standard dummy' 12 | ' text ever since the 1500s, when an unknown printer took a ' 13 | 'galley of type and scrambled it to make a type specimen book.', 14 | this.photos, 15 | this.isLiked, 16 | }); 17 | 18 | final int? id; 19 | final IgUser? userPost; 20 | final List? comments; 21 | final String description; 22 | final int? likes; 23 | bool? isLiked; 24 | final List? photos; 25 | 26 | static final List listPosts = 27 | List.generate(IgUser.users.length, (index) { 28 | final user = IgUser.users[index]; 29 | return IgPost( 30 | id: index, 31 | userPost: user, 32 | comments: List.generate(user.following!, (i) { 33 | return Comment( 34 | comment: [ 35 | 'Superb!!', 36 | 'Nice photography 📷', 37 | 'Awesome!! 😎 ', 38 | 'Magnificent photo 😍', 39 | 'Wow!! Look soo amazing!! 🤩🤩🤩', 40 | 'I love your photos ❤', 41 | 'Your are incredible!! 😺👌', 42 | 'Magnificent photo 😍', 43 | ][i % 8], 44 | user: IgUser.users[i % IgUser.users.length], 45 | ); 46 | }), 47 | likes: user.followers, 48 | isLiked: false, 49 | photos: List.generate(index.isEven ? 3 : 4, (i) { 50 | return user.listPhotosUrl![3 + i]; 51 | }), 52 | ); 53 | }); 54 | } 55 | 56 | class Comment { 57 | const Comment({this.comment, this.user}); 58 | 59 | final String? comment; 60 | final IgUser? user; 61 | } 62 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/models/ig_user_stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/instagram_redesign/models/ig_user.dart'; 2 | 3 | class IgUserStories { 4 | 5 | const IgUserStories({ 6 | required this.indexStory, 7 | required this.instagramUser, 8 | required this.listStories, 9 | }); 10 | 11 | final int indexStory; 12 | final IgUser instagramUser; 13 | final List listStories; 14 | 15 | 16 | static final List listUserStories = List.generate( 17 | IgUser.users.length, 18 | (index) { 19 | final user = IgUser.users[index]; 20 | return IgUserStories( 21 | indexStory: index, 22 | instagramUser: user, 23 | listStories: List.generate(3, (i) { 24 | return StoryModel( 25 | imageUrl: user.listPhotosUrl![i], 26 | isViewed: false, 27 | duration: const Duration(seconds: 3), 28 | ); 29 | }),); 30 | }, 31 | ); 32 | } 33 | 34 | class StoryModel { 35 | StoryModel({this.imageUrl, this.isViewed, this.duration}); 36 | 37 | final String? imageUrl; 38 | final Duration? duration; 39 | bool? isViewed; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/theme/themes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class InstagramTheme { 5 | static final kAppBarThemeLight = AppBarTheme( 6 | iconTheme: IconThemeData(color: Colors.grey.shade400), 7 | color: const Color(0xFFF2F6F9), 8 | elevation: 0, 9 | centerTitle: true, 10 | titleTextStyle: GoogleFonts.satisfy( 11 | color: Colors.black, 12 | fontSize: 30, 13 | fontWeight: FontWeight.bold, 14 | ), 15 | ); 16 | 17 | static final kAppBarThemeDark = kAppBarThemeLight.copyWith( 18 | iconTheme: const IconThemeData(color: Colors.white), 19 | color: Colors.black, 20 | titleTextStyle: GoogleFonts.satisfy( 21 | color: Colors.white, 22 | fontSize: 30, 23 | fontWeight: FontWeight.bold, 24 | ), 25 | ); 26 | 27 | static final darkTheme = ThemeData.dark().copyWith( 28 | scaffoldBackgroundColor: Colors.black, 29 | backgroundColor: Colors.black, 30 | colorScheme: const ColorScheme.dark(), 31 | textTheme: GoogleFonts.latoTextTheme(), 32 | appBarTheme: InstagramTheme.kAppBarThemeDark, 33 | ); 34 | 35 | static final lightTheme = ThemeData( 36 | scaffoldBackgroundColor: const Color(0xFFF2F6F9), 37 | backgroundColor: Colors.grey[100], 38 | colorScheme: const ColorScheme.light(), 39 | textTheme: GoogleFonts.latoTextTheme(), 40 | appBarTheme: InstagramTheme.kAppBarThemeLight, 41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/activity/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'activity_container.dart'; 2 | export 'type_activity_toggle_button.dart'; 3 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/home/widgets/instagram_add_story.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_vector_icons/flutter_vector_icons.dart'; 3 | 4 | class InstagramAddItem extends StatelessWidget { 5 | const InstagramAddItem({ 6 | super.key, 7 | required this.itemSize, 8 | this.onTap, 9 | this.label = '', 10 | }); 11 | 12 | final double itemSize; 13 | final VoidCallback? onTap; 14 | final String label; 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Column( 19 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 20 | children: [ 21 | Container( 22 | width: itemSize, 23 | height: itemSize, 24 | decoration: BoxDecoration( 25 | color: Theme.of(context).backgroundColor, 26 | border: Border.all( 27 | color: Colors.grey[200]!, 28 | width: 3, 29 | ), 30 | borderRadius: BorderRadius.circular(itemSize * .4), 31 | ), 32 | child: const Icon(FontAwesome.plus), 33 | ), 34 | Text( 35 | label, 36 | style: const TextStyle( 37 | fontWeight: FontWeight.bold, 38 | fontSize: 15, 39 | ), 40 | ) 41 | ], 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/home/widgets/instagram_stories_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/models/ig_user_stories.dart'; 3 | import 'package:flutter_projects/projects/instagram_redesign/ui/widgets/ig_user_border_image.dart'; 4 | 5 | class InstagramStoriesItem extends StatelessWidget { 6 | const InstagramStoriesItem({ 7 | super.key, 8 | this.itemSize, 9 | required this.onTap, 10 | required this.stories, 11 | }); 12 | 13 | final double? itemSize; 14 | final VoidCallback onTap; 15 | final IgUserStories stories; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | final user = stories.instagramUser; 20 | return InkWell( 21 | onTap: onTap, 22 | splashColor: Colors.transparent, 23 | highlightColor: Colors.transparent, 24 | child: Column( 25 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 26 | children: [ 27 | IgUserBorderImage(height: itemSize, imageUrl: user.photoUrl), 28 | Text( 29 | user.name!.split(' ').first, 30 | style: const TextStyle( 31 | fontWeight: FontWeight.bold, 32 | fontSize: 15, 33 | ), 34 | ) 35 | ], 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/home/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'instagram_add_story.dart'; 2 | export 'instagram_stories_item.dart'; 3 | export 'settings_blur_card.dart'; 4 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/profile/widgets/profile_app_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/bloc/bloc_provider.dart'; 3 | import 'package:flutter_vector_icons/flutter_vector_icons.dart'; 4 | import 'package:google_fonts/google_fonts.dart'; 5 | 6 | class ProfileAppBar extends StatelessWidget implements PreferredSizeWidget { 7 | const ProfileAppBar({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | const currentUser = IgUser.kevin; 12 | final instagramBloc = InstagramBlocProvider.of(context)!.instagramBloc; 13 | 14 | return AppBar( 15 | backgroundColor: Theme.of(context).colorScheme.onPrimary, 16 | leadingWidth: 80, 17 | leading: IconButton( 18 | onPressed: instagramBloc.showSettings, 19 | icon: const Icon(Feather.settings), 20 | ), 21 | title: Row( 22 | mainAxisSize: MainAxisSize.min, 23 | children: [ 24 | Text( 25 | currentUser.username!, 26 | style: GoogleFonts.lato( 27 | fontSize: 16, 28 | color: Theme.of(context).appBarTheme.iconTheme!.color, 29 | ), 30 | ), 31 | const Icon(Icons.keyboard_arrow_down) 32 | ], 33 | ), 34 | actions: [ 35 | IconButton( 36 | onPressed: () {}, 37 | icon: const Icon(Feather.menu), 38 | ) 39 | ], 40 | ); 41 | } 42 | 43 | @override 44 | Size get preferredSize => const Size.fromHeight(kToolbarHeight); 45 | } 46 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/profile/widgets/title_subtitle_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class IgTitleSubtitleText extends StatelessWidget { 5 | const IgTitleSubtitleText({ 6 | super.key, 7 | required this.title, 8 | required this.subtitle, 9 | this.height = 1.5, 10 | this.crossAxisAlignment = CrossAxisAlignment.center, 11 | }); 12 | 13 | final String title; 14 | final String subtitle; 15 | final double height; 16 | final CrossAxisAlignment crossAxisAlignment; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Column( 21 | crossAxisAlignment: crossAxisAlignment, 22 | mainAxisSize: MainAxisSize.min, 23 | children: [ 24 | Text(title, 25 | style: GoogleFonts.lato( 26 | fontWeight: FontWeight.w900, 27 | fontSize: 17, 28 | ),), 29 | Text( 30 | subtitle, 31 | style: GoogleFonts.lato( 32 | color: Theme.of(context).colorScheme.onBackground.withOpacity(.5), 33 | height: height, 34 | fontWeight: FontWeight.bold,), 35 | ), 36 | ], 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/pages/profile/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'bottom_tab_view_profile.dart'; 2 | export 'profile_app_bar.dart'; 3 | export 'title_subtitle_text.dart'; 4 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/screens/post_detail/widgets/add_comment_text_field.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/models/ig_user.dart'; 3 | import 'package:flutter_projects/projects/instagram_redesign/ui/widgets/rounded_border_image.dart'; 4 | 5 | class AddCommentTextField extends StatelessWidget { 6 | const AddCommentTextField({ 7 | super.key, 8 | }); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return TextField( 13 | keyboardType: TextInputType.text, 14 | decoration: InputDecoration( 15 | filled: true, 16 | fillColor: Colors.grey.withOpacity(.1), 17 | border: OutlineInputBorder( 18 | borderRadius: BorderRadius.circular(40), 19 | borderSide: BorderSide.none,), 20 | prefixIcon: Padding( 21 | padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), 22 | child: RoundedBorderImage( 23 | height: 50, 24 | imageUrl: IgUser.kevin.photoUrl, 25 | borderColor: Colors.transparent, 26 | ), 27 | ), 28 | hintText: 'Add a comment', 29 | suffixIcon: Padding( 30 | padding: const EdgeInsets.only(right: 8), 31 | child: IconButton( 32 | onPressed: () {}, 33 | color: Theme.of(context).colorScheme.onBackground, 34 | icon: const Icon(Icons.send), 35 | ), 36 | ),), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/screens/post_detail/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'add_comment_text_field.dart'; 2 | export 'comment_list_tile.dart'; 3 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/screens/story/widgets/animated_line.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class AnimatedLine extends StatelessWidget { 5 | const AnimatedLine({ 6 | super.key, 7 | required this.index, 8 | required this.selectedIndex, 9 | this.animationController, 10 | }); 11 | 12 | final int index; 13 | final int selectedIndex; 14 | final AnimationController? animationController; 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return ClipRRect( 19 | borderRadius: BorderRadius.circular(5), 20 | child: AnimatedBuilder( 21 | animation: animationController!, 22 | builder: (context, _) { 23 | return LinearProgressIndicator( 24 | value: index < selectedIndex 25 | ? 1.0 26 | : index == selectedIndex 27 | ? animationController!.value 28 | : 0.0, 29 | minHeight: 4, 30 | backgroundColor: Colors.white54, 31 | valueColor: const AlwaysStoppedAnimation(Colors.white), 32 | ); 33 | },), 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/screens/story/widgets/icon_blur_button.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class IconBlurButton extends StatelessWidget { 6 | const IconBlurButton({ 7 | super.key, 8 | required this.onTap, 9 | required this.iconData, 10 | this.size, 11 | }); 12 | 13 | final VoidCallback onTap; 14 | final IconData iconData; 15 | final double? size; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return Container( 20 | height: size ?? 35, 21 | width: size ?? 35, 22 | clipBehavior: Clip.antiAlias, 23 | decoration: BoxDecoration( 24 | color: Colors.black26, 25 | borderRadius: BorderRadius.circular((size ?? 35) * .4), 26 | ), 27 | child: BackdropFilter( 28 | filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), 29 | child: IconButton( 30 | padding: EdgeInsets.zero, 31 | color: Colors.white, 32 | icon: Icon(iconData), 33 | onPressed: onTap, 34 | ), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/screens/story/widgets/send_message_text_field.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SendMessageTextField extends StatelessWidget { 4 | const SendMessageTextField({ 5 | super.key, 6 | }); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return TextField( 11 | keyboardType: TextInputType.text, 12 | decoration: InputDecoration( 13 | filled: true, 14 | contentPadding: const EdgeInsets.all(20), 15 | fillColor: Colors.black38, 16 | border: OutlineInputBorder( 17 | borderRadius: BorderRadius.circular(40), 18 | borderSide: BorderSide.none, 19 | ), 20 | hintText: 'Send message', 21 | hintStyle: const TextStyle(color: Colors.white), 22 | suffixIcon: const Padding( 23 | padding: EdgeInsets.only(right: 20), 24 | child: Text( 25 | '| 😍', 26 | style: TextStyle( 27 | fontSize: 22, 28 | height: 1.8, 29 | color: Colors.white70, 30 | ), 31 | ), 32 | ), 33 | ), 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/screens/story/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'animated_line.dart'; 2 | export 'icon_blur_button.dart'; 3 | export 'send_message_text_field.dart'; 4 | export 'widgets.dart'; 5 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/ig_user_border_image.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/ui/widgets/rounded_border_image.dart'; 3 | 4 | class IgUserBorderImage extends StatelessWidget { 5 | const IgUserBorderImage({ 6 | super.key, 7 | required this.height, 8 | required this.imageUrl, 9 | }); 10 | 11 | final double? height; 12 | final String? imageUrl; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Container( 17 | width: height, 18 | height: height, 19 | padding: const EdgeInsets.all(2), 20 | decoration: BoxDecoration( 21 | gradient: const LinearGradient( 22 | colors: [ 23 | Colors.purpleAccent, 24 | Colors.orangeAccent, 25 | ], 26 | begin: Alignment.topCenter, 27 | end: Alignment.bottomCenter, 28 | ), 29 | borderRadius: BorderRadius.circular(height! * .42), 30 | ), 31 | child: RoundedBorderImage( 32 | height: height, 33 | imageUrl: imageUrl, 34 | borderWidth: 2, 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/like_button.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:google_fonts/google_fonts.dart'; 5 | 6 | class LikeButton extends StatelessWidget { 7 | const LikeButton({ 8 | super.key, 9 | required this.likes, 10 | required this.isLiked, 11 | required this.onTap, 12 | this.textColor = Colors.white, 13 | this.backgroundColor, 14 | }); 15 | 16 | final int? likes; 17 | final bool? isLiked; 18 | final Color textColor; 19 | final VoidCallback onTap; 20 | final Color? backgroundColor; 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return ClipRRect( 25 | borderRadius: BorderRadius.circular(30), 26 | child: InkWell( 27 | onTap: onTap, 28 | splashColor: Colors.transparent, 29 | highlightColor: Colors.transparent, 30 | child: BackdropFilter( 31 | filter: ImageFilter.blur(sigmaX: 4, sigmaY: 10), 32 | child: AnimatedContainer( 33 | duration: kThemeAnimationDuration, 34 | height: 45, 35 | color: isLiked! 36 | ? Colors.redAccent[400] 37 | : backgroundColor ?? Colors.white12, 38 | padding: const EdgeInsets.symmetric(horizontal: 15), 39 | child: Row( 40 | children: [ 41 | Icon( 42 | Icons.favorite, 43 | color: isLiked! ? Colors.white : textColor, 44 | ), 45 | const SizedBox(width: 5), 46 | Text( 47 | _getFormatLikes(), 48 | style: GoogleFonts.lato( 49 | fontWeight: FontWeight.w900, 50 | color: isLiked! ? Colors.white : textColor, 51 | ), 52 | ) 53 | ], 54 | ), 55 | ), 56 | ), 57 | ), 58 | ); 59 | } 60 | 61 | String _getFormatLikes() { 62 | if (likes! >= 1000) { 63 | final textLikes = (likes! / 1000).toString().split('.'); 64 | return "${textLikes.first} , ${textLikes.last.split('').first} 'K'"; 65 | } 66 | return '$likes'; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/page_indicators.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class PageIndicators extends StatelessWidget { 4 | const PageIndicators({ 5 | super.key, 6 | required this.currentIndex, 7 | required this.numberIndicators, 8 | }); 9 | 10 | final int currentIndex; 11 | final int numberIndicators; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Row( 16 | children: List.generate(numberIndicators, (index) { 17 | return AnimatedContainer( 18 | duration: kThemeAnimationDuration, 19 | margin: const EdgeInsets.symmetric(horizontal: 4), 20 | width: index == currentIndex ? 24 : 8, 21 | height: 6, 22 | decoration: BoxDecoration( 23 | color: index == currentIndex ? Colors.white : Colors.white60, 24 | borderRadius: BorderRadius.circular(8), 25 | ), 26 | ); 27 | }), 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/post_buttons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/models/ig_post.dart'; 3 | import 'package:flutter_projects/projects/instagram_redesign/ui/widgets/like_button.dart'; 4 | import 'package:flutter_vector_icons/flutter_vector_icons.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | 7 | class PostButtons extends StatelessWidget { 8 | const PostButtons({ 9 | super.key, 10 | required this.post, 11 | required this.onTapLike, 12 | this.colorItems = Colors.white, 13 | this.likeBackgroundColor, 14 | }); 15 | 16 | final IgPost post; 17 | final Color colorItems; 18 | final VoidCallback onTapLike; 19 | final Color? likeBackgroundColor; 20 | 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return Row( 25 | children: [ 26 | LikeButton( 27 | likes: post.likes, 28 | isLiked: post.isLiked, 29 | onTap: onTapLike, 30 | backgroundColor: likeBackgroundColor, 31 | textColor: colorItems, 32 | ), 33 | const SizedBox(width: 20), 34 | Icon(FontAwesome5Solid.comment_dots, color: colorItems), 35 | const SizedBox(width: 5), 36 | Text( 37 | post.comments!.length.toString(), 38 | style: GoogleFonts.lato( 39 | color: colorItems, 40 | fontWeight: FontWeight.w900, 41 | ), 42 | ), 43 | const SizedBox(width: 20), 44 | Icon(FontAwesome.send, color: colorItems), 45 | const Spacer(), 46 | Icon(FontAwesome.bookmark_o, color: colorItems), 47 | ], 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/red_dot.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class RedDot extends StatelessWidget { 5 | const RedDot({ 6 | super.key, 7 | }); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | height: 10, 13 | width: 10, 14 | decoration: BoxDecoration( 15 | color: Colors.redAccent, 16 | boxShadow: [BoxShadow(color: Colors.redAccent.shade100, blurRadius: 5)], 17 | shape: BoxShape.circle, 18 | ), 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/rounded_border_image.dart: -------------------------------------------------------------------------------- 1 | import 'package:cached_network_image/cached_network_image.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class RoundedBorderImage extends StatelessWidget { 5 | const RoundedBorderImage({ 6 | super.key, 7 | required this.imageUrl, 8 | required this.height, 9 | this.borderColor, 10 | this.borderWidth = 3.0, 11 | this.borderRadius, 12 | }); 13 | 14 | final String? imageUrl; 15 | final double? height; 16 | final Color? borderColor; 17 | final double borderWidth; 18 | final double? borderRadius; 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Container( 23 | height: height, 24 | width: height, 25 | decoration: BoxDecoration( 26 | color: Colors.white, 27 | border: Border.all( 28 | color: borderColor ?? Theme.of(context).backgroundColor, 29 | width: borderWidth, 30 | ), 31 | borderRadius: BorderRadius.circular(borderRadius ?? height! * .4), 32 | image: DecorationImage( 33 | image: CachedNetworkImageProvider(imageUrl!), 34 | fit: BoxFit.cover, 35 | ), 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/rounded_navigation_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/instagram_redesign/ui/widgets/red_dot.dart'; 3 | 4 | class RoundedNavigationBar extends StatelessWidget { 5 | const RoundedNavigationBar({ 6 | super.key, 7 | required this.items, 8 | this.onTap, 9 | this.unselectedColor = const Color(0xffa9a9a9), 10 | this.selectedColor = const Color(0xff000000), 11 | this.currentIndex = 0, 12 | }); 13 | 14 | final List items; 15 | final ValueChanged? onTap; 16 | final Color unselectedColor; 17 | final Color selectedColor; 18 | final int currentIndex; 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Container( 23 | height: kToolbarHeight + MediaQuery.of(context).padding.bottom, 24 | padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 10), 25 | decoration: BoxDecoration( 26 | color: Theme.of(context).colorScheme.onPrimary, 27 | borderRadius: const BorderRadius.vertical(top: Radius.circular(50)), 28 | ), 29 | child: Row( 30 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 31 | crossAxisAlignment: CrossAxisAlignment.start, 32 | children: List.generate(items.length, (index) { 33 | final item = items[index]; 34 | return IconButton( 35 | onPressed: () => onTap?.call(index), 36 | color: index == currentIndex ? selectedColor : unselectedColor, 37 | icon: Stack( 38 | alignment: const Alignment(1, .5), 39 | children: [ 40 | Icon( 41 | index == currentIndex 42 | ? item.selectedIconData ?? item.iconData 43 | : item.iconData, 44 | ), 45 | if (item.hasNotification) const RedDot() 46 | ], 47 | ), 48 | ); 49 | }), 50 | ), 51 | ); 52 | } 53 | } 54 | 55 | class RoundedNavigationBarItem { 56 | const RoundedNavigationBarItem({ 57 | required this.iconData, 58 | required this.hasNotification, 59 | this.selectedIconData, 60 | }); 61 | 62 | final IconData iconData; 63 | final bool hasNotification; 64 | final IconData? selectedIconData; 65 | } 66 | -------------------------------------------------------------------------------- /lib/projects/instagram_redesign/ui/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'ample_post_card.dart'; 2 | export 'clean_post_card.dart'; 3 | export 'footer_post.dart'; 4 | export 'ig_user_border_image.dart'; 5 | export 'like_button.dart'; 6 | export 'page_indicators.dart'; 7 | export 'post_buttons.dart'; 8 | export 'red_dot.dart'; 9 | export 'rounded_border_image.dart'; 10 | export 'rounded_navigation_bar.dart'; 11 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/md_address.dart: -------------------------------------------------------------------------------- 1 | class MdAddress { 2 | const MdAddress({ 3 | this.state, 4 | this.city, 5 | this.street, 6 | this.numberStreet, 7 | this.postalCode, 8 | }); 9 | 10 | final String? city; 11 | final String? state; 12 | final String? street; 13 | final String? numberStreet; 14 | final String? postalCode; 15 | 16 | String getLongAddress() { 17 | return '$numberStreet $street, $city $postalCode'; 18 | } 19 | 20 | static const sanFransisco = MdAddress( 21 | state: 'California', 22 | city: 'San Fransisco, CA', 23 | numberStreet: '1000', 24 | street: 'Commercial Street', 25 | postalCode: '94016', 26 | ); 27 | static const springfield = MdAddress( 28 | state: 'Ohio', 29 | city: 'Springfield, OH', 30 | street: 'High Street', 31 | numberStreet: '501', 32 | postalCode: '45506', 33 | ); 34 | static const rothschild = MdAddress( 35 | state: 'Wisconsin', 36 | city: 'Rothschild, WI', 37 | street: 'Imperial Ave', 38 | numberStreet: '501', 39 | postalCode: '54474', 40 | ); 41 | static const midwestCity = MdAddress( 42 | state: 'Oklahoma', 43 | city: 'Midwest City, OK', 44 | street: 'National Ave', 45 | numberStreet: '8121', 46 | postalCode: '73110', 47 | ); 48 | static const socorro = MdAddress( 49 | state: 'Nuevo Mexico', 50 | city: 'Socorro, NM', 51 | street: 'National Ave', 52 | numberStreet: '1202', 53 | postalCode: '87801', 54 | ); 55 | static const brownwood = MdAddress( 56 | state: 'Texas', 57 | city: 'Brownwood, TX', 58 | street: 'Burnett Rd', 59 | numberStreet: '1501', 60 | postalCode: '76801', 61 | ); 62 | } 63 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/md_appointment.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/medical_appointment/models/md_doctor.dart'; 2 | import 'package:flutter_projects/projects/medical_appointment/models/md_indication.dart'; 3 | 4 | class MedicalAppointment { 5 | MedicalAppointment({ 6 | this.title, 7 | this.date, 8 | this.doctor, 9 | this.medicalIndications, 10 | }); 11 | 12 | final String? title; 13 | DateTime? date; 14 | final Doctor? doctor; 15 | final List? medicalIndications; 16 | 17 | static final _listIndications = [ 18 | MedicalIndication.kDrinkWater, 19 | MedicalIndication.kEatVegetables, 20 | MedicalIndication.kExercise, 21 | MedicalIndication.kNoCoffee, 22 | MedicalIndication.kNoDrinkAlcohol, 23 | MedicalIndication.kNoEatFastFood, 24 | ]; 25 | 26 | static final nextAppointment = MedicalAppointment( 27 | title: 'Heart care', 28 | date: DateTime.now().add(const Duration(days: 30)), 29 | doctor: Doctor.drRichard, 30 | medicalIndications: _listIndications, 31 | ); 32 | 33 | static final skinCareAppointment = MedicalAppointment( 34 | title: 'Skin care', 35 | date: DateTime.now().subtract(const Duration(days: 10)), 36 | doctor: Doctor.drLiliana, 37 | medicalIndications: _listIndications, 38 | ); 39 | 40 | static final sutureAppointment = MedicalAppointment( 41 | title: 'Suture revision', 42 | date: DateTime.now().subtract(const Duration(days: 30)), 43 | doctor: Doctor.drEdward, 44 | medicalIndications: _listIndications, 45 | ); 46 | 47 | static final childAppointment = MedicalAppointment( 48 | title: 'Kid Vaccine', 49 | date: DateTime.now().subtract(const Duration(days: 50)), 50 | doctor: Doctor.drJulissa, 51 | medicalIndications: _listIndications, 52 | ); 53 | 54 | static final listAppointment = [ 55 | skinCareAppointment, 56 | sutureAppointment, 57 | childAppointment, 58 | ]; 59 | } 60 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/md_check.dart: -------------------------------------------------------------------------------- 1 | enum TypeCheck { 2 | weight, 3 | hemoglobin, 4 | bloodPressure, 5 | electrocardiogram, 6 | cholesterol, 7 | glucose, 8 | height 9 | } 10 | 11 | enum MedicalState { normal, alert, danger } 12 | 13 | class MedicalCheck { 14 | const MedicalCheck({this.check, this.value}); 15 | 16 | final TypeCheck? check; 17 | final double? value; 18 | 19 | String? getSvgPath() { 20 | return { 21 | TypeCheck.glucose: 'assets/svg/medical/mc-glucose.svg', 22 | TypeCheck.weight: 'assets/svg/medical/mc-weight.svg', 23 | TypeCheck.hemoglobin: 'assets/svg/medical/mc-hemoglobin.svg', 24 | TypeCheck.bloodPressure: 'assets/svg/medical/mc-blood-pressure.svg', 25 | TypeCheck.electrocardiogram: 'assets/svg/medical/mc-cardiogram.svg', 26 | TypeCheck.cholesterol: 'assets/svg/medical/mc-cholesterol.svg', 27 | TypeCheck.height: 'assets/svg/medical/mc-height.svg', 28 | }[check!]; 29 | } 30 | 31 | String? getMeasure() { 32 | return { 33 | TypeCheck.glucose: 'g/dL', 34 | TypeCheck.weight: 'kg', 35 | TypeCheck.hemoglobin: 'g/dL', 36 | TypeCheck.bloodPressure: 'mmHg', 37 | TypeCheck.electrocardiogram: 'hz', 38 | TypeCheck.cholesterol: 'mg/dL', 39 | TypeCheck.height: 'cm' 40 | }[check!]; 41 | } 42 | 43 | MedicalState getMedicalState() { 44 | switch (check!) { 45 | case TypeCheck.weight: 46 | return MedicalState.alert; 47 | case TypeCheck.glucose: 48 | return MedicalState.normal; 49 | case TypeCheck.hemoglobin: 50 | return MedicalState.alert; 51 | case TypeCheck.bloodPressure: 52 | return MedicalState.normal; 53 | case TypeCheck.electrocardiogram: 54 | return MedicalState.normal; 55 | case TypeCheck.cholesterol: 56 | return MedicalState.danger; 57 | case TypeCheck.height: 58 | return MedicalState.normal; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/md_doctor_category.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart' show IconData; 2 | import 'package:flutter_projects/projects/medical_appointment/utils/md_icons_icons.dart'; 3 | import 'package:flutter_vector_icons/flutter_vector_icons.dart'; 4 | 5 | enum DoctorCategory { 6 | kCardiologist._( 7 | nameCategory: 'Cardiologist', 8 | doctors: 9, 9 | iconData: FontAwesome.heartbeat, 10 | specialists: 10, 11 | rawColor: 0xffFF565D, 12 | ), 13 | kPediatrician._( 14 | nameCategory: 'Pediatrician', 15 | doctors: 9, 16 | iconData: MdIcons.pediatrician, 17 | specialists: 10, 18 | rawColor: 0xffFCD94A, 19 | ), 20 | kSurgeon._( 21 | nameCategory: 'Surgeon', 22 | iconData: MdIcons.surgeon, 23 | doctors: 9, 24 | specialists: 10, 25 | rawColor: 0xff1BCAB2, 26 | ), 27 | kUrologist._( 28 | nameCategory: 'Urologist', 29 | doctors: 9, 30 | iconData: MdIcons.prostate, 31 | specialists: 10, 32 | rawColor: 0xff33b5e5, 33 | ), 34 | kAllergist._( 35 | nameCategory: 'Allergist', 36 | doctors: 9, 37 | iconData: MdIcons.runny_nose, 38 | rawColor: 0xffFFaf00, 39 | specialists: 10, 40 | ), 41 | kDermatologist._( 42 | nameCategory: 'Dermatologist', 43 | iconData: MdIcons.skin, 44 | doctors: 9, 45 | rawColor: 0xffff6ad3, 46 | specialists: 10, 47 | ), 48 | kOphthalmologist._( 49 | nameCategory: 'Ophthalmologist', 50 | doctors: 9, 51 | iconData: MdIcons.eye, 52 | rawColor: 0xff28EB62, 53 | specialists: 10, 54 | ), 55 | kEndocrinologist._( 56 | nameCategory: 'Endocrinologist', 57 | doctors: 9, 58 | iconData: MdIcons.kidneys, 59 | rawColor: 0xff993299, 60 | specialists: 10, 61 | ); 62 | 63 | const DoctorCategory._({ 64 | this.iconData, 65 | this.nameCategory, 66 | this.specialists, 67 | this.doctors, 68 | this.rawColor, 69 | }); 70 | 71 | final String? nameCategory; 72 | final int? specialists; 73 | final int? doctors; 74 | final int? rawColor; 75 | final IconData? iconData; 76 | 77 | static const categories = [ 78 | kCardiologist, 79 | kPediatrician, 80 | kSurgeon, 81 | kUrologist, 82 | kAllergist, 83 | kDermatologist, 84 | kOphthalmologist, 85 | kEndocrinologist, 86 | ]; 87 | } 88 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/md_indication.dart: -------------------------------------------------------------------------------- 1 | enum MedicalIndication { 2 | kNoDrinkAlcohol._( 3 | title: "No alcohol", 4 | description: "Don't drinking alcohol", 5 | svgIconPath: 'assets/svg/medical/mi-no-drinking.svg', 6 | ), 7 | kDrinkWater._( 8 | title: 'Drink water', 9 | description: 'Drink a lot of water', 10 | svgIconPath: 'assets/svg/medical/mi-drink-water.svg', 11 | ), 12 | kNoEatFastFood._( 13 | title: "No fast food", 14 | description: "Don't eat fast food", 15 | svgIconPath: 'assets/svg/medical/mi-no-fast-food.svg', 16 | ), 17 | kEatVegetables._( 18 | title: 'Eat diet', 19 | description: 'Eat more vegetables', 20 | svgIconPath: 'assets/svg/medical/mi-eat-vegatables.svg', 21 | ), 22 | kNoCoffee._( 23 | title: "No coffee", 24 | description: "Don't consume caffeine", 25 | svgIconPath: 'assets/svg/medical/mi-no-coffee.svg', 26 | ), 27 | kExercise._( 28 | title: 'Exercise', 29 | description: 'Make more exercise', 30 | svgIconPath: 'assets/svg/medical/mi-make-exercise.svg', 31 | ); 32 | 33 | const MedicalIndication._({this.svgIconPath, this.description, this.title}); 34 | 35 | final String? title; 36 | final String? svgIconPath; 37 | final String? description; 38 | } 39 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/md_patient.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/medical_appointment/models/md_appointment.dart'; 2 | import 'package:flutter_projects/projects/medical_appointment/models/md_check.dart'; 3 | export 'md_appointment.dart'; 4 | export 'md_check.dart'; 5 | 6 | class MedicalPatient { 7 | const MedicalPatient({ 8 | this.name, 9 | this.lastName, 10 | this.email, 11 | this.photoUrl, 12 | this.phone, 13 | this.medicalChecks, 14 | this.appointmentHistory, 15 | this.nextAppointment, 16 | }); 17 | 18 | final String? name; 19 | final String? lastName; 20 | final String? email; 21 | final String? photoUrl; 22 | final String? phone; 23 | final List? medicalChecks; 24 | final List? appointmentHistory; 25 | final MedicalAppointment? nextAppointment; 26 | 27 | static final currentPatient = MedicalPatient( 28 | name: 'Kevin', 29 | lastName: 'Melendez', 30 | email: 'kevinmdezhdez@gmail.com', 31 | photoUrl: 32 | 'https://images.unsplash.com/photo-1480455624313-e29b44bbfde1?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MjF8fG1lbnxlbnwwfHwwfA%3D%3D&auto=format&fit=crop&w=500&q=60', 33 | appointmentHistory: MedicalAppointment.listAppointment, 34 | nextAppointment: MedicalAppointment.nextAppointment, 35 | phone: '+52741137588', 36 | medicalChecks: const [ 37 | MedicalCheck(check: TypeCheck.weight, value: 149.7), 38 | MedicalCheck(check: TypeCheck.height, value: 170.7), 39 | MedicalCheck(check: TypeCheck.cholesterol, value: 200), 40 | MedicalCheck(check: TypeCheck.electrocardiogram, value: 60), 41 | MedicalCheck(check: TypeCheck.bloodPressure, value: 0.87), 42 | MedicalCheck(check: TypeCheck.hemoglobin, value: 120), 43 | MedicalCheck(check: TypeCheck.glucose, value: 89), 44 | ], 45 | ); 46 | } 47 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/models/medical_check_item.dart: -------------------------------------------------------------------------------- 1 | enum MedicalState { danger, normal, alert } 2 | 3 | class MedicalCheckItem { 4 | const MedicalCheckItem({this.title, this.info, this.pathImage, this.state}); 5 | 6 | final String? title; 7 | final String? info; 8 | final String? pathImage; 9 | final MedicalState? state; 10 | 11 | static const listItemCheck = [ 12 | MedicalCheckItem( 13 | title: 'Weight & Height', 14 | info: '149.7 lb - 172 cm', 15 | pathImage: 'assets/img/medical/weight.png', 16 | state: MedicalState.normal,), 17 | MedicalCheckItem( 18 | title: 'Blood pressure', 19 | info: '130/90 mm', 20 | pathImage: 'assets/img/medical/arm.png', 21 | state: MedicalState.alert,), 22 | MedicalCheckItem( 23 | title: 'Cholesterol', 24 | info: '200 mg/dl', 25 | pathImage: 'assets/img/medical/cholesterol.png', 26 | state: MedicalState.alert,), 27 | MedicalCheckItem( 28 | title: 'Glucose', 29 | info: '200 mg/dl', 30 | pathImage: 'assets/img/medical/diabetes-test.png', 31 | state: MedicalState.danger, 32 | ), 33 | MedicalCheckItem( 34 | title: 'Lung health', 35 | info: '90 %', 36 | pathImage: 'assets/img/medical/lungs.png', 37 | state: MedicalState.normal, 38 | ), 39 | MedicalCheckItem( 40 | title: 'Stress', 41 | info: '40 %', 42 | pathImage: 'assets/img/medical/brain.png', 43 | state: MedicalState.alert, 44 | ), 45 | ]; 46 | } 47 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/ui/doctors/doctors_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/medical_appointment/utils/md_app_colors.dart'; 3 | 4 | class DoctorsPage extends StatelessWidget { 5 | const DoctorsPage({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return Scaffold( 10 | body: Column( 11 | children: [ 12 | Container( 13 | height: 200, 14 | width: double.infinity, 15 | padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), 16 | decoration: const BoxDecoration( 17 | gradient: LinearGradient( 18 | colors: [MdAppColors.kBlue, MdAppColors.kDarkBlue], 19 | end: Alignment.bottomCenter, 20 | begin: Alignment.topCenter, 21 | ), 22 | ), 23 | child: SafeArea( 24 | child: Column( 25 | children: [ 26 | Row( 27 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 28 | children: [ 29 | Column( 30 | crossAxisAlignment: CrossAxisAlignment.start, 31 | mainAxisSize: MainAxisSize.min, 32 | children: const [ 33 | Text( 34 | 'Find your doctor', 35 | style: TextStyle( 36 | color: Colors.white, 37 | fontWeight: FontWeight.bold, 38 | fontSize: 22, 39 | ), 40 | ), 41 | Text( 42 | 'The best doctors catalog', 43 | style: 44 | TextStyle(color: Colors.white70, fontSize: 16), 45 | ), 46 | ], 47 | ), 48 | const Icon( 49 | Icons.search, 50 | color: Colors.white, 51 | size: 50, 52 | ) 53 | ], 54 | ), 55 | ], 56 | ), 57 | ), 58 | ) 59 | ], 60 | ), 61 | ); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/ui/home/painters/tongue_painter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/medical_appointment/utils/md_app_colors.dart'; 3 | 4 | class TonguePainter extends CustomPainter { 5 | TonguePainter({required this.curveRadius}); 6 | final double curveRadius; 7 | 8 | @override 9 | void paint(Canvas canvas, Size size) { 10 | final paint = Paint() 11 | ..shader = const LinearGradient( 12 | colors: [MdAppColors.kBlue, MdAppColors.kDarkBlue], 13 | begin: Alignment.topCenter, 14 | end: Alignment.bottomCenter, 15 | ).createShader( 16 | Rect.fromCenter( 17 | center: Offset(0, size.height * .6), 18 | width: size.width, 19 | height: size.height, 20 | ), 21 | ); 22 | 23 | final path = Path() 24 | ..lineTo(0, size.height) 25 | ..quadraticBezierTo( 26 | 0, 27 | size.height - curveRadius, 28 | curveRadius, 29 | size.height - curveRadius, 30 | ) 31 | ..lineTo(size.width * .3, size.height - curveRadius) 32 | ..cubicTo( 33 | size.width * .42, 34 | size.height - curveRadius, 35 | size.width * .41, 36 | size.height, 37 | size.width * .5, 38 | size.height, 39 | ) 40 | ..cubicTo( 41 | size.width * .59, 42 | size.height, 43 | size.width * .59, 44 | size.height - curveRadius, 45 | size.width * .7, 46 | size.height - curveRadius, 47 | ) 48 | ..lineTo(size.width - curveRadius, size.height - curveRadius) 49 | ..quadraticBezierTo( 50 | size.width, 51 | size.height - curveRadius, 52 | size.width, 53 | size.height, 54 | ) 55 | ..lineTo(size.width, 0) 56 | ..lineTo(0, 0); 57 | canvas 58 | ..drawShadow(path, Colors.black26, 10, false) 59 | ..drawPath(path, paint); 60 | } 61 | 62 | @override 63 | bool shouldRepaint(CustomPainter oldDelegate) => false; 64 | } 65 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/ui/home/widgets/home_widgets.dart: -------------------------------------------------------------------------------- 1 | export 'package:flutter_projects/projects/medical_appointment/ui/home/painters/tongue_painter.dart'; 2 | export 'package:flutter_projects/projects/medical_appointment/ui/home/widgets/appointment_details.dart'; 3 | export 'package:flutter_projects/projects/medical_appointment/ui/home/widgets/category_card.dart'; 4 | export 'package:flutter_projects/projects/medical_appointment/ui/home/widgets/medical_check_card.dart'; 5 | export 'package:flutter_projects/projects/medical_appointment/ui/home/widgets/next_appointment_card.dart'; 6 | export 'package:flutter_projects/projects/medical_appointment/ui/home/widgets/search_app_bar.dart'; 7 | export 'package:flutter_projects/projects/medical_appointment/ui/home/widgets/top_doctors_card.dart'; 8 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/ui/home/widgets/search_app_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:cached_network_image/cached_network_image.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_projects/projects/medical_appointment/models/md_patient.dart'; 4 | 5 | class SearchAppBar extends StatelessWidget { 6 | const SearchAppBar({ 7 | super.key, 8 | }); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | const height = 45.0; 13 | return SafeArea( 14 | child: Row( 15 | children: [ 16 | Expanded( 17 | child: SizedBox( 18 | height: height, 19 | child: TextField( 20 | keyboardType: TextInputType.text, 21 | decoration: InputDecoration( 22 | filled: true, 23 | fillColor: Colors.white38, 24 | contentPadding: const EdgeInsets.symmetric(horizontal: 20), 25 | suffixIcon: const Icon(Icons.search, color: Colors.white70), 26 | border: OutlineInputBorder( 27 | borderRadius: BorderRadius.circular(30), 28 | borderSide: BorderSide.none,), 29 | hintStyle: const TextStyle( 30 | color: Colors.white70, 31 | fontWeight: FontWeight.w700, 32 | fontSize: 14,), 33 | hintText: 'Search', 34 | ), 35 | ), 36 | ), 37 | ), 38 | const SizedBox(width: 10), 39 | Container( 40 | width: height, 41 | height: height, 42 | padding: const EdgeInsets.all(2), 43 | decoration: BoxDecoration( 44 | border: Border.all(color: Colors.white, width: 2), 45 | shape: BoxShape.circle, 46 | color: Colors.white, 47 | image: DecorationImage( 48 | image: CachedNetworkImageProvider( 49 | MedicalPatient.currentPatient.photoUrl!,), 50 | fit: BoxFit.cover, 51 | ),), 52 | ), 53 | ], 54 | ), 55 | ); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/utils/md_app_colors.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class MdAppColors { 4 | static const kLightCyan = Color(0xff9ae2e6); 5 | static const kDarkTeal = Color(0xff527c88); 6 | static const kDarkBlue = Color(0xff1238a0); 7 | static const kBlue = Color(0xff1a75fe); 8 | static const kLightBlue = Color(0xff16C2D5); 9 | } 10 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/utils/md_icons_icons.dart: -------------------------------------------------------------------------------- 1 | /// Flutter icons MDIcons 2 | /// Copyright (C) 2020 by original authors @ fluttericon.com, fontello.com 3 | /// This font was generated by FlutterIcon.com, which is derived from Fontello. 4 | /// 5 | /// To use this font, place it in your fonts/ directory and include the 6 | /// following in your pubspec.yaml 7 | // 8 | /// 9 | /// 10 | import 'package:flutter/widgets.dart'; 11 | 12 | class MdIcons { 13 | MdIcons._(); 14 | 15 | static const _kFontFam = 'MDIcons'; 16 | 17 | // ignore_for_file: constant_identifier_names 18 | static const IconData kidneys = 19 | IconData(0xe800, fontFamily: _kFontFam); 20 | static const IconData pediatrician_o = 21 | IconData(0xe802, fontFamily: _kFontFam); 22 | static const IconData dentist = 23 | IconData(0xe803, fontFamily: _kFontFam); 24 | static const IconData surgeon_o = 25 | IconData(0xe804, fontFamily: _kFontFam); 26 | static const IconData surgeon = 27 | IconData(0xe805, fontFamily: _kFontFam); 28 | static const IconData pediatrician = 29 | IconData(0xe806, fontFamily: _kFontFam); 30 | static const IconData prostate_o = 31 | IconData(0xe807, fontFamily: _kFontFam); 32 | static const IconData prostate = 33 | IconData(0xe808, fontFamily: _kFontFam); 34 | static const IconData runny_nose_o = 35 | IconData(0xe809, fontFamily: _kFontFam); 36 | static const IconData kidneys_o = 37 | IconData(0xe80a, fontFamily: _kFontFam); 38 | static const IconData skin_o = 39 | IconData(0xe80b, fontFamily: _kFontFam); 40 | static const IconData runny_nose = 41 | IconData(0xe80c, fontFamily: _kFontFam); 42 | static const IconData eye = 43 | IconData(0xe80d, fontFamily: _kFontFam); 44 | static const IconData eye_o = 45 | IconData(0xe80e, fontFamily: _kFontFam); 46 | static const IconData stethoscope = 47 | IconData(0xe80f, fontFamily: _kFontFam); 48 | static const IconData skin = 49 | IconData(0xe810, fontFamily: _kFontFam); 50 | } 51 | -------------------------------------------------------------------------------- /lib/projects/medical_appointment/utils/md_utils.dart: -------------------------------------------------------------------------------- 1 | class MdUtils { 2 | static String formatToTextDate(DateTime date) { 3 | return '${date.year} ${months[date.month]} ${date.day}'; 4 | } 5 | 6 | static String extractHourDate(DateTime date) { 7 | final auxHour = date.hour < 10 ? 0 : ''; 8 | final auxMinute = date.minute < 10 ? 0 : ''; 9 | return '$auxHour${date.hour}:$auxMinute${date.minute} hr'; 10 | } 11 | 12 | static const months = { 13 | 1: 'January', 14 | 2: 'February', 15 | 3: 'March', 16 | 4: 'April', 17 | 5: 'May', 18 | 6: 'June', 19 | 7: 'Jule', 20 | 8: 'August', 21 | 9: 'September', 22 | 10: 'October', 23 | 11: 'November', 24 | 12: 'December', 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/constants/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const Color kAccentColor = Color(0xffFF4259); 4 | const Color kAccentSecondaryColor = Color(0xffFF6313); 5 | const Color kPrimaryColorHeavy = Color(0xff1f1f2f); 6 | const Color kPrimaryColorDark = Color(0xff303043); 7 | const Color kPrimaryColor = Color(0xff454561); 8 | const Color kPrimaryColorLight = Color(0xffa0a0bf); 9 | 10 | const kDuration400ms = Duration(milliseconds: 400); 11 | 12 | const kGradientRedOrange = LinearGradient( 13 | colors: [kAccentColor, kAccentSecondaryColor], 14 | begin: Alignment.topCenter, 15 | end: Alignment(1.8, 1),); 16 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/models/actors.dart: -------------------------------------------------------------------------------- 1 | class Actor { 2 | 3 | const Actor({ 4 | this.name, 5 | this.pathImage, 6 | }); 7 | 8 | final String? name; 9 | final String? pathImage; 10 | 11 | static const listActors = [ 12 | Actor(name: 'Josh Mike', pathImage: 'assets/img/movie/actor1.jpg'), 13 | Actor(name: 'Antony Mendez', pathImage: 'assets/img/movie/actor2.jpg'), 14 | Actor(name: 'Katy Pearce', pathImage: 'assets/img/movie/actor3.jpg'), 15 | Actor(name: 'Gerald Fey', pathImage: 'assets/img/movie/actor4.jpg'), 16 | Actor(name: 'Gina Velasquez', pathImage: 'assets/img/movie/actor5.jpg'), 17 | ]; 18 | } 19 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/models/billboard.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/movie_selection/models/movie.dart'; 2 | 3 | class Billboard { 4 | const Billboard(this.hour, this.movieList); 5 | 6 | final String hour; 7 | final List movieList; 8 | 9 | static final billboardList = [ 10 | Billboard('14:30', Movie.listMovie3), 11 | Billboard('16:15', Movie.listMovie), 12 | Billboard('18:00', Movie.listMovie2), 13 | ]; 14 | } 15 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/models/seats.dart: -------------------------------------------------------------------------------- 1 | class SeatsRowData { 2 | const SeatsRowData({this.seats, this.occupiedSeats}); 3 | 4 | final int? seats; 5 | final List? occupiedSeats; 6 | 7 | 8 | static const seatsList = [ 9 | SeatsRowData(seats: 8, occupiedSeats: [5]), 10 | SeatsRowData(seats: 10, occupiedSeats: []), 11 | SeatsRowData(seats: 10, occupiedSeats: [6]), 12 | SeatsRowData(seats: 10, occupiedSeats: [1, 2]), 13 | SeatsRowData(seats: 12, occupiedSeats: [3, 12]), 14 | SeatsRowData(seats: 12, occupiedSeats: [11, 12]), 15 | SeatsRowData(seats: 12, occupiedSeats: []), 16 | SeatsRowData(seats: 12, occupiedSeats: [12]), 17 | ]; 18 | 19 | static const firstSeatsList = [ 20 | SeatsRowData(seats: 2, occupiedSeats: []), 21 | SeatsRowData(seats: 2, occupiedSeats: []), 22 | SeatsRowData(seats: 2, occupiedSeats: []), 23 | SeatsRowData(seats: 2, occupiedSeats: [1, 2]), 24 | ]; 25 | } 26 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/movie_selection_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/ui/screens/home/movie_home.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class MovieSelectionApp extends StatelessWidget { 6 | const MovieSelectionApp({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | theme: ThemeData( 12 | textTheme: GoogleFonts.barlowCondensedTextTheme() 13 | .apply(bodyColor: Colors.white) 14 | .copyWith( 15 | bodyText2: GoogleFonts.barlowCondensed( 16 | letterSpacing: 2, 17 | color: Colors.white, 18 | ), 19 | ), 20 | ), 21 | home: MovieHome(), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/screens/cinema_selection/widgets/hour_container.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class HourContainer extends StatelessWidget { 6 | const HourContainer({ 7 | super.key, 8 | this.hour, 9 | this.id, 10 | this.selectedHourNotifier, 11 | this.onTap, 12 | }); 13 | final String? hour; 14 | final ValueNotifier? selectedHourNotifier; 15 | final int? id; 16 | final VoidCallback? onTap; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | final size = MediaQuery.of(context).size; 21 | return ValueListenableBuilder( 22 | valueListenable: selectedHourNotifier!, 23 | builder: (context, value, child) { 24 | final isSelected = value == id; 25 | return InkWell( 26 | onTap: () { 27 | selectedHourNotifier!.value = id; 28 | onTap!(); 29 | }, 30 | child: Container( 31 | alignment: Alignment.center, 32 | decoration: BoxDecoration( 33 | color: kPrimaryColor, 34 | gradient: isSelected ? kGradientRedOrange : null, 35 | boxShadow: const [ 36 | BoxShadow(blurRadius: 20, color: Colors.black38) 37 | ], 38 | borderRadius: BorderRadius.circular(6), 39 | ), 40 | child: Column( 41 | mainAxisSize: MainAxisSize.min, 42 | children: [ 43 | Text( 44 | hour!, 45 | style: GoogleFonts.barlowCondensed( 46 | fontWeight: FontWeight.w500, 47 | fontSize: size.height * .024, 48 | color: isSelected ? Colors.white : kPrimaryColorLight, 49 | ), 50 | ), 51 | Text( 52 | '60 MXN', 53 | style: GoogleFonts.barlowCondensed( 54 | fontWeight: FontWeight.w400, 55 | fontSize: size.height * .016, 56 | color: isSelected ? Colors.white : kPrimaryColorLight, 57 | ), 58 | ) 59 | ], 60 | ), 61 | ), 62 | ); 63 | }, 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/screens/cinema_selection/widgets/hours_movie_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/models/movie.dart'; 3 | 4 | import 'package:flutter_projects/projects/movie_selection/ui/screens/cinema_selection/widgets/hour_container.dart'; 5 | 6 | 7 | class HoursMovieOptions extends StatelessWidget { 8 | const HoursMovieOptions({ 9 | super.key, 10 | required this.listHours, 11 | required this.selectedHourNotifier, 12 | required this.movie, 13 | }); 14 | 15 | final List listHours; 16 | final ValueNotifier selectedHourNotifier; 17 | final Movie? movie; 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return GridView.count( 22 | scrollDirection: Axis.horizontal, 23 | crossAxisCount: 2, 24 | mainAxisSpacing: 20, 25 | crossAxisSpacing: 20, 26 | childAspectRatio: 2 / 4, 27 | physics: const BouncingScrollPhysics(), 28 | padding: const EdgeInsets.symmetric(horizontal: 20), 29 | children: List.generate(listHours.length, (i) { 30 | return HourContainer( 31 | hour: listHours[i], 32 | selectedHourNotifier: selectedHourNotifier, 33 | onTap: () => movie!.billboardHour = listHours[i], 34 | id: i, 35 | ); 36 | }), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/screens/cinema_selection/widgets/select_cinema.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class SelectCinema extends StatelessWidget { 6 | const SelectCinema({ 7 | super.key, 8 | }); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | final size = MediaQuery.of(context).size; 13 | return Container( 14 | padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15), 15 | margin: const EdgeInsets.symmetric(horizontal: 20), 16 | width: double.infinity, 17 | decoration: BoxDecoration( 18 | color: kPrimaryColor, 19 | borderRadius: BorderRadius.circular(6), 20 | boxShadow: const [ 21 | BoxShadow( 22 | color: Colors.black54, 23 | blurRadius: 30, 24 | ) 25 | ], 26 | ), 27 | child: Row( 28 | children: [ 29 | Column( 30 | crossAxisAlignment: CrossAxisAlignment.start, 31 | children: [ 32 | Text( 33 | 'SELECT YOUR CINEMA', 34 | style: GoogleFonts.barlowCondensed( 35 | color: kPrimaryColorLight, 36 | fontSize: size.height * .018, 37 | fontWeight: FontWeight.w500, 38 | ), 39 | ), 40 | Text( 41 | 'Gulliver', 42 | style: GoogleFonts.barlowCondensed( 43 | height: 2, 44 | fontSize: size.height * .025, 45 | fontWeight: FontWeight.w600, 46 | ), 47 | ), 48 | ], 49 | ), 50 | const Spacer(), 51 | Icon( 52 | Icons.arrow_downward, 53 | color: Colors.white, 54 | size: size.height * .03, 55 | ) 56 | ], 57 | ), 58 | ); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/screens/detail/widgets/gradient_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class GradientButton extends StatelessWidget { 6 | const GradientButton({ 7 | super.key, 8 | this.text, 9 | this.onTap, 10 | this.width, 11 | }); 12 | 13 | final String? text; 14 | final double? width; 15 | 16 | final VoidCallback? onTap; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | final size = MediaQuery.of(context).size; 21 | return InkWell( 22 | onTap: onTap, 23 | splashColor: Colors.transparent, 24 | highlightColor: Colors.transparent, 25 | borderRadius: BorderRadius.circular(8), 26 | child: Container( 27 | alignment: Alignment.center, 28 | height: size.height * .07, 29 | width: width ?? size.width, 30 | decoration: BoxDecoration( 31 | boxShadow: const [ 32 | BoxShadow( 33 | color: Colors.black12, 34 | blurRadius: 20, 35 | ) 36 | ], 37 | borderRadius: BorderRadius.circular(8), 38 | gradient: kGradientRedOrange,), 39 | child: Text( 40 | text!, 41 | style: GoogleFonts.barlowCondensed( 42 | fontSize: size.height * .027, 43 | fontWeight: FontWeight.w500, 44 | letterSpacing: 4,), 45 | ), 46 | ), 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/screens/detail/widgets/synopsis.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class Synopsis extends StatelessWidget { 6 | const Synopsis({super.key, this.description}); 7 | 8 | final String? description; 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | final size = MediaQuery.of(context).size; 13 | return Column( 14 | crossAxisAlignment: CrossAxisAlignment.start, 15 | children: [ 16 | Text( 17 | 'Synopsis', 18 | style: GoogleFonts.barlowCondensed( 19 | fontSize: size.height * .03, 20 | fontWeight: FontWeight.w400, 21 | ), 22 | ), 23 | const SizedBox(height: 10), 24 | Text( 25 | description!, 26 | textAlign: TextAlign.justify, 27 | style: GoogleFonts.barlowCondensed( 28 | fontSize: size.height * .02, 29 | height: 1.5, 30 | fontWeight: FontWeight.w400, 31 | color: kPrimaryColorLight, 32 | ), 33 | ), 34 | ], 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/screens/home/widgets/header_option.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class HeaderOption extends StatelessWidget { 6 | const HeaderOption({ 7 | super.key, 8 | this.title, 9 | this.isSelected, 10 | }); 11 | 12 | final String? title; 13 | final bool? isSelected; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Expanded( 18 | child: Container( 19 | alignment: const Alignment(0, .5), 20 | height: double.infinity, 21 | decoration: BoxDecoration( 22 | gradient: isSelected! 23 | ? kGradientRedOrange 24 | : null, 25 | ), 26 | child: Text( 27 | title!.toUpperCase(), 28 | style: GoogleFonts.barlowCondensed( 29 | fontWeight: FontWeight.w500, 30 | color: Colors.white.withOpacity(.85), 31 | letterSpacing: 2, 32 | fontSize: 28, 33 | ), 34 | ), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/widgets/gradient_animation_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/core/shared/ui/animations/tween_animations.dart'; 3 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 4 | import 'package:flutter_projects/projects/movie_selection/ui/screens/detail/widgets/gradient_button.dart'; 5 | 6 | class GradientAnimationButton extends StatelessWidget { 7 | const GradientAnimationButton({ 8 | super.key, 9 | required this.hideWidgets, 10 | this.label, 11 | this.onPressed, 12 | }); 13 | 14 | final ValueNotifier hideWidgets; 15 | final String? label; 16 | final VoidCallback? onPressed; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return ValueListenableBuilder( 21 | valueListenable: hideWidgets, 22 | builder: (context, value, child) { 23 | return AnimatedPositioned( 24 | curve: Curves.fastOutSlowIn, 25 | duration: kDuration400ms, 26 | bottom: value ? -150 : 20, 27 | left: 20, 28 | right: 20, 29 | child: child!, 30 | ); 31 | }, 32 | child: TranslateAnimation( 33 | child: ScaleAnimation( 34 | child: OpacityAnimation( 35 | child: GradientButton( 36 | onTap: () { 37 | hideWidgets.value = true; 38 | onPressed!(); 39 | }, 40 | text: label, 41 | ), 42 | ), 43 | ), 44 | ), 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/widgets/row_stars.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class RowStars extends StatelessWidget { 4 | const RowStars({ 5 | super.key, 6 | this.stars, 7 | this.size, 8 | this.color = Colors.cyan, 9 | }); 10 | 11 | final double? stars; 12 | final double? size; 13 | final Color color; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | final colorStars = color; 18 | final fillStar = Icon(Icons.star, color: colorStars, size: size); 19 | 20 | final halfStar = Icon(Icons.star_half, color: colorStars, size: size); 21 | 22 | final voidStar = 23 | Icon(Icons.star, color: Colors.grey[300]!.withOpacity(.4), size: size); 24 | 25 | var fillStars = stars!.floor(); 26 | final addHalfStar = (stars! - fillStars) >= 0.5; 27 | final listStars = List.generate(fillStars, (i) => fillStar); 28 | if (addHalfStar) { 29 | listStars.add(halfStar); 30 | fillStars++; 31 | } 32 | listStars.addAll(List.generate(10 - fillStars, (i) => voidStar)); 33 | return FittedBox( 34 | child: Row(children: listStars), 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/projects/movie_selection/ui/widgets/tag_container.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/movie_selection/constants/constants.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | 6 | class TagContainer extends StatelessWidget { 7 | const TagContainer({ 8 | super.key, 9 | this.tag, 10 | this.gradient = kGradientRedOrange, 11 | }); 12 | final String? tag; 13 | final Gradient gradient; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Container( 18 | padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 3), 19 | decoration: BoxDecoration( 20 | borderRadius: BorderRadius.circular(3), gradient: gradient,), 21 | child: Text( 22 | tag!.toUpperCase(), 23 | style: GoogleFonts.barlowCondensed( 24 | fontSize: 15, 25 | fontWeight: FontWeight.w500, 26 | ), 27 | ), 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/projects/music_album_collection/models/album_model.dart: -------------------------------------------------------------------------------- 1 | class AlbumModel { 2 | AlbumModel({ 3 | required this.title, 4 | required this.author, 5 | required this.pathImage, 6 | required this.songs, 7 | }); 8 | 9 | final String title; 10 | final String author; 11 | final String pathImage; 12 | final List songs; 13 | 14 | static final listAlbum = [ 15 | AlbumModel( 16 | title: 'Apocalipsis Zombie', 17 | author: 'Cuarteto de nos', 18 | pathImage: 'assets/img/music/zombie.jpg', 19 | songs: ['Gaucho Power', 'Invisible', 'El rey y el as'],), 20 | AlbumModel( 21 | title: 'Jueves', 22 | author: 'Cuarteto de nos', 23 | pathImage: 'assets/img/music/jueves.jpg', 24 | songs: ['Anonimo', 'Mario Neta', 'Hombre con alas'],), 25 | AlbumModel( 26 | title: 'Habla tu espejo', 27 | author: 'Cuarteto de nos', 28 | pathImage: 'assets/img/music/espejo.jpg', 29 | songs: ['No llora', 'Roberto', 'El aprendiz'],), 30 | AlbumModel( 31 | title: 'Porfiado', 32 | author: 'Cuarteto de nos', 33 | pathImage: 'assets/img/music/porfiado.jpg', 34 | songs: ['Lo malo de ser bueno', 'Buen dia benito', 'Miguel Gritar'],), 35 | AlbumModel( 36 | title: 'Bipolar', 37 | author: 'Cuarteto de nos', 38 | pathImage: 'assets/img/music/bipolar.jpg', 39 | songs: ['El hijo de hernandez', 'Doble identidad', 'Mi lista negra'],), 40 | AlbumModel( 41 | title: 'Raro', 42 | author: 'Cuarteto de nos', 43 | pathImage: 'assets/img/music/raro.jpg', 44 | songs: [ 45 | 'Hoy estoy raro', 46 | 'Me hace bien, me hace mal', 47 | 'Ya no se que hacer conmigo' 48 | ],), 49 | AlbumModel( 50 | title: 'Cortamambo', 51 | author: 'Cuarteto de nos', 52 | pathImage: 'assets/img/music/cortamanbo.jpg', 53 | songs: [ 54 | 'La guerra de Gardel', 55 | 'Intentaron separarnos', 56 | 'Me amo', 57 | ],), 58 | ]; 59 | } 60 | -------------------------------------------------------------------------------- /lib/projects/music_album_collection/music_album_collection.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/music_album_collection/screens/albums/albums_screen.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class MusicAlbumList extends StatelessWidget { 6 | const MusicAlbumList({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | theme: ThemeData( 12 | scaffoldBackgroundColor: Colors.white, 13 | textTheme: GoogleFonts.poppinsTextTheme(), 14 | primarySwatch: Colors.grey, 15 | appBarTheme: const AppBarTheme( 16 | backgroundColor: Colors.white, 17 | elevation: 0, 18 | ), 19 | primaryColor: Colors.white, 20 | ), 21 | home: const AlbumsScreen(), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/projects/music_album_collection/screens/music_player/widgets/animated_player_controls.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class AnimatedPlayerControls extends StatelessWidget { 6 | const AnimatedPlayerControls({ 7 | super.key, 8 | required this.animation1, 9 | required this.animation2, 10 | }); 11 | 12 | final Animation animation1; 13 | final Animation animation2; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return FadeTransition( 18 | opacity: animation1, 19 | child: Padding( 20 | padding: const EdgeInsets.only(bottom: 20), 21 | child: Row( 22 | mainAxisAlignment: MainAxisAlignment.spaceAround, 23 | children: List.generate(5, (i) { 24 | final listIcons = [ 25 | Icons.replay, 26 | Icons.fast_rewind, 27 | Icons.play_arrow_rounded, 28 | Icons.fast_forward, 29 | Icons.volume_up 30 | ]; 31 | return (i == 0 || i == 4) 32 | ? IconButton( 33 | onPressed: () {}, 34 | color: Colors.grey, 35 | icon: Icon(listIcons[i]), 36 | ) 37 | : Transform.scale( 38 | scale: lerpDouble( 39 | .5, 40 | 1, 41 | animation2.value, 42 | ), 43 | child: FloatingActionButton( 44 | mini: i != 2, 45 | heroTag: i.toString(), 46 | onPressed: () {}, 47 | backgroundColor: Colors.white, 48 | elevation: 1, 49 | foregroundColor: const Color(0xffc21451), 50 | child: Icon(listIcons[i]), 51 | ), 52 | ); 53 | }), 54 | ), 55 | ), 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/projects/music_album_collection/screens/widgets/album_card_text.dart: -------------------------------------------------------------------------------- 1 | 2 | import 'package:flutter/material.dart'; 3 | 4 | class AlbumCardText extends StatelessWidget { 5 | const AlbumCardText({ 6 | super.key, 7 | required this.textSize, 8 | required this.heroTag, 9 | this.text, 10 | this.colorText, 11 | }); 12 | 13 | final double textSize; 14 | final String heroTag; 15 | final String? text; 16 | final Color? colorText; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Hero( 21 | tag: heroTag, 22 | child: FittedBox( 23 | child: Material( 24 | color: Colors.transparent, 25 | child: Text( 26 | text!, 27 | maxLines: 1, 28 | overflow: TextOverflow.ellipsis, 29 | style: TextStyle( 30 | fontSize: textSize, 31 | fontWeight: FontWeight.bold, 32 | color: colorText, 33 | ), 34 | ), 35 | ), 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/models/song.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/music_vinyl_player/models/album.dart'; 2 | 3 | class Song { 4 | const Song(this.title, this.duration, this.album); 5 | 6 | final String title; 7 | final Duration duration; 8 | final Album album; 9 | 10 | 11 | static final currentSong = 12 | Song('Anónimo', const Duration(seconds: 213), Album.listAlbum[1]); 13 | } 14 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/music_vinyl_player.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/music_vinyl_player/ui/my_library/my_library_page.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class MusicVinylPlayer extends StatelessWidget { 6 | const MusicVinylPlayer({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | theme: ThemeData( 12 | iconTheme: const IconThemeData(color: Colors.black), 13 | visualDensity: VisualDensity.adaptivePlatformDensity, 14 | textTheme: GoogleFonts.spectralTextTheme(), 15 | appBarTheme: AppBarTheme( 16 | titleTextStyle: GoogleFonts.poppins(), 17 | iconTheme: const IconThemeData(color: Colors.black), 18 | color: Colors.transparent, 19 | elevation: 0, 20 | actionsIconTheme: const IconThemeData(color: Colors.black), 21 | ), 22 | ), 23 | home: const MyLibraryPage(), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/my_library/widgets/my_library_widgets.dart: -------------------------------------------------------------------------------- 1 | export 'package:flutter_projects/projects/music_vinyl_player/ui/my_library/widgets/description_card.dart'; 2 | export 'package:flutter_projects/projects/music_vinyl_player/ui/my_library/widgets/song_play_footer.dart'; 3 | export 'package:flutter_projects/projects/music_vinyl_player/ui/my_library/widgets/vinyl_disk_card.dart'; 4 | export 'package:flutter_projects/projects/music_vinyl_player/ui/song_player/song_player_page.dart'; 5 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/my_library/widgets/row_stars.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class RowStars extends StatelessWidget { 4 | const RowStars({ 5 | super.key, 6 | this.stars, 7 | this.size, 8 | this.color = Colors.cyan, 9 | }); 10 | 11 | final double? stars; 12 | final double? size; 13 | final Color color; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | final colorStars = color; 18 | final fillStar = Padding( 19 | padding: const EdgeInsets.only(right: 1), 20 | child: Icon(Icons.star, color: colorStars, size: size), 21 | ); 22 | 23 | final halfStar = Padding( 24 | padding: const EdgeInsets.only(right: 1), 25 | child: Icon(Icons.star_half, color: colorStars, size: size), 26 | ); 27 | 28 | final voidStar = Padding( 29 | padding: const EdgeInsets.only(right: 1), 30 | child: Icon(Icons.star, color: Colors.grey[300], size: size), 31 | ); 32 | 33 | var fillStars = stars!.floor(); 34 | final addHalfStar = (stars! - fillStars) >= 0.5; 35 | final listStars = List.generate(fillStars, (i) => fillStar); 36 | if (addHalfStar) { 37 | listStars.add(halfStar); 38 | fillStars++; 39 | } 40 | listStars.addAll(List.generate(5 - fillStars, (i) => voidStar)); 41 | return Row(children: listStars); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/my_library/widgets/song_play_footer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/music_vinyl_player/models/song.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class SongPlayFooter extends StatelessWidget { 6 | const SongPlayFooter({ 7 | super.key, 8 | required this.song, 9 | }); 10 | 11 | final Song song; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Row( 16 | children: [ 17 | SizedBox( 18 | height: 50, 19 | width: 50, 20 | child: Stack( 21 | fit: StackFit.expand, 22 | children: [ 23 | CircleAvatar( 24 | backgroundColor: Colors.white, 25 | backgroundImage: AssetImage(song.album.pathImage!), 26 | ), 27 | const CircularProgressIndicator( 28 | value: .7, 29 | strokeWidth: 5, 30 | backgroundColor: Colors.white, 31 | valueColor: AlwaysStoppedAnimation(Color(0xffd4af90)), 32 | ), 33 | ], 34 | ), 35 | ), 36 | const SizedBox(width: 20), 37 | Column( 38 | crossAxisAlignment: CrossAxisAlignment.start, 39 | children: [ 40 | Text( 41 | song.album.author!, 42 | style: GoogleFonts.poppins(fontWeight: FontWeight.w500), 43 | ), 44 | Text( 45 | 'Anonimo', 46 | style: GoogleFonts.poppins( 47 | fontWeight: FontWeight.w500, 48 | color: Colors.grey, 49 | fontSize: 15, 50 | height: 1.5, 51 | ), 52 | ), 53 | ], 54 | ), 55 | const Spacer(), 56 | IconButton( 57 | onPressed: () {}, 58 | iconSize: 38, 59 | color: Colors.grey[700], 60 | icon: const Icon( 61 | Icons.play_circle_outline, 62 | ), 63 | ), 64 | IconButton( 65 | onPressed: () {}, 66 | iconSize: 38, 67 | color: Colors.grey[700], 68 | icon: const Icon( 69 | Icons.playlist_play, 70 | ), 71 | ), 72 | ], 73 | ); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/song_player/widgets/now_playing_app_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class NowPlayingAppBar extends StatelessWidget { 5 | const NowPlayingAppBar({ 6 | super.key, 7 | }); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | padding: const EdgeInsets.only(bottom: 10), 13 | decoration: BoxDecoration( 14 | color: Colors.grey[100], 15 | borderRadius: const BorderRadius.only( 16 | bottomRight: Radius.circular(60), 17 | ), 18 | ), 19 | child: SafeArea( 20 | child: Row( 21 | children: [ 22 | const BackButton(), 23 | const Spacer(), 24 | Text( 25 | 'NOW PLAYING', 26 | style: GoogleFonts.poppins( 27 | color: Colors.grey, 28 | fontWeight: FontWeight.w500, 29 | fontSize: 20, 30 | letterSpacing: 3, 31 | ), 32 | ), 33 | const Spacer(), 34 | ], 35 | ), 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/song_player/widgets/player_controls.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class PlayerControls extends StatelessWidget { 4 | const PlayerControls({ 5 | super.key, 6 | required this.onPausePlay, 7 | required this.isPlaying, 8 | }); 9 | 10 | final VoidCallback onPausePlay; 11 | final bool isPlaying; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Stack( 16 | alignment: Alignment.center, 17 | children: [ 18 | Container( 19 | width: MediaQuery.of(context).size.width * .7, 20 | decoration: BoxDecoration( 21 | color: Colors.white, 22 | boxShadow: const [ 23 | BoxShadow( 24 | color: Colors.black12, 25 | blurRadius: 40, 26 | offset: Offset(0, 30), 27 | ) 28 | ], 29 | borderRadius: BorderRadius.circular(30), 30 | ), 31 | padding: const EdgeInsets.symmetric(horizontal: 10), 32 | child: Row( 33 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 34 | children: [ 35 | IconButton( 36 | onPressed: () {}, 37 | iconSize: 38, 38 | color: const Color(0xffd4af70), 39 | icon: const Icon(Icons.skip_previous), 40 | ), 41 | IconButton( 42 | onPressed: () {}, 43 | iconSize: 38, 44 | color: const Color(0xffd4af70), 45 | icon: const Icon(Icons.skip_next), 46 | ), 47 | ], 48 | ), 49 | ), 50 | InkWell( 51 | onTap: onPausePlay, 52 | borderRadius: BorderRadius.circular(45), 53 | child: CircleAvatar( 54 | backgroundColor: const Color(0xffd4af70), 55 | radius: 42, 56 | foregroundColor: Colors.white, 57 | child: Icon( 58 | isPlaying ? Icons.pause : Icons.play_arrow, 59 | size: 60, 60 | ), 61 | ), 62 | ) 63 | ], 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/song_player/widgets/song_player_widgets.dart: -------------------------------------------------------------------------------- 1 | export 'package:flutter_projects/projects/music_vinyl_player/ui/song_player/widgets/now_playing_app_bar.dart'; 2 | export 'package:flutter_projects/projects/music_vinyl_player/ui/song_player/widgets/player_controls.dart'; 3 | export 'package:flutter_projects/projects/music_vinyl_player/ui/song_player/widgets/player_indicator.dart'; 4 | export 'package:flutter_projects/projects/music_vinyl_player/ui/widgets/vinyl_disk.dart'; 5 | -------------------------------------------------------------------------------- /lib/projects/music_vinyl_player/ui/widgets/vinyl_disk.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class VinylDisk extends StatelessWidget { 4 | const VinylDisk({ 5 | super.key, 6 | required this.albumImagePath, 7 | required this.heightDisk, 8 | }); 9 | 10 | final String? albumImagePath; 11 | final double? heightDisk; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Stack( 16 | alignment: Alignment.center, 17 | children: [ 18 | Image.asset( 19 | 'assets/img/music/vinyl.png', 20 | height: heightDisk, 21 | ), 22 | ClipRRect( 23 | borderRadius: BorderRadius.circular(heightDisk! * .3), 24 | child: Image.asset(albumImagePath!, height: heightDisk! * .3), 25 | ) 26 | ], 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/projects/orix_gaming/models/video_game.dart: -------------------------------------------------------------------------------- 1 | class VideoGame { 2 | const VideoGame({ 3 | this.title, 4 | this.srcImage, 5 | this.nowPlaying, 6 | this.genre, 7 | }); 8 | 9 | final String? title; 10 | final String? srcImage; 11 | final int? nowPlaying; 12 | final String? genre; 13 | 14 | 15 | static const mainGame = VideoGame( 16 | title: 'League of Legends', 17 | genre: 'MOBA', 18 | nowPlaying: 12310, 19 | srcImage: 'assets/img/gaming/lol.jpg', 20 | ); 21 | 22 | static const videoGames = [ 23 | VideoGame( 24 | title: 'Animal Crossing', 25 | genre: 'Simulation', 26 | nowPlaying: 1230, 27 | srcImage: 'assets/img/gaming/animal_crossing.jpg', 28 | ), 29 | VideoGame( 30 | title: 'COD Warzone', 31 | genre: 'Shooter FPS', 32 | nowPlaying: 1939, 33 | srcImage: 'assets/img/gaming/codwarzone.jpg', 34 | ), 35 | VideoGame( 36 | title: 'Crash Bandicoot 4', 37 | genre: 'Adventure', 38 | nowPlaying: 1239, 39 | srcImage: 'assets/img/gaming/crash_bandicoot_4.jpg', 40 | ), 41 | VideoGame( 42 | title: 'Cyberpunk 2077', 43 | genre: 'ARPG', 44 | nowPlaying: 1199, 45 | srcImage: 'assets/img/gaming/cyberpunk2077.jpg', 46 | ), 47 | VideoGame( 48 | title: 'Doom Eternal', 49 | genre: 'Shooter FPS', 50 | nowPlaying: 1002, 51 | srcImage: 'assets/img/gaming/doom_eternal.jpg', 52 | ), 53 | VideoGame( 54 | title: 'Fall Guys', 55 | genre: 'Battle Royale', 56 | nowPlaying: 3919, 57 | srcImage: 'assets/img/gaming/fall_guys.jpg', 58 | ), 59 | VideoGame( 60 | title: 'Ori and the Will of the Wisps', 61 | genre: 'Platforms', 62 | nowPlaying: 1002, 63 | srcImage: 'assets/img/gaming/ori.jpg', 64 | ), 65 | VideoGame( 66 | title: 'Spiderman The Game', 67 | genre: 'Action', 68 | nowPlaying: 2100, 69 | srcImage: 'assets/img/gaming/spiderman.jpg', 70 | ), 71 | VideoGame( 72 | title: 'Valorant', 73 | genre: 'Shooter FPS', 74 | nowPlaying: 1000, 75 | srcImage: 'assets/img/gaming/valorant.jpg', 76 | ), 77 | ]; 78 | 79 | } 80 | -------------------------------------------------------------------------------- /lib/projects/orix_gaming/ui/widgets/rounded_icon_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class RoundedIconButton extends StatelessWidget { 5 | const RoundedIconButton({ 6 | super.key, 7 | required this.iconData, 8 | required this.label, 9 | required this.onPressed, 10 | }); 11 | 12 | final IconData iconData; 13 | final String label; 14 | final VoidCallback onPressed; 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return TextButton.icon( 19 | style: TextButton.styleFrom( 20 | foregroundColor: Colors.black, 21 | shape: StadiumBorder( 22 | side: BorderSide(color: Colors.grey[200]!, width: 1.5), 23 | ), 24 | padding: const EdgeInsets.fromLTRB(5, 5, 8, 5), 25 | ), 26 | onPressed: onPressed, 27 | icon: Container( 28 | padding: const EdgeInsets.all(6), 29 | decoration: BoxDecoration( 30 | gradient: LinearGradient( 31 | colors: [ 32 | Theme.of(context).primaryColorLight, 33 | Theme.of(context).primaryColorDark, 34 | ], 35 | ), 36 | shape: BoxShape.circle, 37 | ), 38 | child: Icon( 39 | iconData, 40 | color: Colors.white, 41 | ), 42 | ), 43 | label: Text( 44 | label, 45 | softWrap: false, 46 | style: GoogleFonts.poppins( 47 | fontSize: 18, 48 | fontWeight: FontWeight.w500, 49 | ), 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/projects/orix_gaming/ui/widgets/user_avatar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class UserAvatar extends StatelessWidget { 4 | const UserAvatar({ 5 | super.key, 6 | }); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return SizedBox( 11 | width: 55, 12 | height: 55, 13 | child: Stack( 14 | children: [ 15 | Container( 16 | margin: const EdgeInsets.fromLTRB(5, 10, 5, 0), 17 | decoration: BoxDecoration( 18 | color: Colors.lightBlueAccent[100], 19 | borderRadius: BorderRadius.circular(10),), 20 | ), 21 | Image.asset('assets/img/gaming/boy.png') 22 | ], 23 | ), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/projects/photographers_app/models/post.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_projects/projects/photographers_app/models/users.dart'; 2 | 3 | class PhotoPost { 4 | PhotoPost({ 5 | this.photoPost, 6 | this.comments, 7 | this.likes, 8 | this.isLiked, 9 | this.user, 10 | }); 11 | 12 | final String? photoPost; 13 | int? comments; 14 | int? likes; 15 | bool? isLiked; 16 | final PhotoUser? user; 17 | 18 | static final listHomePost = [ 19 | PhotoPost( 20 | user: PhotoUser.kevin, 21 | likes: 1220, 22 | comments: 229, 23 | isLiked: false, 24 | photoPost: PhotoUser.kevin.listPhotosUrl!.first, 25 | ), 26 | PhotoPost( 27 | user: PhotoUser.maria, 28 | likes: 1220, 29 | comments: 229, 30 | isLiked: false, 31 | photoPost: PhotoUser.maria.listPhotosUrl!.first, 32 | ), 33 | PhotoPost( 34 | user: PhotoUser.liliana, 35 | likes: 1220, 36 | comments: 229, 37 | isLiked: false, 38 | photoPost: PhotoUser.liliana.listPhotosUrl!.first, 39 | ), 40 | PhotoPost( 41 | user: PhotoUser.eduard, 42 | likes: 1220, 43 | comments: 229, 44 | isLiked: false, 45 | photoPost: PhotoUser.eduard.listPhotosUrl!.first, 46 | ), 47 | PhotoPost( 48 | user: PhotoUser.kevin, 49 | likes: 1220, 50 | comments: 229, 51 | isLiked: false, 52 | photoPost: PhotoUser.kevin.listPhotosUrl![1], 53 | ), 54 | ]; 55 | } 56 | -------------------------------------------------------------------------------- /lib/projects/photographers_app/theme/photo_app_colors.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class PhotoAppColors { 4 | static const kGrey = Color(0xffB0ABAB); 5 | static const kDarkBlue = Color(0xff3B3E49); 6 | static const kGreen = Color(0xff3Bd679); 7 | } 8 | -------------------------------------------------------------------------------- /lib/projects/photographers_app/ui/home/widgets/image_user_container.dart: -------------------------------------------------------------------------------- 1 | import 'package:cached_network_image/cached_network_image.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_projects/projects/photographers_app/models/users.dart'; 4 | import 'package:flutter_projects/projects/photographers_app/theme/photo_app_colors.dart'; 5 | 6 | class PhotoUserCard extends StatelessWidget { 7 | const PhotoUserCard({ 8 | super.key, 9 | required this.user, 10 | this.size = 100.0, 11 | this.onTap, 12 | }); 13 | 14 | final PhotoUser user; 15 | final double size; 16 | final VoidCallback? onTap; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return InkWell( 21 | onTap: onTap ?? () {}, 22 | splashColor: Colors.transparent, 23 | highlightColor: Colors.transparent, 24 | child: Padding( 25 | padding: const EdgeInsets.only(right: 30), 26 | child: Column( 27 | children: [ 28 | Container( 29 | height: size, 30 | width: size, 31 | decoration: BoxDecoration( 32 | color: Colors.white, 33 | boxShadow: [ 34 | BoxShadow( 35 | color: Colors.grey.shade300, 36 | blurRadius: 20, 37 | offset: const Offset(-10, 10),) 38 | ], 39 | borderRadius: BorderRadius.circular(size * .35), 40 | image: DecorationImage( 41 | image: CachedNetworkImageProvider(user.photoUrl!), 42 | fit: BoxFit.cover,),), 43 | ), 44 | const SizedBox(height: 10), 45 | FittedBox( 46 | child: Text( 47 | user.name!, 48 | style: const TextStyle( 49 | fontSize: 16, 50 | fontWeight: FontWeight.bold, 51 | color: PhotoAppColors.kDarkBlue, 52 | ), 53 | ), 54 | ), 55 | ], 56 | ), 57 | ), 58 | ); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /lib/projects/photographers_app/ui/widgets/tile_clipper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TileClipper extends CustomClipper { 4 | TileClipper({this.inverted = false, this.curveSize = 30}); 5 | 6 | final bool inverted; 7 | final double curveSize; 8 | 9 | @override 10 | Path getClip(Size size) { 11 | final path = Path(); 12 | if (inverted) { 13 | path 14 | ..moveTo(0, curveSize) 15 | ..quadraticBezierTo(size.width * .5, 0, size.width, curveSize) 16 | ..lineTo(size.width, size.height - curveSize) 17 | ..quadraticBezierTo(size.width * .5, size.height - (curveSize * 2), 0, 18 | size.height - curveSize,); 19 | } else { 20 | path 21 | ..moveTo(0, curveSize + 3) 22 | ..quadraticBezierTo( 23 | size.width * .5, curveSize * 2, size.width, curveSize + 3,) 24 | ..lineTo(size.width, size.height - curveSize + 3) 25 | ..quadraticBezierTo(size.width * .5, size.height + curveSize, 0, 26 | size.height - curveSize + 3,); 27 | } 28 | return path; 29 | } 30 | 31 | @override 32 | bool shouldReclip(covariant CustomClipper oldClipper) => false; 33 | } 34 | -------------------------------------------------------------------------------- /lib/projects/photographers_app/ui/widgets/tile_skew_clipper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TileSkewClipper extends CustomClipper { 4 | TileSkewClipper({required this.inverted, this.curveSize = 35.0}); 5 | 6 | final bool inverted; 7 | final double curveSize; 8 | 9 | @override 10 | Path getClip(Size size) { 11 | final path = Path(); 12 | if (inverted) { 13 | path 14 | ..quadraticBezierTo(size.width * .5, curveSize, size.width, curveSize) 15 | ..lineTo(size.width, size.height) 16 | ..quadraticBezierTo( 17 | size.width * .5, 18 | size.height, 19 | 0, 20 | size.height - curveSize, 21 | ); 22 | } else { 23 | path 24 | ..moveTo(0, curveSize) 25 | ..quadraticBezierTo(size.width * .5, curveSize, size.width, 0) 26 | ..lineTo(size.width, size.height - curveSize) 27 | ..quadraticBezierTo(size.width * .5, size.height, 0, size.height); 28 | } 29 | return path; 30 | } 31 | 32 | @override 33 | bool shouldReclip(covariant CustomClipper oldClipper) => true; 34 | } 35 | -------------------------------------------------------------------------------- /lib/projects/superheroes/superheroes_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/superheroes/ui/superhero_slider_page.dart'; 3 | import 'package:google_fonts/google_fonts.dart'; 4 | 5 | class SuperheroesApp extends StatelessWidget { 6 | const SuperheroesApp({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | theme: ThemeData( 12 | primaryColor: Colors.white, 13 | scaffoldBackgroundColor: Colors.white, 14 | appBarTheme: AppBarTheme( 15 | backgroundColor: Colors.white, 16 | iconTheme: const IconThemeData(color: Colors.black), 17 | titleTextStyle: GoogleFonts.leagueSpartan( 18 | fontSize: 22, 19 | fontWeight: FontWeight.w600, 20 | color: Colors.black, 21 | ), 22 | ), 23 | textTheme: TextTheme( 24 | headline2: GoogleFonts.leagueSpartan( 25 | fontWeight: FontWeight.w600, 26 | letterSpacing: -3, 27 | height: 0.9, 28 | fontSize: 64, 29 | ), 30 | headline5: GoogleFonts.leagueSpartan( 31 | letterSpacing: -1, 32 | fontWeight: FontWeight.w500, 33 | ), 34 | ).apply( 35 | displayColor: Colors.white, 36 | bodyColor: Colors.white, 37 | ), 38 | ), 39 | home: const SuperheroSliderPage(), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/projects/template_gallery/template_gallery_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/template_gallery/ui/contact_list_page.dart'; 3 | 4 | class TemplateGalleryApp extends StatelessWidget { 5 | const TemplateGalleryApp({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return MaterialApp( 10 | theme: ThemeData.dark().copyWith( 11 | scaffoldBackgroundColor: const Color(0xff23202a), 12 | appBarTheme: AppBarTheme( 13 | color: Colors.deepPurple[400], 14 | centerTitle: true, 15 | iconTheme: const IconThemeData( 16 | color: Colors.white70, 17 | ), 18 | ), 19 | textTheme: TextTheme( 20 | bodyText2: TextStyle(color: Colors.grey[800]), 21 | ), 22 | iconTheme: const IconThemeData(color: Colors.grey), 23 | ), 24 | home: const ContactListPage(), 25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/projects/template_gallery/ui/contact_detail_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/template_gallery/models/contact.dart'; 3 | import 'package:flutter_projects/projects/template_gallery/ui/widgets/cards.dart'; 4 | 5 | class ContactDetailScreen extends StatelessWidget { 6 | const ContactDetailScreen({ 7 | super.key, 8 | required this.contact, 9 | required this.color, 10 | }); 11 | 12 | final Contact contact; 13 | final Color color; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Scaffold( 18 | appBar: AppBar( 19 | title: Text(contact.name), 20 | ), 21 | body: Padding( 22 | padding: const EdgeInsets.all(20), 23 | child: SafeArea( 24 | child: ContactCard( 25 | contact: contact, 26 | borderColor: color, 27 | ), 28 | ), 29 | ), 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/projects/travel_app/extensions/text_theme_x.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | extension TextThemeStylesX on BuildContext { 4 | TextStyle get bodyText1 => Theme.of(this).textTheme.bodyText1!; 5 | 6 | TextStyle get bodyText2 => Theme.of(this).textTheme.bodyText2!; 7 | 8 | TextStyle get subtitle1 => Theme.of(this).textTheme.subtitle1!; 9 | 10 | TextStyle get subtitle2 => Theme.of(this).textTheme.subtitle2!; 11 | 12 | TextStyle get headline1 => Theme.of(this).textTheme.headline1!; 13 | 14 | TextStyle get headline2 => Theme.of(this).textTheme.headline2!; 15 | 16 | TextStyle get headline3 => Theme.of(this).textTheme.headline3!; 17 | 18 | TextStyle get headline4 => Theme.of(this).textTheme.headline4!; 19 | 20 | TextStyle get headline5 => Theme.of(this).textTheme.headline5!; 21 | 22 | TextStyle get headline6 => Theme.of(this).textTheme.headline6!; 23 | } 24 | -------------------------------------------------------------------------------- /lib/projects/travel_app/travel_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/travel_app/theme/theme.dart'; 3 | import 'package:flutter_projects/projects/travel_app/ui/feed/feed_screen.dart'; 4 | 5 | class TravelApp extends StatelessWidget { 6 | const TravelApp({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return MaterialApp( 11 | theme: TravelTheme.theme, 12 | home: const FeedScreen(), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/projects/travel_app/ui/feed/widgets/travel_navigation_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TravelNavigationBar extends StatelessWidget { 4 | const TravelNavigationBar({ 5 | super.key, 6 | required this.items, 7 | required this.onTap, 8 | this.currentIndex = 0, 9 | }) : assert(items.length == 2, ''); 10 | 11 | final List items; 12 | final ValueChanged onTap; 13 | final int currentIndex; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return CustomPaint( 18 | painter: _NavPainter(), 19 | child: SizedBox( 20 | height: kToolbarHeight + MediaQuery.of(context).padding.bottom, 21 | child: Row( 22 | children: List.generate( 23 | items.length, 24 | (index) => Expanded( 25 | child: Icon( 26 | currentIndex == index 27 | ? items[index].selectedIcon 28 | : items[index].icon, 29 | color: currentIndex == index 30 | ? Theme.of(context).primaryColor 31 | : null, 32 | ), 33 | ), 34 | )..insert(1, const Spacer()), 35 | ), 36 | ), 37 | ); 38 | } 39 | } 40 | 41 | class TravelNavigationBarItem { 42 | TravelNavigationBarItem({ 43 | required this.icon, 44 | required this.selectedIcon, 45 | }); 46 | 47 | final IconData icon; 48 | final IconData selectedIcon; 49 | } 50 | 51 | class _NavPainter extends CustomPainter { 52 | @override 53 | void paint(Canvas canvas, Size size) { 54 | final w = size.width; 55 | final h = size.height; 56 | final h5 = h * .55; 57 | final w5 = w * .5; 58 | final h6 = h * .6; 59 | 60 | final path = Path() 61 | ..lineTo(w5 - 75, 0) 62 | ..cubicTo((w5 - 50), 0, (w5 - 35), h5, w5, h6) 63 | ..cubicTo((w5 + 35), h5, (w5 + 50), 0, (w5 + 75), 0) 64 | ..lineTo(w, 0) 65 | ..lineTo(w, h) 66 | ..lineTo(0, h); 67 | 68 | canvas.drawShadow(path, Colors.black26, 10, false); 69 | canvas.drawPath(path, Paint()..color = Colors.white); 70 | } 71 | 72 | @override 73 | bool shouldRepaint(covariant CustomPainter oldDelegate) => false; 74 | } 75 | -------------------------------------------------------------------------------- /lib/projects/travel_app/ui/widgets/gradient_status_tag.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_projects/projects/travel_app/extensions/text_theme_x.dart'; 3 | import 'package:flutter_projects/projects/travel_app/models/place.dart'; 4 | 5 | class GradientStatusTag extends StatelessWidget { 6 | const GradientStatusTag({ 7 | super.key, 8 | required this.statusTag, 9 | }); 10 | 11 | final StatusTag statusTag; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | String text; 16 | List colors; 17 | switch (statusTag) { 18 | case StatusTag.popular: 19 | text = 'Popular places'; 20 | colors = [Colors.amber, Colors.orange.shade600]; 21 | break; 22 | case StatusTag.event: 23 | text = 'Event'; 24 | colors = [Colors.cyan, Colors.blue.shade600]; 25 | break; 26 | } 27 | return Container( 28 | padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 20), 29 | decoration: BoxDecoration( 30 | borderRadius: BorderRadius.circular(10), 31 | gradient: LinearGradient( 32 | colors: colors, 33 | ), 34 | ), 35 | child: Text( 36 | text, 37 | style: context.subtitle1.copyWith(color: Colors.white), 38 | ), 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/projects/travel_app/ui/widgets/translate_animation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TranslateAnimation extends StatelessWidget { 4 | const TranslateAnimation({super.key, required this.child}); 5 | 6 | final Widget child; 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return TweenAnimationBuilder( 11 | tween: Tween(begin: 1, end: 0), 12 | duration: const Duration(milliseconds: 600), 13 | curve: Curves.easeInOutBack, 14 | builder: (context, value, child) { 15 | return Transform.translate( 16 | offset: Offset(0, 100 * value), 17 | child: child, 18 | ); 19 | }, 20 | child: child, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_projects 2 | description: Flutter apps with amazing design and moderate animations 3 | version: 1.0.0+1 4 | 5 | environment: 6 | sdk: '>=2.17.5 <3.0.0' 7 | flutter: 3.7.11 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | 13 | cupertino_icons: ^1.0.5 14 | cached_network_image: ^3.2.1 15 | google_fonts: ^4.0.4 16 | flutter_vector_icons: ^1.0.0 17 | flutter_staggered_grid_view: ^0.4.1 18 | flutter_svg: ^1.1.1+1 19 | vector_math: ^2.1.2 20 | 21 | 22 | dev_dependencies: 23 | flutter_test: 24 | sdk: flutter 25 | flutter_lints: ^2.0.1 26 | flutter_launcher_icons: ^0.9.3 27 | flutter: 28 | 29 | uses-material-design: true 30 | 31 | assets: 32 | - assets/img/ 33 | - assets/img/findout/ 34 | - assets/img/streaming/ 35 | - assets/img/movie/ 36 | - assets/img/music/ 37 | - assets/img/superheroes/ 38 | - assets/img/instagram/ 39 | - assets/img/gaming/ 40 | - assets/svg/instagram/ 41 | - assets/svg/medical/ 42 | - assets/svg/streaming/ 43 | - assets/img/books/ 44 | - assets/img/projects/ 45 | - assets/img/boats/ 46 | fonts: 47 | - family: MDIcons 48 | fonts: 49 | - asset: assets/icons/md_icons/MdIcons.ttf 50 | 51 | flutter_icons: 52 | ios: true 53 | remove_alpha_ios: true 54 | image_path: "assets/icons/icon.png" --------------------------------------------------------------------------------