A plugin that offers widgets for Wear OS by Google

Overview

Flutter Wear Plugin

A plugin that offers Flutter support for Wear OS by Google (Android Wear).

To use this plugin you must set your minSdkVersion to 23.

Widgets

There currently three widgets provided by the plugin:

  • WatchShape: determines whether the watch is square or round.
  • AmbientMode: builder that provides what mode the watch is in. The widget will rebuild whenever the watch changes mode.

Example

Typically all three of these widgets would be used near the root of your app's widget tree:

class WatchScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return WatchShape(
      builder: (context, shape, child) {
        return AmbientMode(
          builder: (context, mode, child) {
            return mode == Mode.active ? ActiveWatchFace() : AmbientWatchFace();
          },
        );
      },
    );
  },
}

Old Requirements

You DO NOT need to modify these files anymore:

You can remove all the old wearable references from the previous release. This plugin automatically adds all required references and settings.

  1. build.gradle: wearable dependencies

  2. AndroidManifest.xml: WAKE_LOCK and android.hardware.type.watch and com.google.android.wearable.standalone.

  3. MainActivity.kt or MainActivity.java: all AmbientMode references.

Comments
  • compileOnly files('C:\\Android\\flutter\\bin\\cache\\artifacts\\engine\\android-x64\\flutter.jar') breaks build on non-windows environments

    compileOnly files('C:\\Android\\flutter\\bin\\cache\\artifacts\\engine\\android-x64\\flutter.jar') breaks build on non-windows environments

    https://github.com/fluttercommunity/flutter_wear_plugin/blob/87ef7bb7fd43b39bd26bd4d3f9c44f843498e46f/android/build.gradle#L49

    This line breaks builds on non-Windows environments.

    opened by sdstolworthy 5
  • Feature/null safety

    Feature/null safety

    Made it null safe.

    I also changed the way the widget builders work because I've never seen Widgets that work that way.

    I tested it on round and square emulators and ambient mode detection also works.

    opened by Rexios80 5
  • MissingPluginException

    MissingPluginException

    Any idea why I get MissingPluginException for getShape and isAmbient ?

    I tried starting the example from this package. Its starting on the emulator and works but it throws this exceptions everytime.

    Dart Unhandled Exception: MissingPluginException(No implementation found for method getShape on channel wear), stack trace: #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:157:7)
    E/flutter ( 9769): <asynchronous suspension>
    E/flutter ( 9769): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
    E/flutter ( 9769): #2      Wear.getShape (package:wear/src/wear.dart:60:29)
    E/flutter ( 9769): #3      _WatchShapeState.initState (package:wear/src/shape_widget.dart:43:19)
    E/flutter ( 9769): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58)
    E/flutter ( 9769): #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
    E/flutter ( 9769): #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
    E/flutter ( 9769): #7      Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20)
    E/flutter ( 9769): #8      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #9      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #10     StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
    E/flutter ( 9769): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #12     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #13     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #14     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #15     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #16     StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
    E/flutter ( 9769): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #18     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #20     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #22     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #23     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
    E/flutter ( 9769): #24     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #25     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
    E/flutter ( 9769): #26     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #27     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #28     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #29     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #32     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
    E/flutter ( 9769): #33     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #34     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
    E/flutter ( 9769): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #37     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #38     StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
    E/flutter ( 9769): #39     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #40     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #41     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
    E/flutter ( 9769): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #43     StatefulElement.update (package:flutter/src/widgets/framework.dart:4832:5)
    E/flutter ( 9769): #44     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #45     SingleChildRenderOb
    E/flutter ( 9769): [ERROR:flutter/shell/common/shell.cc(210)] Dart Unhandled Exception: MissingPluginException(No implementation found for method isAmbient on channel wear), stack trace: #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:157:7)
    E/flutter ( 9769): <asynchronous suspension>
    E/flutter ( 9769): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
    E/flutter ( 9769): #2      Wear.isAmbient (package:wear/src/wear.dart:71:29)
    E/flutter ( 9769): #3      _AmbientModeState.initState (package:wear/src/ambient_widget.dart:50:19)
    E/flutter ( 9769): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58)
    E/flutter ( 9769): #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
    E/flutter ( 9769): #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
    E/flutter ( 9769): #7      Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
    E/flutter ( 9769): #8      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #9      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #10     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
    E/flutter ( 9769): #11     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
    E/flutter ( 9769): #12     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
    E/flutter ( 9769): #13     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
    E/flutter ( 9769): #14     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #15     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #16     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
    E/flutter ( 9769): #17     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
    E/flutter ( 9769): #18     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
    E/flutter ( 9769): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
    E/flutter ( 9769): #20     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #21     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
    E/flutter ( 9769): #22     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #23     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
    E/flutter ( 9769): #24     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4791:11)
    E/flutter ( 9769): #25     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
    E/flutter ( 9769): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
    E/flutter ( 9769): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20)
    E/flutter ( 9769): #28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #29     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #30     StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
    E/flutter ( 9769): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #32     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #33     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #34     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #35     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    E/flutter ( 9769): #36     StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5)
    E/flutter ( 9769): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #38     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #39     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #40     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6125:14)
    E/flutter ( 9769): #41     Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
    E/flutter ( 9769): #42     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
    E/flutter ( 9769): #43     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
    E/flutter ( 9769): #44     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
    
    opened by emmaxCreative 3
  • Reply already submitted - Fatal exception

    Reply already submitted - Fatal exception

    Getting exemption after doing a swipe from left to right (on an emulator). Switching context with in-app software button works, switching context with the emulator back button works, switching context with gesture doesn't. Any ideas? Many thanks in advance!

    D/AndroidRuntime( 3419): Shutting down VM E/AndroidRuntime( 3419): FATAL EXCEPTION: main E/AndroidRuntime( 3419): Process: com.mjohnsullivan.flutterwear.wearexample, PID: 3419 E/AndroidRuntime( 3419): java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime( 3419): at io.flutter.view.FlutterNativeView$PlatformMessageHandlerImpl$1.reply(FlutterNativeView.java:197) E/AndroidRuntime( 3419): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:204) E/AndroidRuntime( 3419): at com.mjohnsullivan.flutterwear.wear.WearPlugin$handleShapeMethodCall$1.onApplyWindowInsets(WearPlugin.kt:61) E/AndroidRuntime( 3419): at android.support.v4.view.ViewCompat$ViewCompatApi21Impl$1.onApplyWindowInsets(ViewCompat.java:1307) E/AndroidRuntime( 3419): at android.view.View.dispatchApplyWindowInsets(View.java:9799) E/AndroidRuntime( 3419): at android.view.ViewGroup.dispatchApplyWindowInsets(ViewGroup.java:7080) E/AndroidRuntime( 3419): at android.view.ViewGroup.dispatchApplyWindowInsets(ViewGroup.java:7080) E/AndroidRuntime( 3419): at android.view.ViewRootImpl.dispatchApplyInsets(ViewRootImpl.java:1667) E/AndroidRuntime( 3419): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2080) E/AndroidRuntime( 3419): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1466) E/AndroidRuntime( 3419): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7189) E/AndroidRuntime( 3419): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) E/AndroidRuntime( 3419): at android.view.Choreographer.doCallbacks(Choreographer.java:761) E/AndroidRuntime( 3419): at android.view.Choreographer.doFrame(Choreographer.java:696) E/AndroidRuntime( 3419): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) E/AndroidRuntime( 3419): at android.os.Handler.handleCallback(Handler.java:873) E/AndroidRuntime( 3419): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 3419): at android.os.Looper.loop(Looper.java:193) E/AndroidRuntime( 3419): at android.app.ActivityThread.main(ActivityThread.java:6669) E/AndroidRuntime( 3419): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 3419): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) E/AndroidRuntime( 3419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) I/Process ( 3419): Sending signal. PID: 3419 SIG: 9 Application finished.

    opened by JFtechOfficial 1
  • Does not work at the latest SDK.

    Does not work at the latest SDK.

    Could you support the latest SDK version?

    Running "flutter packages get" in flutwear... The current Flutter SDK version is 0.4.4.

    Because flutwear depends on wear any which requires Flutter SDK version >=0.3.1 <0.4.0, version solving failed. pub get failed (1)

    opened by granoeste 1
  • APP ANR when click button on the side of watch

    APP ANR when click button on the side of watch

    android.os.MessageQueue.nativePollOnce Broadcast of Intent { act=android.intent.action.SCREEN_OFF }

    After Anr, the app will restart and all state will lost.

    opened by app97204 0
  • Fix android building

    Fix android building

    Fixes:

    FAILURE: Build failed with an exception.
    
    * Where:
    Build file '/Users/rexios/.pub-cache/hosted/pub.dartlang.org/wear-1.1.0/android/build.gradle'
    
    * What went wrong:
    Could not compile build file '/Users/rexios/.pub-cache/hosted/pub.dartlang.org/wear-1.1.0/android/build.gradle'.
    > startup failed:
      General error during conversion: Unsupported class file major version 63
    
      java.lang.IllegalArgumentException: Unsupported class file major version 63
    
      	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:199)
      	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:180)
      	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:166)
      	at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:287)
      	at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:81)
      	at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:251)
    
    ...
    

    Also updated the example app

    opened by Rexios80 0
  • Support for WearOS tiles

    Support for WearOS tiles

    Does this plugin support building WearOS tiles using Flutter? If not is support for this planned, or is there some workaround? Perhaps implementing it in the MainActivity.kt file using Kotlin?

    opened by NikolajDL 0
  • Update ambient_widget.dart

    Update ambient_widget.dart

    I fixed the onUpdate function so it really gets triggered everytime the ambient mode updates.

    I also added the WearMode parameter to it. This is very useful for setState or change listener.

    opened by BugsOverBugs 0
  • Ambient Mode not working in release mode

    Ambient Mode not working in release mode

    AmbientMode worked fine in debug mode, but when I build apk in release mode, it doesn't work.

    The flutter should have rebuilt the screen right before it entered ambient mode, but it seemed that rebuild didn't occur. The screen just stopped when it entered ambient mode. (I'm using Samsung Galaxy Watch 5)

    image

    I tried to get the event log, but nothing was printed. (Other prints were received correctly.)

    opened by gongbj0113 1
