NetDesk 1.5.0 — source release
This commit is contained in:
commit
40318aafdd
227 files changed
+80798
No files matched your search
@@ -0,0 +1,89 @@
|
||||
# NetDesk UI (Flutter)
|
||||
|
||||
The premium cross-platform front-end for **NetDesk by Akronlogic** — a
|
||||
self-hosted remote-desktop client targeting **Windows, macOS, Linux, iOS and
|
||||
Android** from one Flutter codebase.
|
||||
|
||||
This package is the *presentation layer only*. The heavy lifting — signaling,
|
||||
NAT traversal, the encrypted transport, capture/encode, decode and input
|
||||
injection — lives in the Rust crate [`netdesk-core`](../core). The two are
|
||||
joined in **Phase 3** via [`flutter_rust_bridge`](https://pub.dev/packages/flutter_rust_bridge).
|
||||
|
||||
---
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
ui/
|
||||
├─ pubspec.yaml # package + deps (flutter_rust_bridge/ffi land in Phase 3)
|
||||
├─ lib/
|
||||
│ ├─ main.dart # NetDeskApp root, dark theme, home = ConnectScreen
|
||||
│ ├─ theme.dart # color tokens (#0B0F15 bg, #22C55E accent) + ThemeData
|
||||
│ ├─ connect_screen.dart # wordmark, Partner ID + password, Connect, "this device" ID
|
||||
│ └─ session_screen.dart # AppBar "NetDesk — <id>" + toolbar; hosts remote texture later
|
||||
└─ README.md
|
||||
```
|
||||
|
||||
## Design language
|
||||
|
||||
- **Background** `#0B0F15` (deep near-black), **surface** `#121821`, hairline
|
||||
borders `#1E2733`.
|
||||
- **Accent** `#22C55E` green for the primary action, the brand mark and the
|
||||
"connected" indicator.
|
||||
- Rounded cards, generous spacing, TeamViewer / RustDesk-grade information
|
||||
hierarchy. Dark-only for now.
|
||||
|
||||
All values are tokens in `lib/theme.dart` (`NetDeskColors`, `NetDeskRadius`,
|
||||
`NetDeskSpacing`) — no hardcoded hex elsewhere in the app.
|
||||
|
||||
---
|
||||
|
||||
## How this binds to `netdesk-core` (Phase 3)
|
||||
|
||||
1. **Add the bridge deps.** Uncomment `flutter_rust_bridge` and `ffi` in
|
||||
`pubspec.yaml`, then `flutter pub get`.
|
||||
2. **Expose a Rust API.** In `../core`, add a `#[frb]`-annotated API module
|
||||
(e.g. `src/api/session.rs`) with the calls the UI needs:
|
||||
`local_id()`, `connect(partner_id, password)`, `disconnect()`,
|
||||
`list_monitors()`, a frame/event stream, etc.
|
||||
3. **Generate the glue.** Run `flutter_rust_bridge_codegen generate`, which
|
||||
emits typed Dart bindings under `lib/src/rust/` and the matching Rust
|
||||
`frb_generated.rs`. The core is compiled as a C-ABI dylib/staticlib and
|
||||
linked per platform.
|
||||
4. **Wire the screens.**
|
||||
- `ConnectScreen` — the Connect button calls `connect(...)`; the
|
||||
"This device's ID" area shows `local_id()` instead of the current
|
||||
placeholder.
|
||||
- `SessionScreen` — the central placeholder becomes a `Texture` whose
|
||||
frames are pushed from the core's decoder; pointer/keyboard events are
|
||||
forwarded back for injection; the toolbar actions (disconnect,
|
||||
fullscreen, monitors, file transfer, settings) call their core
|
||||
counterparts.
|
||||
|
||||
Until then every control is a styled, non-functional placeholder so the UX can
|
||||
be reviewed and polished independently of the core.
|
||||
|
||||
---
|
||||
|
||||
## Running (once Flutter is installed)
|
||||
|
||||
> Flutter is **not** required to author these files, and was not run to create
|
||||
> them. Install the Flutter SDK (>= 3.22) to build.
|
||||
|
||||
```bash
|
||||
cd ui
|
||||
flutter pub get
|
||||
|
||||
# Desktop
|
||||
flutter run -d windows
|
||||
flutter run -d macos
|
||||
flutter run -d linux
|
||||
|
||||
# Mobile (device/emulator attached)
|
||||
flutter run -d android
|
||||
flutter run -d ios
|
||||
```
|
||||
|
||||
Enable the desktop targets once with `flutter config --enable-windows-desktop`
|
||||
(and the `--enable-macos-desktop` / `--enable-linux-desktop` equivalents) if
|
||||
they are not already on.
|
||||
Reference in new issue
Block a user