rotary_scrollbar 1.1.0 copy "rotary_scrollbar: ^1.1.0" to clipboard
rotary_scrollbar: ^1.1.0 copied to clipboard

PlatformAndroid

circular scrollbar for Wear OS devices. It can be controlled with rotary input and it includes haptic feedback.

pub package tests license code style: flutter_lints

rotary_scrollbar #

A Flutter package for Wear OS that provides a circular scrollbar optimized for rotary input and round screens.
Enhance scrollable widgets like ListView, PageView, and CustomScrollView with native-feeling interactions.

Demo


Features #

  • 🎯 Native Experience: Curved scrollbar designed for circular Wear OS displays.
  • 🔄 Rotary Input: Full support for rotating bezels/crowns with haptic feedback (via RotaryScrollbar).
  • Auto-Hide: Scrollbar fades after inactivity (configurable duration and animations).
  • 🎨 Customizable: Adjust colors, padding, width, and animation curves.
  • 📜 Scrollable-Ready: Works with any ScrollController or PageController.
  • 📱 Device Support: Galaxy Watch 4/5, Pixel Watch, and Wear OS 3+ devices.

RoundScrollbar vs RotaryScrollbar #

Feature RoundScrollbar RotaryScrollbar
Visual Scrollbar ✅ Curved track/thumb ✅ Inherits from RoundScrollbar
Rotary Input ✅ With haptic feedback
Page Transitions ✅ Smooth page animations
Auto-Hide

When to Use #

  • RotaryScrollbar: Default choice for Wear OS apps using rotary input.
  • RoundScrollbar: For touch-only interactions or custom scroll logic.

Quick Start #

Minimal Example #

RotaryScrollbar(
  controller: ScrollController(),
  child: ListView.builder(
    itemBuilder: (_, index) => ListTile(title: Text('Item $index')),
  ),
)

Setup #

1. Add Dependency #

dependencies:
  rotary_scrollbar: ^1.1.0

2. Configuration for Wear OS (Android) #

Rotary Input (wearable_rotary)

Add to MainActivity.kt:

import android.view.MotionEvent
import com.samsung.wearable_rotary.WearableRotaryPlugin

class MainActivity : FlutterActivity() {
    override fun onGenericMotionEvent(event: MotionEvent?): Boolean {
        return when {
            WearableRotaryPlugin.onGenericMotionEvent(event) -> true
            else -> super.onGenericMotionEvent(event)
        }
    }
}

Vibration Permission

Add to AndroidManifest.xml:

<uses-permission android:name="android.permission.VIBRATE"/>

Usage #

With RoundScrollbar (Basic) #

RoundScrollbar(
  controller: ScrollController(),
  child: ListView.builder(
    itemBuilder: (_, index) => ListTile(title: Text("Item $index")),
  ),
)

With RotaryScrollbar (Full Features) #

RotaryScrollbar(
  controller: PageController(),
  child: PageView(
    children: [Page1(), Page2(), Page3()],
  ),
)

Advanced Configuration #

Customize appearance #

RotaryScrollbar(
  width: 12,                  // Thickness
  padding: 16,                // Distance from screen edge
  trackColor: Colors.grey,    // Scrollbar track
  thumbColor: Colors.blue,    // Scrollbar thumb
  autoHideDuration: Duration(seconds: 5),
  // ...other params
)

Disable Haptics #

RotaryScrollbar(
  hasHapticFeedback: false,   // Turn off vibrations
  // ...
)

Supported Devices #

  • Samsung Galaxy Watch 4/5/6

  • Google Pixel Watch

  • Other Wear OS 3+ devices with rotary input.

11
likes
150
points
146
downloads

Publisher

unverified uploader

Weekly Downloads

circular scrollbar for Wear OS devices. It can be controlled with rotary input and it includes haptic feedback.

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, vibration, wearable_rotary

More

Packages that depend on rotary_scrollbar