Dartvel, home
Docs
Features
Studio
Cloud
Compared

Search the site

GitHub
pub.dev

GETTING STARTED

Getting started
Existing Flutter apps
Existing Native apps
Run on your phone

APP

UI and styling
Routing
State
Accessibility
Keyboard shortcuts
Localization
Devices and desktop
Native device access
Media, 3D and XR

DATA

Data models
Forms
Search
Sync and offline
Import and export
Change capture
Database
Cache
File storage
Images
Privacy and erasure

BACKEND

Backend functions
Auth and sessions
Authorization
Queues and jobs
Workers and memory
Notifications and mail
Outbound HTTP
AI
Webhooks
GraphQL and OpenAPI
API keys and OAuth
Multi-tenancy
Billing and commerce
Modules

OPERATIONS

Edge security
Secrets and environments
Monitoring
Releases

SHIPPING

Build targets
Telegram Mini Apps
Static web hosting
Servers and deploying

REFERENCE

Testing
CLI reference
Coding agents

APP

Native device access

DV.Platform is how an application reaches the device it runs on: native APIs through FFI and JNI, never platform channels.

Every getter below exists in packages/dartvel_flutter/lib/dartvel_flutter.dart. Members listed as planned have no binding yet.

ON THIS PAGE

What it is

Members

Platform support

Permissions

Beyond DV.Platform

Planned (not shipped)

What it is

DV.Platform holds the native capabilities the framework registers for the current target. A desktop binds clipboard, window controls and file associations; a phone does not. A browser has a different set. Calling a capability the target lacks throws a typed error that names the missing binding.

Bindings are registered through dart:ffi (Linux, Windows, macOS, embedded) or jnigen-generated JNI (Android), and through dart:js_interop with package:web (web). No MethodChannel, EventChannel or BasicMessageChannel is used anywhere.

Members

Platform identity

DV.Platform.currentPlatform   // android, ios, macos, windows, linux, web, ...
DV.Platform.isAndroid, isIOS, isWeb, isLinux, isMacOS, isWindows
DV.Platform.isTV, isWatch, isFoldable
DV.Platform.breakpoint        // desktop, tablet, mobile
DV.Platform.orientation

Copy code to clipboard

Screen and window

DV.Platform.screen.screenWidth, screenHeight
DV.Platform.screen.safeAreas
DV.Platform.window.setTitle(), .maximize(), .minimize(), .restore(), .setSize()

Copy code to clipboard

Device namespaces

Every DV.Platform member is lowerCamel, like the rest of DV.*: DV.Platform.camera, DV.Platform.window, DV.Platform.fileStorage, DV.Platform.notifications. The older capitalised names (Camera, Window, Tray, FileStorage, Notifications and the rest) still compile as @Deprecated aliases for one release. DV.Platform.notifications unifies the notifications service and device-local notifications under the standard lowerCamel convention.

DV.Platform.camera, media, location, bluetooth, nfc, clipboard, share
DV.Platform.sensors, biometrics, deepLinks, haptics, contacts
DV.Platform.notifications, permissions, browserExtension, network
DV.Platform.install, display, fileStorage, device

Copy code to clipboard

Desktop-only

DV.Platform.associations  // file associations
DV.Platform.dragDrop
DV.Platform.tray, Menus, Shortcuts, Printing

Copy code to clipboard

Surface

DV.Platform.surface        // DVRenderSurface.gui or .terminal
DV.Platform.terminal
DV.Platform.useRenderSurface(...)

Copy code to clipboard

File, storage and notifications proxies

DV.Platform.fileStorage    // DV.FileStorage on the device disk
DV.Platform.notifications  // proxy to DV.Notifications & local notifications

Copy code to clipboard

Platform support

Availability per member (shipped / partial / planned). Partial means the getter exists but the underlying native binding covers only some operations or platforms.

surface

Status: Shipped

Platforms with bindings: all

terminal

Status: Shipped (opt-in)

Platforms with bindings: terminal backend linked

currentPlatform / is*

Status: Shipped

Platforms with bindings: all

breakpoint / orientation

Status: Shipped

Platforms with bindings: all

screen

Status: Shipped

Platforms with bindings: all

Window

Status: Shipped

Platforms with bindings: all (desktop controls partial)

tray

Status: Shipped

Platforms with bindings: macOS, Windows, Linux: separators, headers, check and radio marks, submenus, update in place

window.hide / .show, close-to-hide

