Esse projeto é uma melhoria do projeto fluttemis original, principalmente em relação ao seu aspecto visual, com uma roupagem mais sofisticada.
Algumas das tecnologias/bibliotecas utilizadas na construção do software foram:
- Flutter toolkit 3.3.6 (stable) apenas desktop (macos, windows e linux)
- Dart 2.18.2
- fluent_ui: 4.0.3
- macos_ui: 1.7.6
- flutter_modular: ^5.0.3
- file_picker: ^5.2.2
- bio-dart-package
- collection: ^1.16.0
- equatable: ^2.0.5
- fpdart: ^0.5.0
- kt_dart: ^1.1.0
- sealed_unions: ^3.0.3+1
- window_manager: ^0.2.7
- bitsdojo_window: ^0.1.5
- intl: ^0.17.0
- lottie: ^2.0.0
- data_table_2: 2.3.10
- touchable: ^1.0.2
- linked_scroll_controller: ^0.2.0
- selectable: ^0.2.9
- clipboard_watcher: ^0.1.3
- dart_code_metrics: ^4.19.2 ou ^5.0.1
- lint: ^1.10.0
- mocktail: ^0.3.0
- value_listenable_test: ^0.0.1
Além dessas, há também outras bibliotecas. O pubspec.yaml possui a lista completa das bibliotecas utilizadas.
Esta, na verdade, é uma modificação implementada na biblioteca file_picker, pois a versão de flutter para desktop necessitava de um wrapper implementado em Go, chamado go-flutter, para acesso às apis do sistema operacional, como, nesse caso, o file system.
Esse wrapper precisava ser configurado manualmente para que o file_picker funcionasse corretamente. Atualmente o file_picker usa uma implementação nativa em dart para o acesso às api do sistema operacional, sendo necessário apenas instalar a biblioteca, que estará automaticamente pronta para uso.
A primeira versão do Fluttemis utilizava o bloc para a gerência de estado. Depois de muito pensar na etapa de refatoração, a conclusão é que as gerências nativas do flutter, como o value_notifier e o change_notifier satisfazem completamente as necessidades do projeto.
Todos os textos do software, exceto os relacionados a dados (de um arquivo genbank, por exemplo), estão preparados para internacionalização. Até o momento da escrita desse texto, o único idioma utilizado é o português. No entanto, a ideia é que em breve o inglês seja inserido.
O tema claro e o tema escuro estão disponíveis para as 3 plataformas (macos, windows e linux). A escolha do tema acompanha diretamente a aparência corrente do sistema operacional.
A biblioteca freezed possui inúmeros atributos, principalmente no que tange em relação a classes seladas (sealed classes), data class, e JSON serialization, permitindo códigos bem mais enxutos, devido ao boilerplate gerado através do build_runner.
Apesar de tais recursos, o freezed foi retirado na refatoração dessa versão do Fluttemis. E o principal motivo é que não havia a necessidade do uso de seus recursos no projeto. Para o data class, a biblioteca equatable satisfaz muito bem e de modo bem mais simples. Para as classes seladas, foi usada a biblioteca sealed_unions. E quanto ao JSON serialization, por enquanto, não há leitura alguma de JSON e mesmo que futuramente seja necessário, a opção será para um implementação própria.
A biblioteca json_annotation também foi removida nessa versão.
A primeira versão do Fluttemis foi construída dentro de um mesmo projeto. Nessa versão, o software foi destrinchado em 5 projetos:
É a aplicação em si, onde o build é realizado. É nele onde ficam os assets (imagens e fonts), a separação dos módulos flutter_modular, além de algumas páginas/widgets.
É onde estão os códigos e features, exceto os relativos a layouts, que serão usados ao longo de todos os projetos.
É onde está localizado a lista das bibliotecas instaladas e disponibilizadas para todos os outros projetos. Além disso, é onde localiza-se também os arquivos usados na internacionalização dos textos.
É onde estão os componentes visuais e de funcionalidades para serem usados/reaproveitados durante todo o projeto. Nestes componentes visuais, há os de identidade baseado na plataforma e os que são independentes da plataforma.
É onde os dados dos locus estão organizados. É a localização das suas entidades, stores, repositórios e data sources (leitura de arquivo genbank, por exemplo).
Também é onde estão os relatórios com os dados detalhados dos locus e features. Além disso, é nessa aplicação onde está localizado o mapa com o desenho gráfico das features, como a sua posição, organização e orientação.
O projeto fluttemis original foi construído dando ênfase a 3 etapas:
-
bio-dart-package: O pacote bio dart é o responsável por receber um arquivo, genbank por exemplo, realizar a leitura desse arquivo e armazenar o conteúdo em uma estrutura de dados.
-
fluttemis core: Aplicação locus descrito anteriormente. É onde estão as implementações e testes dos domínios, stores, repositórios e data sources dos locus.
-
mapa dos locus: É o desenho gráfico do conjunto de features de um determinado locus. É um mapa que possui uma certa complexidade, pois é necessário que a posição, organização e orientação de cada feature seja representada de forma precisa para o correto entendimento dos dados. Além disso, o mapa possibilita a navegação horizontal (através das posições) e vertical (através dos seus tipos). Por fim, há também o cálculo da escala do desenho, baseado no tamanho do respectivo genoma, pois um genoma com cinco milhões de bases não deve ter a mesma métrica de desenho de um genoma de cem mil bases, pois tornaria a navegação do mapa cansativo e desconfortável.
Terminada a etapa do mapa, a ideia para o restante da aplicação era a construção de algo bem simples e sóbrio. Talvez essa ideia tenha resultado em uma aplicação menos criativa do que o seu potencial. E essa nova versão vem justamente com o propósito de melhorar essa questão.
Para essa versão, a interface não apenas foi completamente remodelada, como também possui a sua identidade visual de acordo com a respectiva plataforma. Windows, Macos e Linux, para cada uma dessas plataformas, o Fluttemis possui sua própria paleta de cores, fontes, bordas e sombreamentos completamente distintos, tanto no modo claro, quanto no modo escuro.
O desenvolvimento para Windows e Macos contou com uso das bibliotecas fluent_ui e o macos_ui, respectivamente. Ambas as bibliotecas possuem um vasto conjunto de widgets com o propósito de permitir que cada detalhe da aplicação, desde uma caixa de texto, um botão, um ícone, a tonalidade das cores e seus efeitos tenham identidades semelhantes à respectiva plataforma.
Para a plataforma Linux não foi possível encontrar nenhuma bibloteca similar. Portanto, seu desenvolvimento baseou-se nos aspectos visuais do material design. Não deixa de fazer um certo sentido a falta dessa biblioteca, já que com tantas distribuições (Ubuntu, Mint, Deepin, Manjaro e etc...) e ambientes gráficos (Gnome, KDE, XFCE, Cinnamon e etc...) distintos, realmente não é muito trivial chegar a um consenso visual.
Tema claro - Erro (arquivo vazio)
Tema escuro - Erro (arquivo vazio)