Pular para o conteúdo

Código

O NAHPU é mais do que apenas um aplicativo de catálogo digital para trabalho de campo em história natural. É um sistema de software para suportar a digitalização de espécimes diretamente no ponto de coleta. Esta página foca em explicar como contribuir para o aplicativo principal do NAHPU, que é o próprio catálogo digital. Dê uma olhada na seção de ferramentas de desenvolvimento para mais detalhes sobre como contribuir para o software de suporte do projeto.

Antes de contribuir para o projeto NAHPU, certifique-se de ter o seguinte instalado em sua máquina:

Para preparar a máquina do usuário para o desenvolvimento do NAHPU:

  1. Instale o Flutter SDK

    Siga as diretrizes da equipe do Flutter. Você também precisará instalar o Android Studio.

  2. Instale o Rust toolchain

  3. Instale o Flutter rust bridge

  1. Faça um fork do repositório NAHPU no GitHub.

  2. Clone o repositório forkado para sua máquina local.

    Terminal window
    git clone https://github.com/hhandika/nahpu.git

    Se você estiver usando o GitHub CLI.

    Terminal window
    gh repo clone hhandika/nahpu
  3. Acesse o repositório NAHPU.

    Terminal window
    cd nahpu/
  4. Crie uma nova branch para suas alterações.

    Terminal window
    git checkout -b seu-nome-de-branch
  5. Faça suas alterações e comite-as.

    Terminal window
    git add .
    git commit -m "Sua mensagem de commit"
  6. Envie suas alterações para o seu repositório forkado.

  7. Crie um pull request para o repositório principal do NAHPU.

    Se você estiver trabalhando em alterações na interface do usuário, certifique-se de incluir capturas de tela ou um vídeo de demonstração para ilustrar suas alterações. Alguns bons exemplos de alterações na interface do usuário podem ser encontrados nas issues do GitHub do NAHPU.

O NAHPU usa Drift para o gerenciamento do banco de dados SQLite. Você pode encontrar as definições de esquema do banco de dados no diretório db_schemas/.

  1. Proponha a alteração do esquema em uma Issue do GitHub primeiro.

  2. Assim que a alteração for aprovada, adicione a nova definição de esquema no arquivo /lib/services/database/table.drift.

  3. Aumente a versão do banco de dados no arquivo /lib/services/database/database.dart.

    Por exemplo, para atualizar da versão 6 para a 7, atualize a constante kSchemaVersion:

    const int kSchemaVersion = 7;
  4. Escreva uma nova função de migração no mesmo arquivo para lidar com a alteração do esquema. Por exemplo:

    Future<void> _migrateFromVersion7(Migrator m) async {
    await m.addColumn(specimens, specimens.newColumn);
    // Adicione quaisquer etapas adicionais de migração aqui
    }
  5. Após atualizar o esquema, execute o gerador de código para atualizar o código Dart gerado:

    Terminal window
    flutter pub run build_runner build --delete-conflicting-outputs
  6. Faça o dump do esquema final para um novo arquivo em db_schemas/ com o número da próxima versão.

    Use o comando interno drift_dev para gerar o dump do esquema:

    Terminal window
    dart run drift_dev schema dump lib/services/database/database.dart db_schemas/drift_schema_v7.json
  7. Execute os testes.

    Terminal window
    flutter test
  8. Faça commit das suas alterações e abra um pull request com uma descrição clara da alteração do esquema, o motivo e quaisquer impactos potenciais nos dados existentes.

Aqui estão alguns problemas comuns e suas soluções:

  • Causa: flutter_rust_bridge_codegen não está no seu PATH.
  • Solução: Certifique-se de tê-lo instalado com cargo install flutter_rust_bridge_codegen e que o diretório bin do cargo esteja no seu PATH.

Erro no macOS: flutter_rust_bridge_codegen falha com "Please supply one or more path/to/llvm..."

