4.0 KiB
4.0 KiB
meta archietecture
- MVVM
- Data layer
- View ⇆ ViewModel ⇆ Repository ⇆ Service
- Model is used across.
- View ⇆ ViewModel ⇆ Repository ⇆ Service
- Data layer
Package structure
The repo structure follows official Package structure.
lib
├─┬─ ui
│ ├─┬─ core
│ │ ├─┬─ ui
│ │ │ └─── <shared widgets>
│ │ └─── themes
│ └─┬─ <FEATURE NAME>
│ ├─┬─ view_model
│ │ └─── <view_model class>.dart
│ └─┬─ widgets
│ ├── <feature name>_screen.dart
│ └── <other widgets>
├─┬─ domain
│ └─┬─ models
│ └─── <model name>.dart
├─┬─ data
│ ├─┬─ repositories
│ │ └─── <repository class>.dart
│ ├─┬─ services
│ │ └─── <service class>.dart
│ └─┬─ model
│ └─── <api model class>.dart
├─── config
├─── utils
├─── routing
├─── main_staging.dart
├─── main_development.dart
└─── main.dart
// The test folder contains unit and widget tests
test
├─── data
├─── domain
├─── ui
└─── utils
// The testing folder contains mocks other classes need to execute tests
testing
├─── fakes
└─── models
But with slight modifications.
- put each
<FEATURE NAME>/s infeatures/sub-directory underui/. test/features/contains BDD unit tests for each feature. It focuses on pure logic, therefore will not accessViewbutViewModelandModel.test/widget/contains UI widget(component) tests which focus onViewfrom MVVM of each component.integration_test/for integration tests. They should be volatile to follow UI layout changes.
Some rule of thumb:
- global provider
<object>RepositoryProvideronly placed in/lib/data/repositories/, provide data to/lib/ui.lib/data/services/*should be stateless, and should only accessible byRepository.
Abstraction
terminology
signature asset- image file of a signature, stored in the device or cloud storage
- can drawing from canvas
- image file of a signature, stored in the device or cloud storage
signature card- template of signature placement
- It will include modifications such as brightness, contrast, background removal, rotation of the signature asset.
signature placement- placed modified signature asset from signature card on a specific position on a specific page of a specific PDF document
document- PDF document to be signed
key dependencies
- pdfrx
- packages/pdfrx/example/viewer/lib/main.dart
- When using pdfrx, developers should control view function e.g. zoom, scroll... by component of pdfrx e.g.
PdfViewer, rather than introduce additional view. - So does overlay some widgets, they should be placed using the provided overlay builder.
- Viewer Customization using Widget Overlay
- Per-page Customization using Widget Overlay
pageOverlaysBuilder
- image
- whole app use its image object as image representation.
- aware that minimize, encode/decode usage, because its has poor performance on web
ColorFilterGeneratorcan not replaceadjustColordue to custom background removal algorithm need at last stage. It is GPU based, and offscreen-render then readback is not ideal.
- [responsive_framework]
- RWD support