Meu histórico de implantação do aplicativo Habr offline

Criar seu próprio aplicativo Habr já se tornou uma tradição entre os Habruzers. Decidi acompanhar e fazer o meu próprio.





Neste artigo, irei primeiro falar sobre como foi criado o cliente para Habr, soluções arquitetônicas e técnicas, seus pré-requisitos e análises, quais as dificuldades que surgiram e, por último, sobre a funcionalidade da aplicação.





Fundo

Tudo começou com a sugestão de um amigo para experimentar o Flutter, mas não me importei.





, ? , , - ( ).





React+TypeScript VanilaJs, React Flutter.





, html , — , “”: html , - web-view. , .





- . , Dart , , ( Flutter : , .. , ui ).





:





  • ui





  • habr-storage - , , .





  • habr-api - http .





, . MVVM.





Aqui eu tentei descrever esquematicamente a arquitetura

UI

API html js . html . 





html Flutter, , : 





  1. web-view





  2. ( Flutter)





, , React Native, .





O feed principal que o usuário encontra quando o aplicativo é ativado

HTML

, , . iframe, , web-view. , , , . , .





:

















, .. .





html , , . 





. html, div, . , , .. html, css . , - , " ".





html :





<div class="spoiler" role="button" tabindex="0">
  <b class="spoiler_title"> </b>
  <div class="spoiler_text"> </div>
 </div>
      
      



, details - .





2 :





  1. html









html5. , :





  • ( )









  •  





  • ( /)













  • Iframe













- . , .





Flutter RecyclerView Android, ListView. ( ), .





Exibindo comentários

, : . - - , .. .





Primeira versão com vista em árvore

, - , , - , "" . , ui , ListView , N , , N .





Implementação atual com tela "plana"
«»

, 1000 - , - .





. , . , . , , - ListView "" , . , .





Habr-API

m.habr.com/kek/v2/





API:













, , , , , , , - , , . , . – API .   





, API - . , API , . - .





Habr-Storage

Moor (Room, Dart) SQLite, - , . – Hive, NoSQL Key-Value , . , ( ), , .





SQLite html , (, ) , Hive. . 





SQLite. . url, , path . Path - url` . :





path = str(hash(url)) + str(datetime.now().millisecondsSinceEpoch)
      
      



Isolates

Dart , , , web-workers Isolate. , HTTP , JSON, , Flutter. 





- , -.





: Flutter . compute. 





– , , . :





  1. . compute, , , , . 





  2. . , , , middle, , , , , . . 





:

















Para a operação de análise e pré-processamento, ainda uso o método de computação.





Conclusão

Isso é basicamente tudo que eu gostaria de dizer sobre a estrutura interna do aplicativo. 





Não pretendia este post ser um anúncio, mas pode surgir o desejo de cutucar o aplicativo e ver o código, então anexei um link para o github .





E então algumas capturas de tela do aplicativo:








All Articles