Status: Shipped

Platforms with bindings: macOS, Windows, Linux (exitPolicy explicit)

launchAtLogin

Status: Shipped

Platforms with bindings: macOS 13+, Windows, Linux

Menus / Shortcuts / Printing

Status: Partial

Platforms with bindings: Linux, Windows, macOS bindings; availability depends on the desktop session

Dialogs

Status: Partial

Platforms with bindings: Linux, Windows, macOS native bindings

DragDrop

Status: Shipped

Platforms with bindings: desktop (Linux, Windows, macOS)

associations

Status: Shipped

Platforms with bindings: desktop

camera

Status: Partial

Platforms with bindings: Android, iOS, some web

media

Status: Partial

Platforms with bindings: Android, iOS, some web

fileStorage

Status: Shipped

Platforms with bindings: all: Android, iOS, macOS, Windows, Linux, embedded Linux, web (OPFS); pickers on Android, desktop and web

files (deprecated)

Status: Shipped

Platforms with bindings: Android, web; use fileStorage

location

Status: Partial

Platforms with bindings: Android, iOS

notifications

Status: Stub

Platforms with bindings: all

bluetooth

Status: Partial

Platforms with bindings: Android 31+, some others

nfc

Status: Planned

Platforms with bindings: needs Activity / entitlement

device

Status: Shipped (stub)

Platforms with bindings: all

clipboard

Status: Partial

Platforms with bindings: web, Linux, Windows, macOS (varies)

share

Status: Partial

Platforms with bindings: Android, web

sensors

Status: Partial

Platforms with bindings: Android, iOS, some web

biometrics

Status: Planned

Platforms with bindings: needs Activity / iOS entitlement

deepLinks

Status: Stub

Platforms with bindings: all

haptics

Status: Partial

Platforms with bindings: Android, iOS, web

contacts

Status: Planned

Platforms with bindings: needs Activity / entitlement

permissions

Status: Shipped

Platforms with bindings: all (policy framework)

browserExtension

Status: Shipped

Platforms with bindings: Chromium / Firefox extensions

network

Status: Shipped

Platforms with bindings: all (signal: online / metered / offline / unknown)

install

Status: Partial

Platforms with bindings: web (PWA)

display

Status: Shipped (stub)

Platforms with bindings: all

Permissions

Runtime permissions are requested through DV.Platform.permissions. The framework asks at the point the capability is first called. Each permission is mapped to a policy entry in pubspec.yaml. A refusal produces a typed error.

DV.Platform.permissions.request('microphone')

Copy code to clipboard

Permissions are per-capability

A camera call checks the camera permission; a microphone call checks the microphone permission. There is no global "allow all" prompt.

Beyond DV.Platform

DV.Platform covers what the framework registers. Going further requires native modules or direct bindings.

Native binding graph

The framework binds native APIs through FFI (C libraries: libX11, GTK, GDBus on Linux; Win32 on Windows; CoreGraphics on macOS) and through JNI (jnigen-generated bindings on Android). Each platform file in the framework lists the bindings that are registered and the ones that are deliberately absent, with the reason stated.

Platform channels / FFI

No Flutter MethodChannel is used for any native integration. All bindings go through dart:ffi or package:jni, per the native integration rule.

Platform views

Native UI that Flutter cannot render is embedded through platform views. Their lifecycle and routing are framework concerns; applications declare what they need.

DVPreferredRenderingMode

A planned feature: selecting the render mode (hardware, software, hybrid) at build time. Selection is not yet implemented.

Planned (not shipped)

These members are referenced in the spec but have no binding registered today. They are listed honestly as Planned.

nfc.readTag needs Android Activity dispatch or iOS CoreNFC entitlement.

biometrics.authenticate / .canAuthenticate needs Activity (Android) or LAContext (iOS).

bluetooth.isEnabled needs runtime-granted permission since API 31.

Additional media/capture bindings requiring Activity context or specific entitlements.

Native modules via DV.Modules: mount a Dartvel module inside a native app (see /docs/adopting and the native-app section below).

PREVIOUS Devices and desktop Native features, home widgets, kiosks, windows and trays
NEXT Media, 3D and XR Players, recorders, 3D scenes and spatial windows
GitHub
pub.dev
npm
Acknowledgements
Privacy
Terms

FSL-1.1-MIT licensed. Built with Dartvel.

Dartvel is made by

SigmaDev Digital

To the bottom