Bluecherry Client
Bluecherry DVR client to run across range of devices.
[work-in-progress]
Download
- iOS (coming soon)
- Android
Screenshots
Features
- Ability to add multiple Bluecherry DVR servers.
- Re-orderable drag-and-drop camera grid viewer. See multiple cameras in 4x4, 2x1 or 1x1 view.
- Pinch-to-zoom fullscreen camera viewer.
- Events viewer.
- Direct camera viewer.
- Consistent & configurable system-aware, light & dark app theme.
- Configurable in-app date & time format.
- Event notifications with camera screenshot thumbnail. View any camera or event directly by single notifcation tap.
- Ability to snooze notifications directly from notification or within the app.
- Cross-platform. Currently targets mobile platforms. Desktop support coming in future.
- Android
- iOS (coming soon)
- Windows
- Linux
- macOS
Videos
[demo data & footage is shown]
CameraGridView.mp4
TabsAndPinchToZoom.mp4
Translate
You may provide translations for the application to see it running in your own language. Please follow these steps:
Let's say, we're adding French (fr-FR
) translation.
- Fork the repository & navigate here.
- Create a new file named
fr-FR.json
. - Add your translations to your new
fr-FR.json
file in correspondence to existing en-US translations. - Add your language here. Example:
const kSupportedLocales = [
Locale('en', 'US'),
+ Locale('fr', 'FR'),
];
- Send us a new pull-request.
🎉
NOTE: Do not translate the value of tip_count
.
Bug-Reports
Send us details about any issues you discover in the issues or in the forums.
Contribute
The code in-general follows OOPs & uses provider for state-management because it is widely known by developers in Flutter community. Everything is well-documented (e.g. this) & other little quirks/tweaks at places are also noted.
Current source tree has following files:
lib
|
├───api [API wrapper around Bluecherry DVR server.]
| └──api.dart
│
├───models [model classes to serve & bind type-safe data together in various entities.]
│ ├───device.dart
│ ├───event.dart
│ └───server.dart
│
├───providers [core business logic of the application.]
│ ├───mobile_view_provider.dart [stores, provides & caches mobile camera layout etc.]
│ ├───server_provider.dart [stores, provides & caches multiple DVR servers added by the user.]
│ └───settings_provider.dart [stores, provides & caches various in-app configurations & settings.]
│
├───utils [constant values, helper functions & theme-related stuff.]
│ ├───constants.dart
│ ├───methods.dart
│ └───theme.dart
│
├───widgets [UI/UX & widgets used to display content.]
│ ├───add_server_wizard.dart
│ ├───device_grid.dart
│ ├───device_selector_screen.dart
│ ├───device_tile.dart
│ ├───device_tile_selector.dart
│ ├───direct_camera.dart
│ ├───events_screen.dart
│ ├───home.dart
│ ├───misc.dart
│ └───settings.dart
│
├───firebase_messaging_background_handler.dart [handles in-app notifications, snoozing, thumbnails etc. & other Firebase related hooks.]
├───firebase_options.dart [auto-generated firebase configuration.]
└───main.dart [entry-point of the application.]
Feel free to send any pull-requests to add any features you wish or fix any bugs you notice.
License
Copyright © 2022, Bluecherry DVR.
This project & work under this repository is licensed under GNU General Public License v3.0.