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.
UI
API html js . html .
html Flutter, , :
web-view
( Flutter)
, , React Native, .
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 :
html
html5. , :
( )
-
( /)
-
-
Iframe
-
-
- . , .
Flutter RecyclerView Android, ListView. ( ), .
, : . - - , .. .
, - , , - , "" . , ui , ListView , N , , N .
, 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.
– , , . :
. compute, , , , .
. , , , 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: