├── .gitignore ├── .metadata ├── .vscode └── launch.json ├── README.md ├── analysis_options.yaml ├── analysis_options.yml ├── assets ├── fonts │ ├── NotoSans-Bold.ttf │ ├── Roboto-Bold.ttf │ ├── Roboto-Medium.ttf │ └── Roboto-Regular.ttf ├── images │ ├── background │ │ ├── bg.png │ │ └── flutterando_logo.png │ ├── box_n_likes.png │ ├── brazilian_cases │ │ ├── bancoBs2.jpg │ │ ├── banco_bs2.png │ │ ├── celcoin.png │ │ ├── globo.jpg │ │ ├── globo.png │ │ ├── ifood.png │ │ ├── nubank.jpg │ │ ├── nubank.png │ │ ├── quintoAndar.png │ │ └── suaMusica.png │ ├── co_organizers │ │ ├── adby_circle.png │ │ ├── alvaro_circle.png │ │ ├── deivinho_circle.png │ │ ├── fausto_circle.png │ │ ├── gabriela.png │ │ ├── ian_circle.png │ │ ├── jeh2_circle.png │ │ ├── kelven_galvao.png │ │ ├── leticia_circle.png │ │ ├── mateus_felipe_circle.png │ │ ├── max.png │ │ ├── renato_mota_circle.png │ │ ├── stell_circle.png │ │ ├── taua.png │ │ ├── tiagosito.png │ │ └── toshi_circle.png │ ├── founders │ │ ├── bwolf_circle.png │ │ ├── david_araujo_circle.png │ │ ├── jacob_circle.png │ │ └── mateus_perez_circle.png │ ├── icons │ │ └── svgs │ │ │ ├── discord.svg │ │ │ ├── facebook.svg │ │ │ ├── instagram.svg │ │ │ ├── linkedin.svg │ │ │ ├── medium.svg │ │ │ ├── meetup.svg │ │ │ ├── package.png │ │ │ ├── package.svg │ │ │ ├── telegram.svg │ │ │ ├── twitter.svg │ │ │ └── youtube.svg │ ├── last videos │ │ ├── context.jpg │ │ ├── dart.jpg │ │ ├── designPatter.jpg │ │ ├── ffi.jpg │ │ ├── flutter.jpg │ │ ├── jacob.jpg │ │ ├── jacob2.jpg │ │ ├── jacob3.jpg │ │ ├── jacob4.jpg │ │ ├── jacob_experiencia.jpg │ │ ├── realidade_aumentada.jpg │ │ └── valuenotifier.jpg │ ├── logo-horizontal-big.png │ ├── logo-horizontal.png │ ├── logo-symbol.png │ ├── meetups │ │ ├── arquitetura_boas_praticas.jpeg │ │ ├── async_await.jpeg │ │ ├── codigo_aberto.jpeg │ │ ├── ddd_com_modular.jpeg │ │ ├── flutter_brasil.png │ │ ├── latam.jpeg │ │ ├── latam_2_edicao.jpeg │ │ ├── modular_slidy.jpg │ │ └── value_notifier.png │ ├── packages │ │ ├── asuka.svg │ │ ├── flutter_modular.svg │ │ ├── flutter_triple.svg │ │ ├── flutterando_analysis.svg │ │ ├── hasura_connect.svg │ │ ├── koin.svg │ │ ├── slidy.svg │ │ └── uno.svg │ └── partners │ │ ├── adventista.png │ │ ├── f-team-logo--branco.png │ │ ├── fteam_icon.png │ │ ├── google_startups.png │ │ ├── pupz.png │ │ └── quem_contrata.png └── lang │ ├── en_US.json │ └── pt_BR.json ├── data ├── brazilian_cases_data.json ├── coorganizers_data.json ├── followers_number.json ├── founders_data.json ├── meetups_data.json ├── packages_data.json ├── partner_communities.json ├── partners_data.json └── youtube_data.json ├── lib ├── app │ ├── app_module.dart │ ├── app_widget.dart │ ├── modules │ │ └── home │ │ │ ├── domain │ │ │ ├── entities │ │ │ │ ├── result_brazilian_cases.dart │ │ │ │ ├── result_co_organizers.dart │ │ │ │ ├── result_followers_numbers.dart │ │ │ │ ├── result_founders.dart │ │ │ │ ├── result_insta_followers.dart │ │ │ │ ├── result_meetups.dart │ │ │ │ ├── result_package.dart │ │ │ │ ├── result_partner_communities.dart │ │ │ │ ├── result_partners.dart │ │ │ │ ├── result_youtube.dart │ │ │ │ └── send_contact │ │ │ │ │ ├── contact.dart │ │ │ │ │ └── result_contact.dart │ │ │ ├── errors │ │ │ │ ├── errors.dart │ │ │ │ ├── errors_send_contact.dart │ │ │ │ └── get_insta_followers_error.dart │ │ │ ├── repositories │ │ │ │ ├── brazilian_cases_repository.dart │ │ │ │ ├── co_organizers_repository.dart │ │ │ │ ├── founders_repository.dart │ │ │ │ ├── insta_followers_repository.dart │ │ │ │ ├── meetups_repository.dart │ │ │ │ ├── packages_repository.dart │ │ │ │ ├── partner_communities_repository.dart │ │ │ │ ├── partners_repository.dart │ │ │ │ ├── send_contact_repository.dart │ │ │ │ └── youtube_repository.dart │ │ │ └── usecases │ │ │ │ ├── get_brazilian_cases.dart │ │ │ │ ├── get_co_organizers.dart │ │ │ │ ├── get_follower_numbers.dart │ │ │ │ ├── get_founders.dart │ │ │ │ ├── get_insta_followers.dart │ │ │ │ ├── get_meetups.dart │ │ │ │ ├── get_packages.dart │ │ │ │ ├── get_partner_communities.dart │ │ │ │ ├── get_partners.dart │ │ │ │ ├── get_youtube.dart │ │ │ │ └── send_contact.dart │ │ │ ├── external │ │ │ ├── datasources │ │ │ │ ├── brazilian_cases_remote_datasource.dart │ │ │ │ ├── co_organizers_remote_datasource.dart │ │ │ │ ├── founders_remote_datasource.dart │ │ │ │ ├── insta_followers_datasource.dart │ │ │ │ ├── meetups_remote_datasource.dart │ │ │ │ ├── packages_remote_datasource.dart │ │ │ │ ├── partner_communities_remote_datasource.dart │ │ │ │ ├── partners_remote_datasource.dart │ │ │ │ ├── send_contact_server_datasource.dart │ │ │ │ └── youtube_remote_datasource.dart │ │ │ └── mappers │ │ │ │ ├── contact_mapper.dart │ │ │ │ ├── partner_communities_mapper.dart │ │ │ │ ├── result_brazilian_cases_mapper.dart │ │ │ │ ├── result_co_organizers_mapper.dart │ │ │ │ ├── result_founders_mapper.dart │ │ │ │ ├── result_insta_followers_mapper.dart │ │ │ │ ├── result_meetups_mapper.dart │ │ │ │ ├── result_packages_mapper.dart │ │ │ │ ├── result_partners_mapper.dart │ │ │ │ └── result_youtube_mapper.dart │ │ │ ├── home_controller.dart │ │ │ ├── home_module.dart │ │ │ ├── home_page.dart │ │ │ ├── infra │ │ │ ├── datasources │ │ │ │ ├── brazilian_cases_datasource.dart │ │ │ │ ├── co_organizers_datasource.dart │ │ │ │ ├── founders_datasource.dart │ │ │ │ ├── insta_followers_datasource.dart │ │ │ │ ├── meetups_datasource.dart │ │ │ │ ├── packages_datasource.dart │ │ │ │ ├── partner_communities_datasource.dart │ │ │ │ ├── partners_datasource.dart │ │ │ │ ├── send_contact_datasource.dart │ │ │ │ └── youtube_datasource.dart │ │ │ └── repositories │ │ │ │ ├── brazilian_cases_repository_impl.dart │ │ │ │ ├── co_organizers_repository_impl.dart │ │ │ │ ├── founders_repository_impl.dart │ │ │ │ ├── insta_followers_repository_impl.dart │ │ │ │ ├── meetups_repository_impl.dart │ │ │ │ ├── packages_repository_impl.dart │ │ │ │ ├── partner_communities_repository.impl.dart │ │ │ │ ├── partners_repository_impl.dart │ │ │ │ ├── send_contact_repository_impl.dart │ │ │ │ └── youtube_repository_impl.dart │ │ │ └── widgets │ │ │ ├── brazilian_cases │ │ │ ├── brazilian_cases_controller.dart │ │ │ ├── brazilian_cases_widget.dart │ │ │ └── widgets │ │ │ │ └── brazilian_case_item.dart │ │ │ ├── co_organizers │ │ │ ├── co_organizers_store.dart │ │ │ ├── co_organizers_widget.dart │ │ │ └── widgets │ │ │ │ └── co_organizer_item.dart │ │ │ ├── footer │ │ │ ├── contact_form │ │ │ │ ├── contact_form.dart │ │ │ │ └── widgets │ │ │ │ │ ├── contact_field.dart │ │ │ │ │ └── send_button.dart │ │ │ ├── follow_us │ │ │ │ ├── follow_us.dart │ │ │ │ └── widgets │ │ │ │ │ └── social_networks.dart │ │ │ ├── footer.dart │ │ │ └── footer_controller.dart │ │ │ ├── founders │ │ │ ├── founders_store.dart │ │ │ ├── founders_widget.dart │ │ │ └── widgets │ │ │ │ └── founder_item.dart │ │ │ ├── header │ │ │ ├── header_store.dart │ │ │ ├── header_widget.dart │ │ │ └── widgets │ │ │ │ └── header_social_media.dart │ │ │ ├── latest_channel_videos │ │ │ ├── latest_channel_videos_store.dart │ │ │ ├── latest_channel_videos_widget.dart │ │ │ └── widgets │ │ │ │ └── channel_video_tile.dart │ │ │ ├── latest_meetups │ │ │ ├── latest_meetups_store.dart │ │ │ ├── latest_meetups_widget.dart │ │ │ └── widgets │ │ │ │ └── meetup_tile.dart │ │ │ ├── navbar │ │ │ ├── navbar_controller.dart │ │ │ └── navbar_widget.dart │ │ │ ├── packages │ │ │ ├── packages_store.dart │ │ │ ├── packages_widget.dart │ │ │ └── widgets │ │ │ │ ├── add_package.dart │ │ │ │ └── package_tile.dart │ │ │ ├── partner_communities │ │ │ ├── partner_communities_controller.dart │ │ │ ├── partner_communities_widget.dart │ │ │ └── widgets │ │ │ │ └── partner_communities_item.dart │ │ │ └── partners │ │ │ ├── partners_store.dart │ │ │ ├── partners_widget.dart │ │ │ └── widgets │ │ │ └── partner_logo.dart │ ├── shared_module.dart │ └── utils │ │ ├── colors │ │ └── colors.dart │ │ ├── errors │ │ └── http_error.dart │ │ ├── grids │ │ ├── custom_scroll_behavior.dart │ │ └── number_grid_row_items_by_screen_size.dart │ │ ├── icons │ │ └── icons.dart │ │ ├── images │ │ └── images.dart │ │ ├── screen │ │ └── screen_size.dart │ │ ├── service │ │ └── http_service.dart │ │ ├── text_styles │ │ └── text_styles.dart │ │ ├── url_launcher │ │ └── urls.dart │ │ ├── validations │ │ └── validations.dart │ │ └── widgets │ │ ├── alert │ │ ├── alert.dart │ │ └── alert_animate.dart │ │ └── scroll_bar │ │ └── scroll_bar_widget.dart └── main.dart ├── pubspec.lock ├── pubspec.yaml ├── test ├── app │ ├── app_controller_test.dart │ ├── mock │ │ ├── brazilian_cases_data_mock.dart │ │ ├── co_organizers_data_mock.dart │ │ ├── meetups_data_mock.dart │ │ ├── packages_data_mock.dart │ │ ├── partners_data_mock.dart │ │ └── youtube_data_mock.dart │ └── modules │ │ └── home │ │ ├── domain │ │ └── usecases │ │ │ ├── get_brazilian_cases_test.dart │ │ │ ├── get_co_organizers_test.dart │ │ │ ├── get_meetups_test.dart │ │ │ ├── get_packages_test.dart │ │ │ ├── get_partners_test.dart │ │ │ ├── get_youtube_test.dart │ │ │ └── send_contact_test.dart │ │ ├── external │ │ └── datasources │ │ │ ├── brazilian_cases_remote_datasource_test.dart │ │ │ ├── co_organizers_remote_datasource_test.dart │ │ │ ├── meetups_remote_datasource_test.dart │ │ │ ├── packages_remote_datasource_test.dart │ │ │ ├── partners_remote_datasource_test.dart │ │ │ ├── send_contact_server_datasource_test.dart │ │ │ └── youtube_remote_datasource_test.dart │ │ ├── home_controller_test.dart │ │ ├── home_module_test.dart │ │ ├── home_page_test.dart │ │ ├── infra │ │ └── repositories │ │ │ ├── brazilian_cases_repository_test.dart │ │ │ ├── co_organizers_repository_test.dart │ │ │ ├── meetups_repository_test.dart │ │ │ ├── packages_repository_test.dart │ │ │ ├── partners_repository_test.dart │ │ │ ├── send_contact_repository_test.dart │ │ │ └── youtube_repository_test.dart │ │ └── widgets │ │ ├── brazilian_cases │ │ ├── brazilian_cases_controller_test.dart │ │ └── brazilian_cases_widget_test.dart │ │ ├── header │ │ ├── header_controller_test.dart │ │ └── header_widget_test.dart │ │ ├── latest_channel_videos │ │ ├── latest_channel_videos_controller_test.dart │ │ └── latest_channel_videos_widget_test.dart │ │ ├── latest_meetups │ │ ├── latest_meetups_controller_test.dart │ │ └── latest_meetups_widget_test.dart │ │ ├── navbar │ │ ├── navbar_controller_test.dart │ │ └── navbar_widget_test.dart │ │ ├── packages │ │ ├── packages_controller_test.dart │ │ └── packages_widget_test.dart │ │ └── partners │ │ ├── partners_controller_test.dart │ │ └── partners_widget_test.dart └── widget_test.dart ├── the analysis_options.yml ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── index.html └── manifest.json └── windows ├── .gitignore ├── CMakeLists.txt ├── flutter ├── CMakeLists.txt ├── generated_plugin_registrant.cc ├── generated_plugin_registrant.h └── generated_plugins.cmake └── runner ├── CMakeLists.txt ├── Runner.rc ├── flutter_window.cpp ├── flutter_window.h ├── main.cpp ├── resource.h ├── resources └── app_icon.ico ├── runner.exe.manifest ├── utils.cpp ├── utils.h ├── win32_window.cpp └── win32_window.h /.gitignore: -------------------------------------------------------------------------------- 1 | # Slidy History Files 2 | .slidy/ 3 | .fvm/ 4 | .vscode/ 5 | 6 | # Miscellaneous 7 | *.class 8 | *.log 9 | *.pyc 10 | *.swp 11 | .DS_Store 12 | .atom/ 13 | .buildlog/ 14 | .history 15 | .env 16 | .svn/ 17 | .pubspec.lock 18 | 19 | 20 | # IntelliJ related 21 | *.iml 22 | *.ipr 23 | *.iws 24 | .idea/ 25 | 26 | # The .vscode folder contains launch configuration and tasks you configure in 27 | # VS Code which you may wish to be included in version control, so this line 28 | # is commented out by default. 29 | #.vscode/ 30 | 31 | # Flutter/Dart/Pub related 32 | **/doc/api/ 33 | **/ios/Flutter/.last_build_id 34 | .dart_tool/ 35 | .flutter-plugins 36 | .flutter-plugins-dependencies 37 | .packages 38 | .pub-cache/ 39 | .pub/ 40 | /build/ 41 | 42 | # Web related 43 | 44 | # Symbolication related 45 | app.*.symbols 46 | 47 | # Obfuscation related 48 | app.*.map.json 49 | 50 | # Android Studio will place build artifacts here 51 | /android/app/debug 52 | /android/app/profile 53 | /android/app/release 54 | -------------------------------------------------------------------------------- /.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: "80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 17 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 18 | - platform: android 19 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 20 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 21 | - platform: ios 22 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 23 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 24 | - platform: linux 25 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 26 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 27 | - platform: macos 28 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 29 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 30 | - platform: web 31 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 32 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 33 | - platform: windows 34 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 35 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "site", 9 | "request": "launch", 10 | "type": "dart", 11 | "args": [ 12 | "--web-renderer","html" 13 | ] 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flutterando 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | 18 | ## .env 19 | Dont Forget to configure your .env file :)) remove the .example extension name and set your env vars 20 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /analysis_options.yml: -------------------------------------------------------------------------------- 1 | analyzer: 2 | - enable-experiment: 3 | - non-nullable -------------------------------------------------------------------------------- /assets/fonts/NotoSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/fonts/NotoSans-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /assets/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /assets/images/background/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/background/bg.png -------------------------------------------------------------------------------- /assets/images/background/flutterando_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/background/flutterando_logo.png -------------------------------------------------------------------------------- /assets/images/box_n_likes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/box_n_likes.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/bancoBs2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/bancoBs2.jpg -------------------------------------------------------------------------------- /assets/images/brazilian_cases/banco_bs2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/banco_bs2.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/celcoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/celcoin.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/globo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/globo.jpg -------------------------------------------------------------------------------- /assets/images/brazilian_cases/globo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/globo.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/ifood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/ifood.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/nubank.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/nubank.jpg -------------------------------------------------------------------------------- /assets/images/brazilian_cases/nubank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/nubank.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/quintoAndar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/quintoAndar.png -------------------------------------------------------------------------------- /assets/images/brazilian_cases/suaMusica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/brazilian_cases/suaMusica.png -------------------------------------------------------------------------------- /assets/images/co_organizers/adby_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/adby_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/alvaro_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/alvaro_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/deivinho_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/deivinho_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/fausto_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/fausto_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/gabriela.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/gabriela.png -------------------------------------------------------------------------------- /assets/images/co_organizers/ian_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/ian_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/jeh2_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/jeh2_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/kelven_galvao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/kelven_galvao.png -------------------------------------------------------------------------------- /assets/images/co_organizers/leticia_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/leticia_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/mateus_felipe_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/mateus_felipe_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/max.png -------------------------------------------------------------------------------- /assets/images/co_organizers/renato_mota_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/renato_mota_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/stell_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/stell_circle.png -------------------------------------------------------------------------------- /assets/images/co_organizers/taua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/taua.png -------------------------------------------------------------------------------- /assets/images/co_organizers/tiagosito.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/tiagosito.png -------------------------------------------------------------------------------- /assets/images/co_organizers/toshi_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/co_organizers/toshi_circle.png -------------------------------------------------------------------------------- /assets/images/founders/bwolf_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/founders/bwolf_circle.png -------------------------------------------------------------------------------- /assets/images/founders/david_araujo_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/founders/david_araujo_circle.png -------------------------------------------------------------------------------- /assets/images/founders/jacob_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/founders/jacob_circle.png -------------------------------------------------------------------------------- /assets/images/founders/mateus_perez_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/founders/mateus_perez_circle.png -------------------------------------------------------------------------------- /assets/images/icons/svgs/discord.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/svgs/facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/svgs/instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/svgs/linkedin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/svgs/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/icons/svgs/package.png -------------------------------------------------------------------------------- /assets/images/icons/svgs/telegram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/svgs/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/svgs/youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/last videos/context.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/context.jpg -------------------------------------------------------------------------------- /assets/images/last videos/dart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/dart.jpg -------------------------------------------------------------------------------- /assets/images/last videos/designPatter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/designPatter.jpg -------------------------------------------------------------------------------- /assets/images/last videos/ffi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/ffi.jpg -------------------------------------------------------------------------------- /assets/images/last videos/flutter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/flutter.jpg -------------------------------------------------------------------------------- /assets/images/last videos/jacob.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/jacob.jpg -------------------------------------------------------------------------------- /assets/images/last videos/jacob2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/jacob2.jpg -------------------------------------------------------------------------------- /assets/images/last videos/jacob3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/jacob3.jpg -------------------------------------------------------------------------------- /assets/images/last videos/jacob4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/jacob4.jpg -------------------------------------------------------------------------------- /assets/images/last videos/jacob_experiencia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/jacob_experiencia.jpg -------------------------------------------------------------------------------- /assets/images/last videos/realidade_aumentada.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/realidade_aumentada.jpg -------------------------------------------------------------------------------- /assets/images/last videos/valuenotifier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/last videos/valuenotifier.jpg -------------------------------------------------------------------------------- /assets/images/logo-horizontal-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/logo-horizontal-big.png -------------------------------------------------------------------------------- /assets/images/logo-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/logo-horizontal.png -------------------------------------------------------------------------------- /assets/images/logo-symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/logo-symbol.png -------------------------------------------------------------------------------- /assets/images/meetups/arquitetura_boas_praticas.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/arquitetura_boas_praticas.jpeg -------------------------------------------------------------------------------- /assets/images/meetups/async_await.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/async_await.jpeg -------------------------------------------------------------------------------- /assets/images/meetups/codigo_aberto.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/codigo_aberto.jpeg -------------------------------------------------------------------------------- /assets/images/meetups/ddd_com_modular.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/ddd_com_modular.jpeg -------------------------------------------------------------------------------- /assets/images/meetups/flutter_brasil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/flutter_brasil.png -------------------------------------------------------------------------------- /assets/images/meetups/latam.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/latam.jpeg -------------------------------------------------------------------------------- /assets/images/meetups/latam_2_edicao.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/latam_2_edicao.jpeg -------------------------------------------------------------------------------- /assets/images/meetups/modular_slidy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/modular_slidy.jpg -------------------------------------------------------------------------------- /assets/images/meetups/value_notifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/meetups/value_notifier.png -------------------------------------------------------------------------------- /assets/images/packages/asuka.svg: -------------------------------------------------------------------------------- 1 | pub: v2.0.1+3pubv2.0.1+3 -------------------------------------------------------------------------------- /assets/images/packages/flutter_modular.svg: -------------------------------------------------------------------------------- 1 | pub: v5.0.3pubv5.0.3 -------------------------------------------------------------------------------- /assets/images/packages/flutter_triple.svg: -------------------------------------------------------------------------------- 1 | pub: v1.2.7+4pubv1.2.7+4 -------------------------------------------------------------------------------- /assets/images/packages/flutterando_analysis.svg: -------------------------------------------------------------------------------- 1 | pub: v0.0.1+1pubv0.0.1+1 -------------------------------------------------------------------------------- /assets/images/packages/hasura_connect.svg: -------------------------------------------------------------------------------- 1 | pub: v4.0.0+4pubv4.0.0+4 -------------------------------------------------------------------------------- /assets/images/packages/koin.svg: -------------------------------------------------------------------------------- 1 | pub: v0.14.2pubv0.14.2 -------------------------------------------------------------------------------- /assets/images/packages/slidy.svg: -------------------------------------------------------------------------------- 1 | pub: v4.0.3pubv4.0.3 -------------------------------------------------------------------------------- /assets/images/packages/uno.svg: -------------------------------------------------------------------------------- 1 | pub: v1.0.1+5pubv1.0.1+5 -------------------------------------------------------------------------------- /assets/images/partners/adventista.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/partners/adventista.png -------------------------------------------------------------------------------- /assets/images/partners/f-team-logo--branco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/partners/f-team-logo--branco.png -------------------------------------------------------------------------------- /assets/images/partners/fteam_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/partners/fteam_icon.png -------------------------------------------------------------------------------- /assets/images/partners/google_startups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/partners/google_startups.png -------------------------------------------------------------------------------- /assets/images/partners/pupz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/partners/pupz.png -------------------------------------------------------------------------------- /assets/images/partners/quem_contrata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Flutterando/website/76247d8290c5229b52cec58e249f79ba4a799d05/assets/images/partners/quem_contrata.png -------------------------------------------------------------------------------- /assets/lang/en_US.json: -------------------------------------------------------------------------------- 1 | { 2 | "title_header": "The biggest Flutter community of Brazil", 3 | "subtitle_header": "Flutterando is the largest Flutter community in Brazil. Think about Flutter, think about Flutterando. Be part of our community!", 4 | "title_meetups": "Last meetups", 5 | "subtitle_meetups": "Keep an eye on our last meetings", 6 | "title_video_channel":"Latest channel videos", 7 | "subtitle_video_channel":"Stay on top of our latest content", 8 | "title_coorganizers":"Organization", 9 | "subtitle_coorganizers":"Know the team that makes the community happen", 10 | "title_packages":"Community Packages", 11 | "subtitle_packages":"Download the Community Packages", 12 | "button_packages":"Access", 13 | "title_cases":"Brazilian Cases", 14 | "subtitle_cases":"See how Brazilian companies are having success with Flutter in their aplications", 15 | "title_partner_communities":"Partner Communities", 16 | "subtitle_partner_communities":"View Brazilian Flutter Communities", 17 | "button_cases": "See More", 18 | "title_partners":"Partners", 19 | "subtitle_partners":"These are the companies that support our community", 20 | "form_title":"Contact us", 21 | "form_name":"Name", 22 | "form_email":"Email", 23 | "form_your_message":"Message", 24 | "form_button":"Submit", 25 | "footer_social_media":"Follow us on social media", 26 | "footer_contact":"Contact", 27 | "title_founders": "Founders", 28 | "subtitle_founders": "Who started all of this" 29 | } 30 | 31 | -------------------------------------------------------------------------------- /assets/lang/pt_BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "title_header": "A maior comunidade de Flutter do Brasil", 3 | "subtitle_header": "A Flutterando é a maior comunidade de Flutter no Brasil. Pensou em Flutter, pensou na Flutterando. Faça parte da nossa comunidade!", 4 | "title_meetups": "Últimos eventos", 5 | "subtitle_meetups": "Fique por dentro dos nossos últimos encontros", 6 | "title_video_channel":"Últimos vídeos do canal", 7 | "subtitle_video_channel":"Fique por dentro do nosso conteúdo mais recente", 8 | "title_coorganizers":"Organização", 9 | "subtitle_coorganizers": "Conheça a turma que faz a comunidade acontecer", 10 | "title_packages":"Pacotes da Comunidade", 11 | "subtitle_packages":"Faça o download dos pacotes da comunidade", 12 | "button_packages":"Acesso", 13 | "title_cases":"Casos brasileiros", 14 | "subtitle_cases":"Veja como empresas brasileiras estão tendo sucesso com o Flutter em suas aplicações", 15 | "title_partner_communities":"Comunidades Parceiras", 16 | "subtitle_partner_communities":"Veja como comunidades brasileiras de Flutter", 17 | "button_cases": "Ver mais", 18 | "title_partners":"Parceiros", 19 | "subtitle_partners":"Estas são as empresas que apoiam nossa comunidade", 20 | "form_title":"Entre em contato conosco", 21 | "form_name":"Nome", 22 | "form_email":"Email", 23 | "form_your_message":"Sua mensagem", 24 | "form_button":"Enviar", 25 | "footer_social_media":"Siga-nos nas redes sociais", 26 | "footer_contact":"Contato", 27 | "title_founders": "Fundadores", 28 | "subtitle_founders": "Quem começou tudo isso" 29 | } 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/followers_number.json: -------------------------------------------------------------------------------- 1 | { 2 | "youtube": "58.6", 3 | "instagram": "19.4", 4 | "twitter": "6.2", 5 | "discord": "11.9", 6 | "telegram": "9.5", 7 | "facebook": "11.0", 8 | "linkedin": "9.9" 9 | } 10 | -------------------------------------------------------------------------------- /data/founders_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Jacob Moura", 4 | "pathImage": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/founders/jacob_circle.png", 5 | "linkedin": "https://www.linkedin.com/in/jacob-moura/" 6 | }, 7 | { 8 | "name": "Matheus Perez", 9 | "pathImage": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/founders/mateus_perez_circle.png", 10 | "linkedin": "https://www.linkedin.com/in/matheusperez/" 11 | }, 12 | { 13 | "name": "Bwolf", 14 | "pathImage": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/founders/bwolf_circle.png", 15 | "linkedin": "https://www.linkedin.com/in/bwolfdev/" 16 | }, 17 | { 18 | "name": "David Araujo", 19 | "pathImage": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/founders/david_araujo_circle.png", 20 | "linkedin": "https://www.linkedin.com/in/davidsdearaujo/" 21 | } 22 | ] -------------------------------------------------------------------------------- /data/meetups_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "photoUrl": 4 | "https://cors.flutterando.com.br/vi/Az56U3lzz5Y/maxresdefault.jpg", 5 | "title": "Flutterando Connect | 1º Edição", 6 | "linkUrl": "https://connect.flutterando.com.br", 7 | "date": "terça-feira, 14 de dezembro de 2024 09:00 até 13:00" 8 | }, 9 | { 10 | "photoUrl": 11 | "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/meetups/flutter_brasil.png", 12 | "title": "Flutter Brasil 2022", 13 | "linkUrl": "https://www.meetup.com/fluttercwb/events/288573244/", 14 | "date": "quinta-feira, 6 de outubro de 2022 às 19:00 até quinta-feira, 6 de outubro de 2022 às 22:00" 15 | } 16 | 17 | ] 18 | -------------------------------------------------------------------------------- /data/partner_communities.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Comunidade 1", 4 | "imageUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/brazilian_cases/nubank.jpg", 5 | "description": "Descrição vai aqui", 6 | "url": "https://www.youtube.com/c/Flutterando" 7 | }, 8 | { 9 | "title": "Comunidade 2", 10 | "imageUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/brazilian_cases/bancoBs2.jpg", 11 | "description": "Descrição vai aqui", 12 | "url": "https://www.youtube.com/c/Flutterando" 13 | }, 14 | { 15 | "title": "Comunidade 3", 16 | "imageUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/brazilian_cases/globo.jpg", 17 | "description": "Descrição vai aqui", 18 | "url": "https://www.youtube.com/c/Flutterando" 19 | }, 20 | { 21 | "title": "Comunidade 4", 22 | "imageUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/brazilian_cases/suaMusica.png", 23 | "description": "Descrição vai aqui", 24 | "url": "https://www.youtube.com/c/Flutterando" 25 | }, 26 | { 27 | "title": "Comunidade 5", 28 | "imageUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/brazilian_cases/celcoin.png", 29 | "description": "Descrição vai aqui", 30 | "url": "https://www.youtube.com/c/Flutterando" 31 | }, 32 | { 33 | "title": "Comunidade 6", 34 | "imageUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/brazilian_cases/ifood.png", 35 | "description": "Descrição vai aqui", 36 | "url": "https://www.youtube.com/c/Flutterando" 37 | } 38 | ] -------------------------------------------------------------------------------- /data/partners_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "photoUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/partners/fteam_icon.png", 4 | "siteUrl": "https://fteam.dev/" 5 | }, 6 | { 7 | "photoUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/partners/adventista.png", 8 | "siteUrl": "https://iatec.com/" 9 | }, 10 | { 11 | "photoUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/partners/google_startups.png", 12 | "siteUrl": "https://startup.google.com/" 13 | }, 14 | { 15 | "photoUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/partners/pupz.png", 16 | "siteUrl": "https://www.pupz.com.br/" 17 | }, 18 | { 19 | "photoUrl": "https://raw.githubusercontent.com/Flutterando/website/main/assets/images/partners/quem_contrata.png", 20 | "siteUrl": "https://quemcontrato.com/" 21 | } 22 | ] 23 | -------------------------------------------------------------------------------- /lib/app/app_module.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_modular/flutter_modular.dart'; 2 | 3 | import 'modules/home/home_module.dart'; 4 | 5 | class AppModule extends Module { 6 | @override 7 | void routes(RouteManager r) { 8 | r.module(Modular.initialRoute, module: HomeModule()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/app/app_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_localizations/flutter_localizations.dart'; 3 | import 'package:flutter_modular/flutter_modular.dart'; 4 | import 'package:localization/localization.dart'; 5 | 6 | class AppWidget extends StatelessWidget { 7 | const AppWidget({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | LocalJsonLocalization.delegate.directories = ['assets/lang/']; 12 | 13 | return MaterialApp.router( 14 | debugShowCheckedModeBanner: false, 15 | title: 'Flutterando', 16 | localeResolutionCallback: (locale, supportedLocales) { 17 | for (var supportedLocale in supportedLocales) { 18 | if (supportedLocale.languageCode == locale?.languageCode) { 19 | return supportedLocale; 20 | } 21 | } 22 | return supportedLocales.first; 23 | }, 24 | supportedLocales: const [ 25 | Locale('pt', 'BR'), 26 | Locale('en', 'US'), 27 | ], 28 | theme: ThemeData( 29 | primarySwatch: Colors.blue, 30 | ), 31 | localizationsDelegates: [ 32 | GlobalMaterialLocalizations.delegate, 33 | GlobalWidgetsLocalizations.delegate, 34 | GlobalCupertinoLocalizations.delegate, 35 | LocalJsonLocalization.delegate, 36 | ], 37 | routeInformationParser: Modular.routeInformationParser, 38 | routerDelegate: Modular.routerDelegate, 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_brazilian_cases.dart: -------------------------------------------------------------------------------- 1 | class ResultBrazilianCases { 2 | final String imageUrl; 3 | final String title; 4 | final String description; 5 | final String url; 6 | 7 | ResultBrazilianCases({ 8 | required this.imageUrl, 9 | required this.title, 10 | required this.description, 11 | required this.url, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_co_organizers.dart: -------------------------------------------------------------------------------- 1 | class ResultCoOrganizers { 2 | final String name; 3 | final String pathImage; 4 | final String linkedin; 5 | final String status; 6 | 7 | ResultCoOrganizers({ 8 | required this.name, 9 | required this.pathImage, 10 | required this.linkedin, 11 | required this.status, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_followers_numbers.dart: -------------------------------------------------------------------------------- 1 | class ResultFollowers { 2 | final String youtube; 3 | final String instagram; 4 | final String twitter; 5 | final String discord; 6 | final String telegram; 7 | final String facebook; 8 | final String linkedin; 9 | 10 | ResultFollowers({ 11 | required this.youtube, 12 | required this.instagram, 13 | required this.twitter, 14 | required this.discord, 15 | required this.telegram, 16 | required this.facebook, 17 | required this.linkedin, 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_founders.dart: -------------------------------------------------------------------------------- 1 | class ResultFounders { 2 | final String name; 3 | final String pathImage; 4 | final String linkedin; 5 | 6 | ResultFounders({ 7 | required this.name, 8 | required this.pathImage, 9 | required this.linkedin, 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_insta_followers.dart: -------------------------------------------------------------------------------- 1 | class ResultInstaFollowers { 2 | int followersNumber; 3 | 4 | ResultInstaFollowers({ 5 | required this.followersNumber, 6 | }); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_meetups.dart: -------------------------------------------------------------------------------- 1 | class ResultMeetups { 2 | final String photoUrl; 3 | final String title; 4 | final String linkUrl; 5 | final String date; 6 | 7 | ResultMeetups({ 8 | required this.photoUrl, 9 | required this.title, 10 | required this.linkUrl, 11 | required this.date, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_package.dart: -------------------------------------------------------------------------------- 1 | class ResultPackage { 2 | final String name; 3 | final String author; 4 | final String version; 5 | final String description; 6 | final String url; 7 | final String imageUrl; 8 | 9 | ResultPackage({ 10 | required this.name, 11 | required this.author, 12 | required this.version, 13 | required this.description, 14 | required this.url, 15 | required this.imageUrl, 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_partner_communities.dart: -------------------------------------------------------------------------------- 1 | class ResultPartnerCommunities { 2 | final String imageUrl; 3 | final String title; 4 | final String description; 5 | final String url; 6 | 7 | ResultPartnerCommunities({ 8 | required this.imageUrl, 9 | required this.title, 10 | required this.description, 11 | required this.url, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_partners.dart: -------------------------------------------------------------------------------- 1 | class ResultPartners { 2 | final String photoUrl; 3 | final String siteUrl; 4 | 5 | ResultPartners({ 6 | required this.siteUrl, 7 | required this.photoUrl, 8 | }); 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/result_youtube.dart: -------------------------------------------------------------------------------- 1 | class ResultYoutube { 2 | final String imgUrl; 3 | final String title; 4 | final String linkUrl; 5 | final DateTime date; 6 | 7 | ResultYoutube({ 8 | required this.imgUrl, 9 | required this.title, 10 | required this.linkUrl, 11 | required this.date, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/send_contact/contact.dart: -------------------------------------------------------------------------------- 1 | class Contact { 2 | final String name; 3 | final String email; 4 | final String message; 5 | 6 | Contact({required this.name, required this.email, required this.message}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/entities/send_contact/result_contact.dart: -------------------------------------------------------------------------------- 1 | class ResultContact { 2 | final String message; 3 | 4 | ResultContact(this.message); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/errors/errors.dart: -------------------------------------------------------------------------------- 1 | class FailureGetPartners implements Exception {} 2 | 3 | class FailureGetFounders implements Exception {} 4 | 5 | class FailureGetCoOrganizers implements Exception {} 6 | 7 | class FailureGetPackages implements Exception {} 8 | 9 | class FailureGetMeetups implements Exception {} 10 | 11 | class FailureGetBrazilianCases implements Exception {} 12 | 13 | class FailureGetYoutube implements Exception {} 14 | 15 | class FailureInstaFollowers implements Exception {} 16 | 17 | class FailureGetPartnerCommunities implements Exception {} 18 | 19 | class DatasourceError 20 | implements 21 | FailureGetPartners, 22 | FailureGetFounders, 23 | FailureGetCoOrganizers, 24 | FailureGetPackages, 25 | FailureGetBrazilianCases, 26 | FailureGetYoutube, 27 | FailureInstaFollowers, 28 | FailureGetPartnerCommunities, 29 | FailureGetMeetups {} 30 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/errors/errors_send_contact.dart: -------------------------------------------------------------------------------- 1 | class FailureSendContact implements Exception {} 2 | 3 | class InvalidContactError implements FailureSendContact { 4 | final String message; 5 | 6 | InvalidContactError({ 7 | required this.message, 8 | }); 9 | } 10 | 11 | class SendContactExternalError implements FailureSendContact { 12 | final String message; 13 | 14 | SendContactExternalError({ 15 | required this.message, 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/errors/get_insta_followers_error.dart: -------------------------------------------------------------------------------- 1 | abstract class GeInstaFollowersFailure implements Exception {} 2 | 3 | class GetInstaFollowersError extends GeInstaFollowersFailure { 4 | String? message; 5 | 6 | GetInstaFollowersError({ 7 | required this.message, 8 | }); 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/brazilian_cases_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 3 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 4 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 5 | 6 | abstract class BrazilianCasesRepository { 7 | Future>> get(); 8 | Future> getFolowers(); 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/co_organizers_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | 5 | abstract class CoOrganizersRepository { 6 | Future>> get(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/founders_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | 3 | import '../entities/result_founders.dart'; 4 | import '../errors/errors.dart'; 5 | 6 | abstract class FoundersRepository { 7 | Future>> get(); 8 | } 9 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/insta_followers_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/errors/get_insta_followers_error.dart'; 3 | 4 | import '../entities/result_insta_followers.dart'; 5 | 6 | abstract class InstaFollowersRepository { 7 | Future> getInstaFollowers(); 8 | } 9 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/meetups_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_meetups.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | 5 | abstract class MeetupsRepository { 6 | Future>> get(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/packages_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_package.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | 5 | abstract class PackagesRepository { 6 | Future>> get(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/partner_communities_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | 3 | import '../entities/result_followers_numbers.dart'; 4 | import '../entities/result_partner_communities.dart'; 5 | import '../errors/errors.dart'; 6 | 7 | abstract class PartnerCommunitiesRepository { 8 | Future>> get(); 9 | Future> getFolowers(); 10 | } 11 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/partners_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_partners.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | 5 | abstract class PartnersRepository { 6 | Future>> get(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/send_contact_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/contact.dart'; 3 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/result_contact.dart'; 4 | import 'package:flutterando/app/modules/home/domain/errors/errors_send_contact.dart'; 5 | 6 | abstract class SendContactRepository { 7 | Future> send(Contact contact); 8 | } 9 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/repositories/youtube_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_youtube.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | 5 | abstract class YoutubeRepository { 6 | Future>> get(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_brazilian_cases.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/brazilian_cases_repository.dart'; 5 | 6 | abstract class GetBrazilianCases { 7 | Future>> call(); 8 | } 9 | 10 | class GetBrazilianCasesImpl implements GetBrazilianCases { 11 | final BrazilianCasesRepository repository; 12 | 13 | GetBrazilianCasesImpl(this.repository); 14 | 15 | @override 16 | Future>> call() async { 17 | return await repository.get(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_co_organizers.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/co_organizers_repository.dart'; 5 | 6 | abstract class GetCoOrganizers { 7 | Future>> call(); 8 | } 9 | 10 | class GetCoOrganizersImpl extends GetCoOrganizers { 11 | final CoOrganizersRepository repository; 12 | 13 | GetCoOrganizersImpl(this.repository); 14 | 15 | @override 16 | Future>> call() async { 17 | return await repository.get(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_follower_numbers.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/brazilian_cases_repository.dart'; 5 | 6 | abstract class GetFollowersNumbers { 7 | Future> call(); 8 | } 9 | 10 | class GetFolowersNumbersImpl implements GetFollowersNumbers { 11 | final BrazilianCasesRepository repository; 12 | 13 | GetFolowersNumbersImpl(this.repository); 14 | 15 | @override 16 | Future> call() async { 17 | return await repository.getFolowers(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_founders.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | 3 | import '../entities/result_founders.dart'; 4 | import '../errors/errors.dart'; 5 | import '../repositories/founders_repository.dart'; 6 | 7 | abstract class GetFounders { 8 | Future>> call(); 9 | } 10 | 11 | class GetFoundersImpl extends GetFounders { 12 | final FoundersRepository repository; 13 | 14 | GetFoundersImpl(this.repository); 15 | 16 | @override 17 | Future>> call() async { 18 | return await repository.get(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_insta_followers.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_insta_followers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/get_insta_followers_error.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/insta_followers_repository.dart'; 5 | 6 | abstract class GetInstaFollowers { 7 | Future> call(); 8 | } 9 | 10 | class GetInstaFollowersImpl implements GetInstaFollowers { 11 | final InstaFollowersRepository repository; 12 | 13 | GetInstaFollowersImpl(this.repository); 14 | 15 | @override 16 | Future> call() async { 17 | final result = await repository.getInstaFollowers(); 18 | return result; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_meetups.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_meetups.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/meetups_repository.dart'; 5 | 6 | abstract class GetMeetups { 7 | Future>> call(); 8 | } 9 | 10 | class GetMeetupsImpl implements GetMeetups { 11 | final MeetupsRepository repository; 12 | 13 | GetMeetupsImpl(this.repository); 14 | 15 | @override 16 | Future>> call() async { 17 | return await repository.get(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_packages.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_package.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/packages_repository.dart'; 5 | 6 | abstract class GetPackages { 7 | Future>> call(); 8 | } 9 | 10 | class GetPackagesImpl implements GetPackages { 11 | final PackagesRepository repository; 12 | 13 | GetPackagesImpl(this.repository); 14 | 15 | @override 16 | Future>> call() async { 17 | return await repository.get(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_partner_communities.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 3 | import '../entities/result_partner_communities.dart'; 4 | import '../repositories/partner_communities_repository.dart'; 5 | 6 | abstract class GetPartnerCommunities { 7 | Future>> 8 | call(); 9 | } 10 | 11 | class GetPartnerCommunitiesImpl implements GetPartnerCommunities { 12 | final PartnerCommunitiesRepository repository; 13 | 14 | GetPartnerCommunitiesImpl(this.repository); 15 | 16 | @override 17 | Future>> 18 | call() async { 19 | return await repository.get(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_partners.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_partners.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/partners_repository.dart'; 5 | 6 | abstract class GetPartners { 7 | Future>> call(); 8 | } 9 | 10 | class GetPartnersImpl implements GetPartners { 11 | final PartnersRepository repository; 12 | 13 | GetPartnersImpl(this.repository); 14 | 15 | @override 16 | Future>> call() async { 17 | return await repository.get(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/get_youtube.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_youtube.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/youtube_repository.dart'; 5 | 6 | abstract class GetYoutube { 7 | Future>> call(); 8 | } 9 | 10 | class GetYoutubeImpl implements GetYoutube { 11 | final YoutubeRepository repository; 12 | 13 | GetYoutubeImpl(this.repository); 14 | 15 | @override 16 | Future>> call() async { 17 | return await repository.get(); 18 | } 19 | } -------------------------------------------------------------------------------- /lib/app/modules/home/domain/usecases/send_contact.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/contact.dart'; 3 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/result_contact.dart'; 4 | import 'package:flutterando/app/modules/home/domain/errors/errors_send_contact.dart'; 5 | import 'package:flutterando/app/modules/home/domain/repositories/send_contact_repository.dart'; 6 | import 'package:flutterando/app/utils/validations/validations.dart'; 7 | 8 | abstract class SendContact { 9 | Future> call(Contact contact); 10 | } 11 | 12 | class SendContactImpl implements SendContact { 13 | final SendContactRepository repository; 14 | 15 | SendContactImpl(this.repository); 16 | 17 | @override 18 | Future> call(Contact contact) async { 19 | String fieldsError = verifyFields(contact); 20 | if (fieldsError != '') { 21 | return Left(InvalidContactError(message: fieldsError)); 22 | } 23 | return repository.send(contact); 24 | } 25 | 26 | String verifyFields(Contact contact) { 27 | String messageError = ''; 28 | if (contact.name.isEmpty || contact.name == '') { 29 | messageError += "O campo nome não pode estar vazio!\n"; 30 | } 31 | if (!emailValidation(contact.email)) { 32 | messageError += 'O campo email não esta formatado corretamente!\n'; 33 | } 34 | if (contact.message.isEmpty || contact.message == '') { 35 | messageError = 'O campo mensagem não pode estar vazio!\n'; 36 | } 37 | return messageError; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/brazilian_cases_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 5 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 6 | import 'package:flutterando/app/modules/home/external/mappers/result_brazilian_cases_mapper.dart'; 7 | import 'package:flutterando/app/modules/home/infra/datasources/brazilian_cases_datasource.dart'; 8 | 9 | class BrazilianCasesRemoteDatasource implements BrazilianCasesDatasource { 10 | final Dio dio; 11 | BrazilianCasesRemoteDatasource(this.dio); 12 | 13 | @override 14 | Future> getBrazilianCases() async { 15 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/brazilian_cases_data.json'; 16 | 17 | var response = await dio.get(url); 18 | 19 | if (response.statusCode == 200) { 20 | var jsonList = jsonDecode(response.data) as List; 21 | var listBrazilianCases = jsonList.map((e) => ResultBrazilianCasesMapper.fromMap(e)).toList(); 22 | listBrazilianCases.shuffle(); 23 | return listBrazilianCases; 24 | } 25 | 26 | return []; 27 | } 28 | 29 | @override 30 | Future getFolowers() async { 31 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/followers_number.json'; 32 | 33 | var response = await dio.get(url); 34 | 35 | if (response.statusCode == 200) { 36 | var data = jsonDecode(response.data); 37 | return ResultFollowers( 38 | youtube: data['youtube'], 39 | instagram: data['instagram'], 40 | twitter: data['twitter'], 41 | discord: data['discord'], 42 | telegram: data['telegram'], 43 | facebook: data['facebook'], 44 | linkedin: data['linkedin'], 45 | ); 46 | } 47 | 48 | return ResultFollowers( 49 | youtube: '', 50 | instagram: '', 51 | twitter: '', 52 | discord: '', 53 | telegram: '', 54 | facebook: '', 55 | linkedin: '', 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/co_organizers_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 5 | import 'package:flutterando/app/modules/home/external/mappers/result_co_organizers_mapper.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/co_organizers_datasource.dart'; 7 | 8 | class CoOrganizersRemoteDatasource implements CoOrganizersDatasource { 9 | final Dio dio; 10 | 11 | CoOrganizersRemoteDatasource(this.dio); 12 | 13 | @override 14 | Future> getCoOrganizers() async { 15 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/coorganizers_data.json'; 16 | 17 | var response = await dio.get(url); 18 | 19 | if (response.statusCode == 200) { 20 | var jsonList = jsonDecode(response.data) as List; 21 | var listCoOrganizers = jsonList.map((e) => ResultCoOrganizersMapper.fromMap(e)).toList(); 22 | return listCoOrganizers; 23 | } 24 | 25 | return []; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/founders_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_founders.dart'; 5 | import 'package:flutterando/app/modules/home/external/mappers/result_founders_mapper.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/founders_datasource.dart'; 7 | 8 | class FoundersRemoteDatasource implements FoundersDatasource { 9 | final Dio dio; 10 | 11 | FoundersRemoteDatasource(this.dio); 12 | 13 | @override 14 | Future> getFounders() async { 15 | var listFounders = []; 16 | 17 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/founders_data.json'; 18 | var response = await dio.get(url); 19 | 20 | if (response.statusCode == 200) { 21 | var jsonList = jsonDecode(response.data) as List; 22 | listFounders = jsonList.map((e) => ResultFoundersMapper.fromMap(e)).toList(); 23 | } 24 | 25 | return listFounders; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/insta_followers_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_insta_followers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/get_insta_followers_error.dart'; 4 | import 'package:flutterando/app/modules/home/external/mappers/result_insta_followers_mapper.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/insta_followers_datasource.dart'; 6 | import 'package:flutterando/app/utils/url_launcher/urls.dart'; 7 | 8 | class InstaFollowersDatasourceImpl implements InstaFollowersDatasource { 9 | final Dio _dio; 10 | InstaFollowersDatasourceImpl(this._dio); 11 | 12 | @override 13 | Future getInstaFollowers() async { 14 | var response = await _dio.get(LinksUrl.instagramFollowersData); 15 | 16 | if (response.statusCode == 200) { 17 | return ResultInstaFollowersMapper.fromMap(response.data); 18 | } else { 19 | throw GetInstaFollowersError( 20 | message: "Error no instagram followers found!", 21 | ); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/meetups_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_meetups.dart'; 5 | import 'package:flutterando/app/modules/home/external/mappers/result_meetups_mapper.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/meetups_datasource.dart'; 7 | 8 | class MeetupsRemoteDatasource implements MeetupsDatasource { 9 | final Dio dio; 10 | 11 | MeetupsRemoteDatasource(this.dio); 12 | 13 | @override 14 | Future> getMeetups() async { 15 | var url = 16 | 'https://raw.githubusercontent.com/Flutterando/website/main/data/meetups_data.json'; 17 | 18 | var response = await dio.get(url); 19 | 20 | if (response.statusCode == 200) { 21 | var jsonList = jsonDecode(response.data) as List; 22 | 23 | var listMeetups = 24 | jsonList.map((e) => ResultMeetupsMapper.fromMap(e)).toList(); 25 | 26 | return listMeetups; 27 | } 28 | 29 | return []; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/packages_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_package.dart'; 5 | import 'package:flutterando/app/modules/home/external/mappers/result_packages_mapper.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/packages_datasource.dart'; 7 | 8 | class PackagesRemoteDatasource implements PackagesDatasource { 9 | final Dio dio; 10 | PackagesRemoteDatasource(this.dio); 11 | @override 12 | Future> getPackages() async { 13 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/packages_data.json'; 14 | var response = await dio.get(url); 15 | 16 | if (response.statusCode == 200) { 17 | var jsonList = jsonDecode(response.data) as List; 18 | var listPackages = jsonList.map((e) => ResultPackagesMapper.fromMap(e)).toList(); 19 | listPackages.shuffle(); 20 | return listPackages; 21 | } 22 | 23 | return []; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/partner_communities_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | 5 | import '../../domain/entities/result_followers_numbers.dart'; 6 | import '../../domain/entities/result_partner_communities.dart'; 7 | import '../../infra/datasources/partner_communities_datasource.dart'; 8 | import '../mappers/partner_communities_mapper.dart'; 9 | 10 | class PartnerCommunitiesRemoteDatasource implements PartnerCommunitiesDatasource { 11 | final Dio dio; 12 | PartnerCommunitiesRemoteDatasource(this.dio); 13 | 14 | @override 15 | Future> getPartnerCommunities() async { 16 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/brazilian_cases_data.json'; 17 | 18 | var response = await dio.get(url); 19 | 20 | if (response.statusCode == 200) { 21 | var jsonList = jsonDecode(response.data) as List; 22 | var listPartnerCommunities = jsonList.map((e) => ResultPartnerCommunitiesMapper.fromMap(e)).toList(); 23 | listPartnerCommunities.shuffle(); 24 | return listPartnerCommunities; 25 | } 26 | 27 | return []; 28 | } 29 | 30 | @override 31 | Future getFolowers() async { 32 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/followers_number.json'; 33 | 34 | var response = await dio.get(url); 35 | 36 | if (response.statusCode == 200) { 37 | var data = jsonDecode(response.data); 38 | return ResultFollowers( 39 | youtube: data['youtube'], 40 | instagram: data['instagram'], 41 | twitter: data['twitter'], 42 | discord: data['discord'], 43 | telegram: data['telegram'], 44 | facebook: data['facebook'], 45 | linkedin: data['linkedin'], 46 | ); 47 | } 48 | 49 | return ResultFollowers( 50 | youtube: '', 51 | instagram: '', 52 | twitter: '', 53 | discord: '', 54 | telegram: '', 55 | facebook: '', 56 | linkedin: '', 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/partners_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_partners.dart'; 5 | import 'package:flutterando/app/modules/home/external/mappers/result_partners_mapper.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/partners_datasource.dart'; 7 | 8 | class PartnersRemoteDatasource implements PartnersDatasource { 9 | final Dio dio; 10 | 11 | PartnersRemoteDatasource(this.dio); 12 | 13 | @override 14 | Future> getPartners() async { 15 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/partners_data.json'; 16 | var response = await dio.get(url); 17 | 18 | if (response.statusCode == 200) { 19 | var jsonList = jsonDecode(response.data) as List; 20 | var listPartners = jsonList.map((e) => ResultPartnersMapper.fromMap(e)).toList(); 21 | listPartners.shuffle(); 22 | return listPartners; 23 | } 24 | 25 | return []; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/send_contact_server_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/contact.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/result_contact.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors_send_contact.dart'; 4 | import 'package:flutterando/app/modules/home/infra/datasources/send_contact_datasource.dart'; 5 | import 'package:hasura_connect/hasura_connect.dart'; 6 | 7 | class SendContactServerDatasource implements SendContactDatasource { 8 | final HasuraConnect connection; 9 | SendContactServerDatasource(this.connection); 10 | 11 | Map envVars = { 12 | "title": "production", 13 | "urlSendContact": "https://flutterando-fteam-box.herokuapp.com/v1/graphql", 14 | }; 15 | 16 | @override 17 | Future sendContact(Contact contact) async { 18 | var query = """ 19 | mutation sendEmail(\$description: String, \$email: String, \$name: String, \$phone_number: String, \$route_id: Int, \$subject: String) { 20 | insert_mail_box(objects: {description: \$description, email: \$email, name: \$name, phone_number: \$phone_number, route_id: \$route_id, subject: \$subject}) { 21 | affected_rows 22 | } 23 | } 24 | """; 25 | 26 | var data = await connection.mutation(query, variables: { 27 | "description": contact.message, 28 | "email": contact.email, 29 | "name": contact.name, 30 | "phone_number": "", 31 | "route_id": 2, 32 | "subject": "Flutterando - Contato", 33 | }); 34 | 35 | var id = data["data"]["insert_mail_box"]["affected_rows"]; 36 | 37 | if (id != null) { 38 | return ResultContact('O seu email foi enviado com sucesso!'); 39 | } else { 40 | throw SendContactExternalError(message: "Erro ao enviar o Email!"); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/datasources/youtube_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/result_youtube.dart'; 5 | import 'package:flutterando/app/modules/home/external/mappers/result_youtube_mapper.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/youtube_datasource.dart'; 7 | 8 | class YoutubeRemoteDatasource implements YoutubeDatasource { 9 | final Dio dio; 10 | 11 | YoutubeRemoteDatasource(this.dio); 12 | @override 13 | Future> getYoutube() async { 14 | var url = 'https://raw.githubusercontent.com/Flutterando/website/main/data/youtube_data.json'; 15 | var response = await dio.get(url); 16 | 17 | if (response.statusCode == 200) { 18 | var jsonList = jsonDecode(response.data) as List; 19 | var listYoutube = jsonList.map((e) => ResultYoutubeMapper.fromMap(e)).toList(); 20 | return listYoutube; 21 | } 22 | 23 | return []; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/contact_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/contact.dart'; 4 | 5 | class ContactMapper { 6 | static Map toMap(Contact contact) { 7 | return { 8 | 'name': contact.name, 9 | 'email': contact.email, 10 | 'message': contact.message, 11 | }; 12 | } 13 | 14 | static Contact fromMap(Map map) { 15 | if (map.isEmpty) return Contact(name: '', email: '', message: ''); 16 | 17 | return Contact( 18 | name: map['name'] ??= '', 19 | email: map['email'] ??= '', 20 | message: map['message'] ??= '', 21 | ); 22 | } 23 | 24 | static Contact fromContact(Contact contact) { 25 | if (contact.email.isEmpty) { 26 | return Contact( 27 | name: '', 28 | email: '', 29 | message: '', 30 | ); 31 | } 32 | 33 | return Contact( 34 | name: contact.name, 35 | email: contact.email, 36 | message: contact.message, 37 | ); 38 | } 39 | 40 | String toJson(e) => json.encode(toMap(e)); 41 | 42 | static Contact fromJson(String source) => ContactMapper.fromMap(json.decode(source)); 43 | } 44 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/partner_communities_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import '../../domain/entities/result_partner_communities.dart'; 4 | 5 | class ResultPartnerCommunitiesMapper { 6 | Map toMap(ResultPartnerCommunities resultPartnerCommunities) { 7 | return { 8 | 'imageUrl': resultPartnerCommunities.imageUrl, 9 | 'title': resultPartnerCommunities.title, 10 | 'description': resultPartnerCommunities.description, 11 | 'url': resultPartnerCommunities.url, 12 | }; 13 | } 14 | 15 | static ResultPartnerCommunities fromMap(Map map) { 16 | if (map.isEmpty) { 17 | return ResultPartnerCommunities( 18 | imageUrl: '', 19 | title: '', 20 | description: '', 21 | url: '', 22 | ); 23 | } 24 | 25 | return ResultPartnerCommunities( 26 | imageUrl: map['imageUrl'] ??= '', 27 | title: map['title'] ??= '', 28 | description: map['description'] ??= '', 29 | url: map['url'] ??= '', 30 | ); 31 | } 32 | 33 | String toJson(e) => json.encode(toMap(e)); 34 | 35 | static ResultPartnerCommunities fromJson(String source) => ResultPartnerCommunitiesMapper.fromMap(json.decode(source)); 36 | } 37 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_brazilian_cases_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 4 | 5 | class ResultBrazilianCasesMapper { 6 | Map toMap(ResultBrazilianCases resultBrazilianCases) { 7 | return { 8 | 'imageUrl': resultBrazilianCases.imageUrl, 9 | 'title': resultBrazilianCases.title, 10 | 'description': resultBrazilianCases.description, 11 | 'url': resultBrazilianCases.url, 12 | }; 13 | } 14 | 15 | static ResultBrazilianCases fromMap(Map map) { 16 | if (map.isEmpty) { 17 | return ResultBrazilianCases( 18 | imageUrl: '', 19 | title: '', 20 | description: '', 21 | url: '', 22 | ); 23 | } 24 | 25 | return ResultBrazilianCases( 26 | imageUrl: map['imageUrl'] ??= '', 27 | title: map['title'] ??= '', 28 | description: map['description'] ??= '', 29 | url: map['url'] ??= '', 30 | ); 31 | } 32 | 33 | String toJson(e) => json.encode(toMap(e)); 34 | 35 | static ResultBrazilianCases fromJson(String source) => ResultBrazilianCasesMapper.fromMap(json.decode(source)); 36 | } 37 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_co_organizers_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 4 | 5 | class ResultCoOrganizersMapper { 6 | Map toMap(ResultCoOrganizers resultCoOrganizers) { 7 | return { 8 | 'name': resultCoOrganizers.name, 9 | 'pathImage': resultCoOrganizers.pathImage, 10 | 'linkedin': resultCoOrganizers.linkedin, 11 | 'status': resultCoOrganizers.status, 12 | }; 13 | } 14 | 15 | static ResultCoOrganizers fromMap(Map map) { 16 | if (map.isEmpty) { 17 | return ResultCoOrganizers( 18 | name: '', 19 | pathImage: '', 20 | linkedin: '', 21 | status: '', 22 | ); 23 | } 24 | 25 | return ResultCoOrganizers( 26 | name: map['name'] ??= '', 27 | pathImage: map['pathImage'] ??= '', 28 | linkedin: map['linkedin'] ??= '', 29 | status: map['status'] ??= '', 30 | ); 31 | } 32 | 33 | String toJson(e) => json.encode(toMap(e)); 34 | 35 | static ResultCoOrganizers fromJson(String source) => ResultCoOrganizersMapper.fromMap(json.decode(source)); 36 | } 37 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_founders_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_founders.dart'; 4 | 5 | class ResultFoundersMapper { 6 | static Map toMap(ResultFounders resultFounders) { 7 | return { 8 | 'name': resultFounders.name, 9 | 'pathImage': resultFounders.pathImage, 10 | 'linkedin': resultFounders.linkedin, 11 | }; 12 | } 13 | 14 | static ResultFounders fromMap(Map map) { 15 | if (map.isEmpty) { 16 | return ResultFounders( 17 | name: '', 18 | pathImage: '', 19 | linkedin: '', 20 | ); 21 | } 22 | 23 | return ResultFounders( 24 | name: map['name'] ??= '', 25 | pathImage: map['pathImage'] ??= '', 26 | linkedin: map['linkedin'] ??= '', 27 | ); 28 | } 29 | 30 | String toJson(e) => json.encode(toMap(e)); 31 | 32 | static ResultFounders fromJson(String source) => ResultFoundersMapper.fromMap(json.decode(source)); 33 | } 34 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_insta_followers_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_insta_followers.dart'; 2 | 3 | class ResultInstaFollowersMapper { 4 | static ResultInstaFollowers fromMap(Map json) { 5 | return ResultInstaFollowers( 6 | followersNumber: json["graphql"]['user']['edge_followed_by']['count'] ?? 0, 7 | ); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_meetups_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_meetups.dart'; 4 | 5 | class ResultMeetupsMapper { 6 | Map toMap(ResultMeetups resultMeetups) { 7 | return { 8 | 'photoUrl': resultMeetups.photoUrl, 9 | 'title': resultMeetups.title, 10 | 'linkUrl': resultMeetups.linkUrl, 11 | 'date': resultMeetups.date, 12 | }; 13 | } 14 | 15 | static ResultMeetups fromMap(Map map) { 16 | if (map.isEmpty) { 17 | return ResultMeetups( 18 | photoUrl: '', 19 | title: '', 20 | linkUrl: '', 21 | date: '', 22 | ); 23 | } 24 | 25 | return ResultMeetups( 26 | photoUrl: map['photoUrl'] ??= '', 27 | title: map['title'] ??= '', 28 | linkUrl: map['linkUrl'] ??= '', 29 | date: map['date'] ??= '', 30 | ); 31 | } 32 | 33 | String toJson(e) => json.encode(toMap(e)); 34 | 35 | static ResultMeetups fromJson(String source) => ResultMeetupsMapper.fromMap(json.decode(source)); 36 | } 37 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_packages_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_package.dart'; 4 | 5 | class ResultPackagesMapper { 6 | static ResultPackage fromMap(Map map) { 7 | if (map.isEmpty) { 8 | return ResultPackage( 9 | name: '', 10 | author: '', 11 | version: '', 12 | description: '', 13 | url: '', 14 | imageUrl: '', 15 | ); 16 | } 17 | 18 | return ResultPackage( 19 | name: map['name'] ??= '', 20 | author: map['author'] ??= '', 21 | version: map['version'] ??= '', 22 | description: map['description'] ??= '', 23 | url: map['url'] ??= '', 24 | imageUrl: map['imageUrl'] ??= '', 25 | ); 26 | } 27 | 28 | static ResultPackage fromJson(String source) => ResultPackagesMapper.fromMap(json.decode(source)); 29 | } 30 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_partners_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_partners.dart'; 4 | 5 | class ResultPartnersMapper { 6 | Map toMap(ResultPartners resultPartners) { 7 | return { 8 | 'photoUrl': resultPartners.photoUrl, 9 | 'siteUrl': resultPartners.siteUrl, 10 | }; 11 | } 12 | 13 | static ResultPartners fromMap(Map map) { 14 | if (map.isEmpty) return ResultPartners(photoUrl: "", siteUrl: ""); 15 | 16 | return ResultPartners( 17 | photoUrl: map['photoUrl'] ??= "", 18 | siteUrl: map['siteUrl'] ??= "", 19 | ); 20 | } 21 | 22 | String toJson(e) => json.encode(toMap(e)); 23 | 24 | static ResultPartners fromJson(String source) => ResultPartnersMapper.fromMap(json.decode(source)); 25 | } 26 | -------------------------------------------------------------------------------- /lib/app/modules/home/external/mappers/result_youtube_mapper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutterando/app/modules/home/domain/entities/result_youtube.dart'; 4 | 5 | class ResultYoutubeMapper { 6 | Map toMap(ResultYoutube resultYoutube) { 7 | return { 8 | 'thumbnail': resultYoutube.imgUrl, 9 | 'title': resultYoutube.title, 10 | 'linkUrl': resultYoutube.linkUrl, 11 | 'date': resultYoutube.date.toIso8601String(), 12 | }; 13 | } 14 | 15 | static ResultYoutube fromMap(Map map) { 16 | return ResultYoutube( 17 | imgUrl: map['thumbnail'], 18 | title: map['title'], 19 | linkUrl: map['linkUrl'], 20 | date: DateTime.parse(map['date']), 21 | ); 22 | } 23 | 24 | String toJson(e) => json.encode(toMap(e)); 25 | 26 | static ResultYoutube fromJson(String source) => ResultYoutubeMapper.fromMap(json.decode(source)); 27 | } 28 | -------------------------------------------------------------------------------- /lib/app/modules/home/home_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/utils/screen/screen_size.dart'; 2 | 3 | class HomeController { 4 | final ScreenSize screen; 5 | HomeController(this.screen); 6 | } 7 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/brazilian_cases_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 3 | 4 | abstract class BrazilianCasesDatasource { 5 | Future> getBrazilianCases(); 6 | Future getFolowers(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/co_organizers_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 2 | 3 | abstract class CoOrganizersDatasource { 4 | Future> getCoOrganizers(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/founders_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_founders.dart'; 2 | 3 | abstract class FoundersDatasource { 4 | Future> getFounders(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/insta_followers_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_insta_followers.dart'; 2 | 3 | abstract class InstaFollowersDatasource { 4 | Future getInstaFollowers(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/meetups_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_meetups.dart'; 2 | 3 | abstract class MeetupsDatasource { 4 | Future> getMeetups(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/packages_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_package.dart'; 2 | 3 | abstract class PackagesDatasource { 4 | Future> getPackages(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/partner_communities_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 2 | 3 | import '../../domain/entities/result_partner_communities.dart'; 4 | 5 | abstract class PartnerCommunitiesDatasource { 6 | Future> getPartnerCommunities(); 7 | Future getFolowers(); 8 | } 9 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/partners_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_partners.dart'; 2 | 3 | abstract class PartnersDatasource { 4 | Future> getPartners(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/send_contact_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/contact.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/result_contact.dart'; 3 | 4 | abstract class SendContactDatasource { 5 | Future sendContact(Contact contact); 6 | } 7 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/datasources/youtube_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutterando/app/modules/home/domain/entities/result_youtube.dart'; 2 | 3 | abstract class YoutubeDatasource { 4 | Future> getYoutube(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/brazilian_cases_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 3 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 4 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 5 | import 'package:flutterando/app/modules/home/domain/repositories/brazilian_cases_repository.dart'; 6 | import 'package:flutterando/app/modules/home/infra/datasources/brazilian_cases_datasource.dart'; 7 | 8 | class BrazilianCasesRepositoryImpl implements BrazilianCasesRepository { 9 | final BrazilianCasesDatasource datasource; 10 | BrazilianCasesRepositoryImpl(this.datasource); 11 | 12 | @override 13 | Future>> get() async { 14 | try { 15 | final result = await datasource.getBrazilianCases(); 16 | return Right(result); 17 | } catch (e) { 18 | return Left(DatasourceError()); 19 | } 20 | } 21 | 22 | @override 23 | Future> getFolowers() async { 24 | try { 25 | final result = await datasource.getFolowers(); 26 | return Right(result); 27 | } catch (e) { 28 | return Left(DatasourceError()); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/co_organizers_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/co_organizers_repository.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/co_organizers_datasource.dart'; 6 | 7 | class CoOrganizersRepositoryImpl implements CoOrganizersRepository { 8 | final CoOrganizersDatasource datasource; 9 | CoOrganizersRepositoryImpl(this.datasource); 10 | 11 | @override 12 | Future>> get() async { 13 | try { 14 | final result = await datasource.getCoOrganizers(); 15 | return Right(result); 16 | } catch (e) { 17 | return Left(DatasourceError()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/founders_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_founders.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/founders_repository.dart'; 5 | 6 | import '../datasources/founders_datasource.dart'; 7 | 8 | class FoundersRepositoryImpl implements FoundersRepository { 9 | final FoundersDatasource datasource; 10 | FoundersRepositoryImpl(this.datasource); 11 | 12 | @override 13 | Future>> get() async { 14 | try { 15 | final result = await datasource.getFounders(); 16 | return Right(result); 17 | } catch (e) { 18 | return Left(DatasourceError()); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/insta_followers_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_insta_followers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/get_insta_followers_error.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/insta_followers_repository.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/insta_followers_datasource.dart'; 6 | 7 | class InstaFollowersRepositoryImpl implements InstaFollowersRepository { 8 | final InstaFollowersDatasource datasource; 9 | InstaFollowersRepositoryImpl(this.datasource); 10 | 11 | @override 12 | Future> 13 | getInstaFollowers() async { 14 | try { 15 | final result = await datasource.getInstaFollowers(); 16 | return Right(result); 17 | } on GetInstaFollowersError catch (error) { 18 | return Left(error); 19 | } catch (error, stacktrace) { 20 | return Left( 21 | GetInstaFollowersError( 22 | message: "erro no datasource: ${error.toString()}$stacktrace", 23 | ), 24 | ); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/meetups_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_meetups.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/meetups_repository.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/meetups_datasource.dart'; 6 | 7 | class MeetupsRepositoryImpl implements MeetupsRepository { 8 | final MeetupsDatasource datasource; 9 | MeetupsRepositoryImpl(this.datasource); 10 | 11 | @override 12 | Future>> get() async { 13 | try { 14 | final result = await datasource.getMeetups(); 15 | return Right(result); 16 | } catch (e) { 17 | return Left(DatasourceError()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/packages_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_package.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/packages_repository.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/packages_datasource.dart'; 6 | 7 | class PackagesRepositoryImpl implements PackagesRepository { 8 | PackagesDatasource datasource; 9 | PackagesRepositoryImpl(this.datasource); 10 | 11 | @override 12 | Future>> get() async { 13 | try { 14 | final result = await datasource.getPackages(); 15 | return Right(result); 16 | } catch (e) { 17 | return Left(DatasourceError()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/partner_communities_repository.impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_followers_numbers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | 5 | import '../../domain/entities/result_partner_communities.dart'; 6 | import '../../domain/repositories/partner_communities_repository.dart'; 7 | import '../datasources/partner_communities_datasource.dart'; 8 | 9 | class PartnerCommunitiesRepositoryImpl implements PartnerCommunitiesRepository { 10 | final PartnerCommunitiesDatasource datasource; 11 | PartnerCommunitiesRepositoryImpl(this.datasource); 12 | 13 | @override 14 | Future>> get() async { 15 | try { 16 | final result = await datasource.getPartnerCommunities(); 17 | return Right(result); 18 | } catch (e) { 19 | return Left(DatasourceError()); 20 | } 21 | } 22 | 23 | @override 24 | Future> getFolowers() async { 25 | try { 26 | final result = await datasource.getFolowers(); 27 | return Right(result); 28 | } catch (e) { 29 | return Left(DatasourceError()); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/partners_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_partners.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/partners_repository.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/partners_datasource.dart'; 6 | 7 | class PartnersRepositoryImpl implements PartnersRepository { 8 | final PartnersDatasource datasource; 9 | PartnersRepositoryImpl(this.datasource); 10 | 11 | @override 12 | Future>> get() async { 13 | try { 14 | final result = await datasource.getPartners(); 15 | return Right(result); 16 | } catch (e) { 17 | return Left(DatasourceError()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/send_contact_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:dio/dio.dart'; 3 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/contact.dart'; 4 | import 'package:flutterando/app/modules/home/domain/entities/send_contact/result_contact.dart'; 5 | import 'package:flutterando/app/modules/home/domain/errors/errors_send_contact.dart'; 6 | import 'package:flutterando/app/modules/home/domain/repositories/send_contact_repository.dart'; 7 | import 'package:flutterando/app/modules/home/infra/datasources/send_contact_datasource.dart'; 8 | 9 | class SendContactRepositoryImpl implements SendContactRepository { 10 | final SendContactDatasource datasource; 11 | SendContactRepositoryImpl(this.datasource); 12 | 13 | @override 14 | Future> send(Contact contact) async { 15 | try { 16 | final result = await datasource.sendContact(contact); 17 | return Right(result); 18 | } on DioException catch (_) { 19 | return Right(ResultContact("E-mail enviado com sucesso!")); 20 | } catch (e) { 21 | return Left(SendContactExternalError(message: "Erro ao enviar o E-mail!")); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/app/modules/home/infra/repositories/youtube_repository_impl.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_youtube.dart'; 3 | import 'package:flutterando/app/modules/home/domain/errors/errors.dart'; 4 | import 'package:flutterando/app/modules/home/domain/repositories/youtube_repository.dart'; 5 | import 'package:flutterando/app/modules/home/infra/datasources/youtube_datasource.dart'; 6 | 7 | class YoutubeRepositoryImpl implements YoutubeRepository { 8 | final YoutubeDatasource datasource; 9 | YoutubeRepositoryImpl(this.datasource); 10 | 11 | @override 12 | Future>> get() async { 13 | try { 14 | final result = await datasource.getYoutube(); 15 | return Right(result); 16 | } catch (e) { 17 | return Left(DatasourceError()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/widgets/brazilian_cases/brazilian_cases_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_triple/flutter_triple.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_brazilian_cases.dart'; 3 | import 'package:flutterando/app/modules/home/domain/usecases/get_brazilian_cases.dart'; 4 | import 'package:flutterando/app/utils/screen/screen_size.dart'; 5 | 6 | class BrazilianCasesController extends Store> { 7 | final ScreenSize screen; 8 | final GetBrazilianCases usecase; 9 | BrazilianCasesController(this.screen, this.usecase) : super([]) { 10 | fetchBrazilianCases(); 11 | } 12 | 13 | Future fetchBrazilianCases() async { 14 | var response = await usecase(); 15 | response.fold( 16 | (l) => setError(l), 17 | (brazilianCases) => update(brazilianCases), 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/widgets/co_organizers/co_organizers_store.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_triple/flutter_triple.dart'; 2 | import 'package:flutterando/app/modules/home/domain/entities/result_co_organizers.dart'; 3 | import 'package:flutterando/app/modules/home/domain/usecases/get_co_organizers.dart'; 4 | import 'package:flutterando/app/utils/screen/screen_size.dart'; 5 | 6 | class CoOrganizersStore extends Store> { 7 | final GetCoOrganizers usecase; 8 | final ScreenSize screen; 9 | CoOrganizersStore(this.screen, this.usecase) : super([]) { 10 | fetchPartners(); 11 | } 12 | 13 | Future fetchPartners() async { 14 | var response = await usecase.call(); 15 | response.fold( 16 | (l) => setError(l), 17 | (coOrganizers) => update(coOrganizers), 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/modules/home/widgets/footer/contact_form/widgets/contact_field.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterando/app/utils/colors/colors.dart'; 3 | import 'package:flutterando/app/utils/text_styles/text_styles.dart'; 4 | 5 | class ContactField extends StatelessWidget { 6 | final String title; 7 | final int maxLines; 8 | final String? Function(String?)? validator; 9 | final TextEditingController controller; 10 | 11 | const ContactField({ 12 | required this.title, 13 | required this.maxLines, 14 | required this.controller, 15 | required this.validator, 16 | }); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | Widget titleWidget() { 21 | return Focus( 22 | descendantsAreFocusable: false, 23 | canRequestFocus: false, 24 | child: SelectableText( 25 | title, 26 | style: TextStyles.roboto(20), 27 | ), 28 | ); 29 | } 30 | 31 | Widget textFieldWidget() { 32 | return TextFormField( 33 | controller: controller, 34 | maxLines: maxLines, 35 | validator: validator, 36 | style: TextStyles.roboto(16), 37 | decoration: new InputDecoration( 38 | filled: true, 39 | fillColor: PrimaryColors.darkest, 40 | errorStyle: TextStyle(fontSize: 14), 41 | border: new OutlineInputBorder( 42 | borderRadius: const BorderRadius.all( 43 | const Radius.circular(6.0), 44 | )), 45 | ), 46 | ); 47 | } 48 | 49 | return Column( 50 | crossAxisAlignment: CrossAxisAlignment.start, 51 | children: [ 52 | SizedBox(height: 32), 53 | titleWidget(), 54 | SizedBox(height: 6), 55 | textFieldWidget(), 56 | ], 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/app/modules/home/widgets/footer/contact_form/widgets/send_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_modular/flutter_modular.dart'; 3 | import 'package:flutterando/app/modules/home/widgets/footer/footer_controller.dart'; 4 | import 'package:flutterando/app/utils/colors/colors.dart'; 5 | import 'package:flutterando/app/utils/text_styles/text_styles.dart'; 6 | import 'package:localization/localization.dart'; 7 | 8 | class SendButton extends StatefulWidget { 9 | final Function sendContact; 10 | const SendButton(this.sendContact, {super.key}); 11 | @override 12 | _SendButtonState createState() => _SendButtonState(); 13 | } 14 | 15 | class _SendButtonState extends State { 16 | final controller = Modular.get(); 17 | @override 18 | void dispose() { 19 | Modular.dispose(); 20 | super.dispose(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | final fontScale = controller.screen.fontScale(context); 26 | return Padding( 27 | padding: const EdgeInsets.only(top: 12), 28 | child: Align( 29 | child: InkWell( 30 | child: Container( 31 | decoration: const BoxDecoration( 32 | color: PrimaryColors.carmesim, 33 | borderRadius: BorderRadius.all(Radius.circular(16)), 34 | ), 35 | alignment: Alignment.center, 36 | width: double.infinity, 37 | height: 28 * fontScale, 38 | child: Text( 39 | "form_button".i18n(), 40 | style: TextStyles.roboto(12 * fontScale, fontWeight: FontWeight.bold), 41 | ), 42 | ), 43 | onTap: () async { 44 | await widget.sendContact(); 45 | }, 46 | ), 47 | ), 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/app/modules/home/widgets/footer/follow_us/widgets/social_networks.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_modular/flutter_modular.dart'; 3 | import 'package:flutter_svg/svg.dart'; 4 | import 'package:flutterando/app/modules/home/widgets/footer/footer_controller.dart'; 5 | import 'package:flutterando/app/utils/icons/icons.dart'; 6 | import 'package:flutterando/app/utils/url_launcher/urls.dart'; 7 | import 'package:url_launcher/url_launcher.dart'; 8 | 9 | class SocialNetworks extends StatefulWidget { 10 | final double fontScale; 11 | SocialNetworks(this.fontScale); 12 | 13 | @override 14 | _SocialNetworksState createState() => _SocialNetworksState(); 15 | } 16 | 17 | class _SocialNetworksState extends State { 18 | final controller = Modular.get(); 19 | @override 20 | void dispose() { 21 | Modular.dispose(); 22 | super.dispose(); 23 | } 24 | 25 | Widget build(BuildContext context) { 26 | Widget socialnetWork(String image, String linkUrl) { 27 | return InkWell( 28 | onTap: () async { 29 | await launchUrl(Uri.parse(linkUrl)); 30 | }, 31 | child: Container( 32 | child: SvgPicture.asset( 33 | image, 34 | height: 20 * widget.fontScale, 35 | width: 20 * widget.fontScale, 36 | fit: BoxFit.cover, 37 | ), 38 | padding: EdgeInsets.only( 39 | left: 10 * widget.fontScale, 40 | ), 41 | ), 42 | ); 43 | } 44 | 45 | return Container( 46 | child: Wrap( 47 | alignment: WrapAlignment.end, 48 | children: [ 49 | socialnetWork(IconUrls.instagram, LinksUrl.instagram), 50 | socialnetWork(IconUrls.facebook, LinksUrl.facebook), 51 | socialnetWork(IconUrls.twitter, LinksUrl.twitter), 52 | socialnetWork(IconUrls.telegram, LinksUrl.telegram), 53 | socialnetWork(IconUrls.discord, LinksUrl.discord), 54 | socialnetWork(IconUrls.medium, LinksUrl.medium), 55 | socialnetWork(IconUrls.youtube, LinksUrl.youtube), 56 | socialnetWork(IconUrls.meetup, LinksUrl.meetup), 57 | ], 58 | ), 59 | ); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/app/modules/home/widgets/footer/footer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_modular/flutter_modular.dart'; 3 | import 'package:flutterando/app/modules/home/widgets/footer/contact_form/contact_form.dart'; 4 | import 'package:flutterando/app/modules/home/widgets/footer/follow_us/follow_us.dart'; 5 | import 'package:flutterando/app/modules/home/widgets/footer/footer_controller.dart'; 6 | import 'package:flutterando/app/utils/screen/screen_size.dart'; 7 | 8 | class Footer extends StatefulWidget { 9 | @override 10 | _FooterState createState() => _FooterState(); 11 | } 12 | 13 | class _FooterState extends State