Owner
Flutter Community
A central place for all community made Flutter packages. To get started, see the README of the 'community' repository.
Flutter Community
Google Places - Google places autocomplete widgets for flutter.

flutter_google_places Google places autocomplete widgets for flutter. Getting Started For help getting started with Flutter, view our online documenta

Flutter Community 267 Jan 5, 2023
A migration of Google Maps Application with Flutter & Google Maps APIs including: Maps SDK for Android & IOS, Places API & polylines

google_maps A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

TAD 1 Mar 4, 2022
Flutter Google Places Autocomplete Widgets

google_maps_webservice General Information This is the Dart Library for Google Maps Webservices. You can find the Google Maps Platform Documentation h

Hadrien Lejard 144 Dec 29, 2022
Flutter package to enable clustering of location markers on Google Maps using widgets specific to each location.

flutter_google_maps_widget_cluster_markers This widget implements a very specific adaptation of google_maps_cluster_manager, allowing different ,marke

Kek Tech 2 Jan 6, 2023
A flutter plugin for Google Maps

IMPORTANT: This plugin is no longer under development Why? We initially built this plugin to fill an early gap in flutter. Since then, Google has made

AppTree Software, Inc 415 Dec 29, 2022
A Flutter plugin for integrating Google Maps in iOS, Android and Web applications

