Mi historial de implementación de la aplicación Habr sin conexión

La creación de su propia aplicación Habr ya se ha convertido en una tradición entre los Habruzer. Decidí seguir el ritmo y hacer el mío.





En este artículo hablaré en primer lugar sobre cómo se creó el cliente para Habr, las soluciones arquitectónicas y técnicas, sus prerrequisitos y análisis, qué dificultades hubo y, por último, sobre la funcionalidad de la aplicación.





Fondo

Todo comenzó con la sugerencia de un amigo de probar Flutter, pero no me importó.





, ? , , - ( ).





React+TypeScript VanilaJs, React Flutter.





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





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





:





  • ui





  • habr-storage - , , .





  • habr-api - http .





, . MVVM.





Aquí intenté representar esquemáticamente la arquitectura.

UI

API html js . html . 





html Flutter, , : 





  1. web-view





  2. ( Flutter)





, , React Native, .





El feed principal que encuentra el usuario cuando se enciende la aplicación

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. ( ), .





Visualización de comentarios

, : . - - , .. .





Primera versión con vista de árbol

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





Implementación actual con pantalla "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 la operación de análisis y preprocesamiento, sigo usando el método de cálculo.





Conclusión

Esto es básicamente todo lo que me gustaría contar sobre la estructura interna de la aplicación. 





No pretendía que esta publicación fuera un anuncio, pero puede surgir el deseo de pinchar la aplicación y ver el código, así que adjunto un enlace a github .





Y luego un par de capturas de pantalla de la aplicación:








All Articles