wearthat 0.0.2-alpha1
wearthat: ^0.0.2-alpha1 copied to clipboard
A one-stop shop for all things related to WearOS (Including sending messages between devices, tiles, fitted widgets and more).
Flutter Wear β #
Flutter wear is a library for flutter aspiring to be a one-stop shop for all related features for android wear (We're not there yet, but will slowly get there π).
This library is still in very very early development, and breaking changes may be introduced every version !
Planned features π #
- β Add support for tile lifecycle events (onTileAddEvent() for example)
- β Support tile animations
- β Support hot reload for tiles (only in preview).
- β Incorporate app themes
- β Improve UI exceptions
- β Create wear widgets system (like
package:flutter/material.dart) - β Upgrade tiles to new version (1.2.0)
- β Add Tests
- β Automate tiles syncing
- β Add support for health services for wear apps and tiles (
androidx.wear.protolayout.expression.PlatformHealthSourcesfor tiles, research more for in app service)
Installing #
-
With Dart:
$ dart pub add flutter_wear -
With Flutter:
$ flutter pub add flutter_wear -
Manually:
dependencies:
benchmark: ^0.3.0
Don't forget to set android compileSdkVersion to 34 and minSdkVersion to 28 in the build.gradle !
android {
compileSdkVersion 34
...
defaultConfig {
minSdkVersion 28
}
}
Features β¨ #
Communication between devices π #
Get all available nodes :
final nodes = Wear.getNodes();
Send message to device :
// Path is like route, to know where to direct to message
Wear.send(WearMessage.string("PATH", data), nodeId: watch.id /* or phone */);
Send message to all devices (Fit for cases where only one device is connected) :
Wear.send(WearMessage.string("PATH", data));
Listen for incoming messages :
Wear.listen("PATH", _onIncomingMessage);
// Dont forget to removeListener !
Wear.removeListener("PATH", _onIncomingMessage);

Tiles π« #
Tiles can finally be made using Flutter π !
The following code :
class WeatherTile extends Tile<WeatherInfo> {
const WeatherTile();
@override
Future<WeatherInfo?> createState() {
return FakeWeatherProvider().getWeather();
}
@override
TileWidget build(TileContext context, WeatherInfo? state) {
if (state == null) return const Text("Something went wrong...");
return PrimaryLayout(
body: _Forecast(temperature: state.temperature),
title: _Location(location: state.location),
chip: _Humidity(humidity: state.humidity),
);
}
@override
Map<String, TileResourceProvider> resources(TileContext context, WeatherInfo? state) => {
'forecast_cloudy_day': TileResources.asset("assets/weather/forecast_cloudy_day.png"),
'forecast_humidity': TileResources.asset("assets/weather/forecast_humidity.png"),
'location': TileResources.asset("assets/weather/location.png"),
};
}