Seção intitulada “Erro no macOS: flutter_rust_bridge_codegen falha com &quot;Please supply one or more path/to/llvm...&quot;”
  • Causa: O gerador de código não consegue encontrar sua instalação do LLVM.
  • Solução: Instale o LLVM com Homebrew (brew install llvm).
  • Causa: As ferramentas de compilação MSVC ou o SDK do Windows estão ausentes ou não foram configurados corretamente, fazendo com que o Rust toolchain falhe durante a vinculação.
  • Solução: Instale o Visual Studio Build Tools e garanta que a carga de trabalho Desktop development with C++ esteja selecionada. Em seguida, defina o Rust toolchain para MSVC:
    Terminal window
    rustup default stable-x86_64-pc-windows-msvc

O NAHPU é um aplicativo multiplataforma construído com Flutter, um framework de alto desempenho para criar aplicativos compilados nativamente. O Flutter usa a linguagem de programação Dart, que é otimizada para criar interfaces de usuário rápidas e bonitas. Esta abordagem simplifica o processo de desenvolvimento e é nossa receita para garantir que o NAHPU seja performático e suporte sistemas operacionais móveis e desktop.

Armazenamento de Dados: No backend, o NAHPU depende fortemente do SQLite para armazenamento local, priorizando o funcionamento offline. Como o trabalho de campo geralmente ocorre em áreas remotas sem acesso à internet, o gerenciamento robusto de dados locais é crítico.

A Integração com Rust: Desde o início de 2024, estamos migrando operações pesadas de computação para Rust. Rust é uma linguagem de programação de sistemas que foca em desempenho, confiabilidade e segurança de memória. Ao integrar Rust com Flutter via flutter_rust_bridge, alcançamos o melhor dos dois mundos:

O Flutter/Dart lida com o gerenciamento de estado, roteamento e renderização da interface do usuário suavemente a 60-120fps. O Rust lida com o trabalho pesado: processamento de grandes conjuntos de dados, transformações complexas de dados, E/S de arquivos e algoritmos especializados que, de outra forma, sobrecarregariam o isolate do Dart.

O NAHPU usa o sistema Material Design 3 como base para sua identidade visual.

Consistência: O Material Design está profundamente integrado ao Flutter. Sempre que possível, usamos widgets Material padrão para garantir uma experiência de usuário consistente, acessível e intuitiva em todos os sistemas operacionais.

Responsividade: O NAHPU é frequentemente usado em tablets de campo e dispositivos móveis. Ao contribuir com componentes de UI, sempre considere layouts responsivos. Use ferramentas como LayoutBuilder, MediaQuery ou sistemas de grade flexíveis para garantir que suas alterações fiquem boas em telas pequenas de telefones e em telas grandes de tablets ou desktops.

Acessibilidade: Certifique-se de que o texto tenha contraste suficiente, os alvos de toque tenham tamanho adequado (pelo menos 48x48 pixels lógicos) e que rótulos semânticos sejam fornecidos para leitores de tela.

  • Directoryandroid/ Código específico da plataforma Android e configuração de compilação
  • Directoryassets/ Ativos estáticos, como imagens, fontes e ícones
  • Directorydb_schemas/ Definições de esquema de banco de dados e arquivos de migração
  • Directoryinstaller/ Scripts de instalação e configuração para empacotamento do app
  • Directoryintegration_test/ Testes de integração de ponta a ponta
  • Directoryios/ Código específico da plataforma iOS e configuração de compilação
  • Directorylib/ Código fonte Dart principal para o aplicativo Flutter
  • Directorylinux/ Código específico da plataforma Linux e configuração de compilação
  • Directorymacos/ Código específico da plataforma macOS e configuração de compilação
  • Directoryrust/ Código fonte Rust para componentes nativos críticos de desempenho
  • Directoryrust_builder/ Scripts de compilação e configuração para compilar código Rust
  • Directoryscripts/ Scripts utilitários para tarefas de desenvolvimento e automação
  • Directorysnap/ Configuração de pacote Snap para distribuição Linux
  • Directorytest/ Testes unitários e de widget
  • Directorytest_driver/ Testes do Flutter driver para testes automatizados de UI
  • Directoryweb/ Código específico da plataforma Web e configuração de compilação
  • Directorywindows/ Código específico da plataforma Windows e configuração de compilação

Se você ficar preso ao configurar o ambiente ou entender a arquitetura, não hesite em entrar em contato! Verifique as Issues do GitHub do NAHPU para discussões em andamento, ou abra uma nova discussão se tiver uma proposta arquitetural.