voo_watch 0.4.0
voo_watch: ^0.4.0 copied to clipboard
Flutter SDK for Apple Watch and Wear OS companion apps. Typed message bridge, haptics, health, complications, and a scaffolding CLI.
Changelog #
All notable changes to voo_watch will be documented in this file.
0.4.0 - 2026-04-29 #
Added #
voo_watch:doctor— new CLI subcommand (dart run voo_watch:doctor) that health-checks a watch project aftervoo_watch_ui:init/voo_watch:init --fix-build-phases. Verifies pubspec, theios/folder, watch target detection, the four SwiftUI renderer files,App.swiftwiring (including the theme env injection), Podfile installed, and that the watch target is registered inRunner.xcodeproj. Each failure prints an actionable next step instead of letting Xcode fail 60 seconds into a build.
Changed #
- Version bump to align with the
voo_watch_ui0.4.0 release (closure event handlers, typed icons,WatchUiBootstrap, testing helper). The bridge, transports, haptics, health, and complications APIs invoo_watchitself are unchanged.
0.3.1 - 2026-04-28 #
- Version bump to align with the
voo_watch_ui0.3.1 release. No functional changes tovoo_watchitself; the bridge, transports, haptics, health, and complications APIs are unchanged.
0.3.0 - 2026-04-28 #
Added #
- Web fallback transport.
VooWatch.instancenow auto-selects an in-memory transport whenkIsWebis true. Calls likeVooWatchUi.instance.render(...)are harmless no-ops in the browser, enabling Flutter web hot-reload previews of watch UI without aMissingPluginExceptionon thevoo_watch/methodchannel. The web fallback uses the sameFakeVooWatchTransportthat ships inpackage:voo_watch/testing.dart; its doc comment is updated to reflect the dual role (tests + web preview).
0.2.2 - 2026-04-28 #
Fixed #
- iOS:
emitReachabilitywrote to theFlutterEventSinkdirectly fromWCSessionDelegatecallbacks, which fire on background queues. That produced"channel sent a message from native to Flutter on a non-platform thread"warnings and could drop reachability events — leaving Dart listeners stuck in their last observed state. Reachability is now routed through the sameforward(...)helper the other channels use, so every emit hops to the main thread. - iOS:
voo_watch/messagescould callFlutterResulttwice — once synchronously afterWCSession.sendMessageand again from the asyncerrorHandler. Flutter asserts on a double-completed result, which could trip the engine and silently break subsequent sends. The bridge now wraps every send in aResultResolverthat completes exactly once and always on the main thread; the eager success path stays so receivers don't need a reply handler, and the asyncerrorHandlerbecomes a no-op once success has already been reported.
0.2.1 - 2026-04-28 #
Changed #
- Tightened
description:to fit pana's 60–180 char window so the package scores full marks under "Provide a validpubspec.yaml". - Inlined
formatter: page_width: 160in this package'sanalysis_options.yamlso pana picks it up when scoring without the workspace root in scope. No source changes — every file already conformed at the project's 160-column width.
0.2.0 - 2026-04-26 #
Changed #
- voo_watch is now positioned as the phone↔watch BRIDGE. For Flutter UI on Wear OS, use the new sibling package
voo_wearinstead of scaffolding Compose. voo_watch:initdefault--platformis nowios(wasboth). Pass--platform android --variant composeif you still want a native Compose Wear OS module (for Tiles, Complications, or Watch Faces).voo_watch:init --platform android(without--variant compose) now prints a redirect tovoo_wearand exits without writing files.
Notes #
- No API changes. Existing apps using
VooWatch.instancekeep working untouched. - Apple Watch story is unchanged: the Swift plugin and SwiftUI scaffolding template stay.
0.1.0 - 2026-04-26 #
Added #
- Initial release.
VooWatchfacade with typed messages, application context, user info, and reachability stream.VooWatchHapticsfacade with cross-platform haptic types.VooWatchHealthfacade for sample passthrough from watchOS HealthKit and Wear OS Health Services.VooWatchComplicationsfacade for updating complications (watchOS) and tiles (Wear OS).- iOS plugin wrapping
WatchConnectivity. - Android plugin wrapping the Wearable Data Layer (
MessageClient,DataClient,CapabilityClient). dart run voo_watch:initCLI that scaffolds a SwiftUI watchOS target and a Compose Wear OS module wired to the Flutter app.FakeVooWatchTransportexported frompackage:voo_watch/testing.dartfor in-process widget tests.