Para executar o projeto e/ou gerar builds é necessário instalar o just ou o make
Após instalar, entrar no diretório twittergb
just get ou make get # resolver as dependências
just run ou make run # rodar em desenvolvimento ou simplesmente usar o f5/ctrl + f5 no vscode
just build_apk ou make build_apk # gerar apks
just build_bundle ou make build_bundle # gerar appbundle
- O entrypoint do projeto é o twittergb.
- No dependencies estão todas as dependências externas do app (pacotes do pub)
- No common está tudo o que é comum no app. Por exemplo, cliente http, models, stores globais, services...
- No modules estão todos os módulos (features) do app
No projeto foram utilizados alguns serviços do Firebase, que são:
- Firebase Authentication
- Firebase Storage
- Firebase Firestore
As políticas de segurança do Storage e do Firestore estão permitindo a leitura com o usuário deslogado, mas o insert, update ou delete apenas por usuários autenticados.
A troca do nome do usuário é permitida, mas não irá refletir nos posts antigos, apenas nos novos. O motivo dessa escolha consiste no fato do Firestore não permitir aggregations, por isso deveriam ser feitas no dispositivo o que pode levar a gargalos e demoras para exibir e/ou editar posts.
Ao criar uma mensagem (post), é enviado um snapshot do usuário logado. Caso o mesmo não tenha alterado a foto do perfil, o post ficará uma foto de perfil padrão e ela não é atualizada no usuário do post.
O aplicativo está configurado para rodar apenas no Android.
.
├── README.md
├── common
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── common.iml
│ ├── lib
│ │ ├── common.dart
│ │ └── src
│ │ ├── adapters
│ │ │ ├── dio_adapter.dart
│ │ │ └── http_client_adapter.dart
│ │ ├── constants
│ │ │ └── constants.dart
│ │ ├── errors
│ │ │ ├── auth_error.dart
│ │ │ ├── failure.dart
│ │ │ ├── firestore_error.dart
│ │ │ └── storage_error.dart
│ │ ├── guards
│ │ │ └── auth_guard.dart
│ │ ├── http
│ │ │ ├── errors
│ │ │ │ └── http_error.dart
│ │ │ ├── interceptors
│ │ │ │ └── dio_interceptor.dart
│ │ │ └── response
│ │ │ └── http_response.dart
│ │ ├── models
│ │ │ ├── menu_item_model.dart
│ │ │ ├── news_message_model.dart
│ │ │ ├── news_model.dart
│ │ │ ├── post
│ │ │ │ └── post_model.dart
│ │ │ └── user_model.dart
│ │ ├── services
│ │ │ ├── firebase_auth_service.dart
│ │ │ ├── firebase_firestore_service.dart
│ │ │ ├── firebase_storage_service.dart
│ │ │ └── shared_preferences_service.dart
│ │ ├── stores
│ │ │ └── user_store.dart
│ │ ├── theme
│ │ │ └── theme_controller.dart
│ │ ├── typedefs
│ │ │ └── typedefs.dart
│ │ ├── types
│ │ │ └── message_type.dart
│ │ ├── utils
│ │ │ └── utils.dart
│ │ ├── validators
│ │ │ └── validators.dart
│ │ └── widgets
│ │ ├── avatar
│ │ │ └── avatar_widget.dart
│ │ ├── border_button
│ │ │ └── border_button_widget.dart
│ │ ├── bottom_navigation_bar
│ │ │ └── bottom_navigation_bar_widget.dart
│ │ ├── deafault_app_bar
│ │ │ └── default_app_bar_widget.dart
│ │ ├── floating_action_button
│ │ │ └── floating_action_button_widget.dart
│ │ ├── list_tile
│ │ │ └── list_tile_widget.dart
│ │ ├── news_item
│ │ │ └── news_item_widget.dart
│ │ ├── no_content
│ │ │ └── no_content_widget.dart
│ │ ├── options_modal
│ │ │ └── options_modal_widget.dart
│ │ ├── popup
│ │ │ └── popup_widget.dart
│ │ ├── post
│ │ │ └── post_widget.dart
│ │ ├── profile_avatar
│ │ │ └── profile_avatar_widget.dart
│ │ ├── progress
│ │ │ └── progress_widget.dart
│ │ ├── solid_button
│ │ │ └── solid_button_widget.dart
│ │ ├── switch
│ │ │ └── switch_widget.dart
│ │ ├── text_field
│ │ │ ├── text_field_store.dart
│ │ │ └── text_field_widget.dart
│ │ └── warn_modal
│ │ └── warn_modal_widget.dart
│ ├── pubspec.lock
│ └── pubspec.yaml
├── dependencies
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── dependencies.iml
│ ├── lib
│ │ └── dependencies.dart
│ ├── pubspec.lock
│ └── pubspec.yaml
├── modules
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib
│ │ ├── app
│ │ │ └── modules
│ │ │ ├── access
│ │ │ │ ├── access_controller.dart
│ │ │ │ ├── access_module.dart
│ │ │ │ ├── access_page.dart
│ │ │ │ ├── access_state.dart
│ │ │ │ ├── access_store.dart
│ │ │ │ └── pages
│ │ │ │ ├── create_account
│ │ │ │ │ ├── create_account_controller.dart
│ │ │ │ │ ├── create_account_page.dart
│ │ │ │ │ ├── create_account_store.dart
│ │ │ │ │ └── states
│ │ │ │ │ └── create_account_form_state.dart
│ │ │ │ └── login
│ │ │ │ ├── login_controller.dart
│ │ │ │ ├── login_page.dart
│ │ │ │ └── login_store.dart
│ │ │ ├── home
│ │ │ │ ├── home_controller.dart
│ │ │ │ ├── home_module.dart
│ │ │ │ ├── home_page.dart
│ │ │ │ └── home_store.dart
│ │ │ ├── menu
│ │ │ │ ├── menu_controller.dart
│ │ │ │ ├── menu_module.dart
│ │ │ │ ├── menu_page.dart
│ │ │ │ ├── menu_store.dart
│ │ │ │ └── pages
│ │ │ │ ├── edit_name.dart
│ │ │ │ └── edit_name_controller.dart
│ │ │ ├── message
│ │ │ │ ├── message_controller.dart
│ │ │ │ ├── message_module.dart
│ │ │ │ ├── message_page.dart
│ │ │ │ └── message_store.dart
│ │ │ ├── news
│ │ │ │ ├── news_controller.dart
│ │ │ │ ├── news_module.dart
│ │ │ │ ├── news_page.dart
│ │ │ │ ├── news_store.dart
│ │ │ │ └── repositories
│ │ │ │ └── news_repository.dart
│ │ │ ├── splash
│ │ │ │ ├── splash_module.dart
│ │ │ │ ├── splash_page.dart
│ │ │ │ └── splash_store.dart
│ │ │ └── start
│ │ │ ├── start_controller.dart
│ │ │ ├── start_module.dart
│ │ │ ├── start_page.dart
│ │ │ └── start_store.dart
│ │ └── modules.dart
│ ├── modules.iml
│ ├── pubspec.lock
│ └── pubspec.yaml
└── twittergb
├── Makefile
├── README.md
├── analysis_options.yaml
├── assets
│ ├── icons
│ │ └── icon.png
│ └── images
│ ├── camera.png
│ ├── conversation.png
│ ├── create-account.png
│ ├── error.png
│ ├── forgot-password.png
│ ├── gallery.png
│ ├── login.png
│ ├── no-data.png
│ ├── ok.png
│ ├── post.png
│ ├── profile-avatar.png
│ └── profile.png
├── justfile
├── lib
│ ├── app
│ │ ├── app_controller.dart
│ │ ├── app_module.dart
│ │ ├── app_widget.dart
│ │ └── theme
│ │ ├── dark_theme.dart
│ │ ├── light_theme.dart
│ │ └── theme_colors.dart
│ ├── firebase_options.dart
│ ├── generated_plugin_registrant.dart
│ ├── main.dart
│ └── resources
│ ├── icon.dart
│ ├── images.dart
│ └── resources.dart
├── pubspec.lock
├── pubspec.yaml
├── spider.yaml
└── twittergb.iml
65 directories, 140 files