flutter_google_maps A Flutter plugin for integrating Google Maps in iOS, Android and Web applications. It is a wrapper of google_maps_flutter for Mobi

MarchDev Toolkit 86 Sep 26, 2022
A flutter plugin that's decodes encoded google poly line string into list of geo-coordinates suitable for showing route/polyline on maps

flutter_polyline_points A flutter plugin that decodes encoded google polyline string into list of geo-coordinates suitable for showing route/polyline

Adeyemo Adedamola 75 Oct 25, 2022
A Flutter plugin which provides 'Picking Place' using Google Maps widget

Google Maps Places Picker Refractored This is a forked version of google_maps_place_picker package, with added custom styling and features.

Varun 5 Nov 13, 2022
Plugin for 'flutter_map' providing advanced caching functionality, with ability to download map regions for offline use. Also includes useful prebuilt widgets.

flutter_map_tile_caching A plugin for the flutter_map library to provide an easy way to cache tiles and download map regions for offline use. Installa

Luka S 69 Jan 3, 2023
Flutter Google Maps Tutorial

Flutter Google Maps Tutorial YouTube Video Setup Get an API Key at https://cloud.google.com/maps-platform/ Enable Maps SDK for Android, Maps SDK for i

Marcus Ng 85 Nov 30, 2022
Flutter Tutorial - Google Map with Live Location Tracking

Flutter Tutorial - Google Map with Live Location Tracking Build Google Map app with Live Location Tracking in Flutter. ✌   App Preview Android Preview

Samuel Adekunle 10 Dec 22, 2022
Aplications with google maps and geolocation

Aplications with google maps and geolocation

Richardson Tsavo 4 Jul 26, 2022
Flutter Google Map Example - Day 41

Flutter Google Map Example - Day 41 class Afgprogrammer extends Flutter100DaysOfCode { video() { return { "title": "Flutter Google Map Exa

Mohammad Rahmani 74 Jan 3, 2023
Google Maps Services API Client for Dart

google_maps_services_dart (EXPERIMENTAL) API Specification for Google Maps Platform This Dart package is automatically generated by the OpenAPI Genera

Tuyen VU 0 Nov 1, 2021
A Flutter app using Google Maps SDK & Directions API

Flutter Maps A Flutter app using Google Maps SDK & Directions API Plugins The plugins used in this project are: google_maps_flutter geolocator flutter

Youhaan bootwala 1 Mar 18, 2022
A Flutter app using Google Maps SDK & Directions API

Flutter Maps A Flutter app using Google Maps SDK & Directions API Plugins The plugins used in this project are: google_maps_flutter geolocator flutter

Varun CN 2 Apr 19, 2022
This is a Flutter package that uses the Google Maps API to make a TextField that tries to autocomplete places as the user types, with simple smooth animations, making a nice UI and UX.

search_map_place This is a Flutter package that uses the Google Maps API to make a TextField that tries to autocomplete places as the user types, with

Lucas Bernardi 127 Oct 22, 2022
Easy Google Maps for Flutter

easy_google_maps Easy Google Maps for Flutter on Web and Mobile Getting Started Mobile Follow setup for Mobile Here Web Good to go! EasyGoogleMaps(

Rody Davis 69 Jul 19, 2022
Flutter Google Map Example

Flutter Google Map Example A Flutter application demonstrate google map. Preview Listener and Marker Compass MapTypes Plugin google_maps_flutter from

Bhavik Makwana 67 Sep 14, 2021