Git Product home page Git Product logo

flutter_simple_bloc's Introduction

Estrutura de pastas

Motivações

  • Propriedade clara dos recursos
  • Previsibilidade de uso do módulo (refatoração, manutenção, você sabe o que é compartilhado, o que não é, evita regressões acidentais, evita enormes diretórios de módulos não reutilizáveis, etc.)
  • O CI executa apenas os testes que importam (futuro)
  • Divisão de código (futuro)

Como funciona

A estrutura do arquivo é mapeada diretamente para a hierarquia da rota, que é mapeada diretamente para a hierarquia da interface do usuário. Se considerarmos todas as pastas uma pasta "genérica", teremos apenas uma pasta "feature" como nos exemplos abaixo:

Exemplos de pastas "feature":

  • example1
  • example2

Exemplos de pastas "genérica":

  • components
  • config
  • page
  • stores
  • services

Dada esta configuração de rota a navegação do arquivo routes.js:

src
└── routes.dart
final  Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
"/": (BuildContext context) => ExScreen1(),
"/ExScreen2": (BuildContext context) => ExScreen2(),
};

O mesmo poderá acessar outras paginas e navegar conforme configurarmos.

Agora, configuraríamos nossos diretórios assim:

lib
├── bloc
├── blocs
├── components
├── models
├── pages
├── services
└── theme                
lib
├── bloc
├── blocs
├── components
├── models
└── pages
    ├── example1
    |    ├── components
    |    |   └── body.dart
    |    |
    |    ├── example-bloc.dart
    |    └── examplescreen1.dart
    |           
    ├── example2
    |    ├── components
    |    |   └── body.dart
    |    |
    |    ├── example2-bloc.dart
    |    └── examplescreen2.dart   

Em seguida, cada uma dessas pages que possui a sua pasta há seus elementos de componentes, bloc e o arquivo que lida com a entrada na tela, também conhecido como "Manipulador de rota" que direciona botoes a encaminha para um outra page, dessa maneira ficam mais limpo para qualquer manutenção.

Components


src
├── assets
├── components
│   ├── Card
│   │   ├── index.tsx
│   │   └── styles.tsx
│   └── Button
│       ├── index.tsx
│       └── styles.tsx
├── config
├── pages
│   ├── Home
│   │   ├── index.tsx
│   │   └── styles.tsx
│   └── Profile
│       ├── index.tsx
│       └── styles.tsx

Esses componentes são usados de forma global a fins de reutilizar o que foi desenvolvido, evitando repetição de codigos para interface compartilhando entre as pages.

Serviços compartilhados

Toda page precisa de informações e busca essas informações de APIs. Por esse motivo utilizamos a pasta "services" para organizar os endpoints, onde qualquer tipo de configuração de busca de serviços ou conexão com banco de dados.

src
├── assets
├── components
├── config
├── pages
└── services
    └── gitHub
        └── index.tsx
import  axios  from  "axios";
const  apiGitHub = axios.create({
	baseURL:  "https://api.github.com/",
});

Store para comunicação e organização de informações

Utilizamos o store para utilizar e organizar as informações, distribuir em qualquer page ou atualizar alguma informação utilizando o redux ou outra biblioteca.

src
├── assets
├── components
├── config
├── pages
├── services
└── store
    └── index.tsx

Reducers

Os reducers especificam como o estado do aplicativo é alterado em resposta às ações (https://redux.js.org/basics/actions) enviadas para a store. Lembre-se de que as ações apenas descrevem o que aconteceu , mas não descrevem como o estado do aplicativo muda.

src
├── assets
├── components
├── config
├── pages
├── services
└── store
    ├── reducers
    │     ├── user
    │     │   └── index.tsx
    │     │
    │     └── index.tsx
    │     
    └── index.tsx

Poderá ser criado a quantidade de reducers que for necessário para acionamento de actions, dessa maneira as informações ficam separadas e ao mesmo tempo unidas pois no final o combineReducers ira unificar todas formando um único dado para utilização no state

const  status = useSelector<any>((state) =>  state.user.usuario.status);

Como iniciar o app

Instalar as dependências:

npm install

ou caso tenha yarn

yarn install

Para iniciar o app:

npm start

ou caso tenha yarn

yarn start

Para desenho da documentação https://stackedit.io/app#

flutter_simple_bloc's People

Contributors

macielsousadasilva avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.