flutter_web_scroll 1.0.1 copy "flutter_web_scroll: ^1.0.1" to clipboard
flutter_web_scroll: ^1.0.1 copied to clipboard

A high-performance smooth scrolling package for Flutter web applications. Provides Lenis-style momentum scrolling, linear interpolation, elastic spring physics, and custom scroll behaviors. Perfect fo [...]

Flutter Web Scroll #

A high-performance, professional smooth scrolling package for Flutter web applications. Provides multiple scroll types including Lenis-style scrolling, linear interpolation, elastic spring physics, custom behaviors, and native browser scrolling.

Preview #

Without flutter_web_scroll #

Without smooth scroll

With flutter_web_scroll #

With smooth scroll

Features #

Multiple Scroll Types

  • Lenis-style: Premium exponential decay scrolling (default)
  • Linear: Constant speed interpolation
  • Elastic: Spring physics with bounce-back effect
  • Custom: Fine-tune your own scroll behavior
  • Native: Standard HTML web browser scrolling behavior

🎯 Key Features

  • Smooth, native-like scrolling experience
  • Momentum scrolling with configurable throw distance
  • Drag-to-scroll with 1:1 finger tracking
  • Configurable scroll speed and damping
  • Elastic overscroll support
  • High-performance 60fps animation
  • Zero dependencies (Flutter SDK only)

Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_web_scroll: ^1.0.0

Then run:

flutter pub get

Quick Start #

import 'package:flutter_web_scroll/flutter_web_scroll.dart';

final _scrollController = ScrollController();

SmoothScrollWeb(
  controller: _scrollController,
  config: SmoothScrollConfig.lenis(),
  child: ListView(
    controller: _scrollController,
    children: [
      // Your widgets here
    ],
  ),
)

Usage #

Basic Usage #

Wrap your scrollable widget with SmoothScrollWeb:

SmoothScrollWeb(
  controller: _scrollController,
  child: ListView(
    controller: _scrollController,
    children: [...],
  ),
)

Scroll Types #

Lenis-style Scrolling (Default)

Premium smooth scrolling with exponential decay:

SmoothScrollWeb(
  controller: _scrollController,
  config: SmoothScrollConfig.lenis(
    scrollSpeed: 1.2,      // Distance multiplier
    damping: 0.08,         // Lower = smoother/heavier
    enableMomentum: true,  // Enable throw scrolling
    momentumFactor: 0.5,   // Throw distance factor
  ),
  child: ListView(...),
)

Linear Scrolling

Constant speed interpolation:

SmoothScrollWeb(
  controller: _scrollController,
  config: SmoothScrollConfig.linear(
    scrollSpeed: 1.2,
    duration: 300,         // Animation duration in ms
    enableMomentum: true,
  ),
  child: ListView(...),
)

Elastic Scrolling

Spring physics with bounce-back:

SmoothScrollWeb(
  controller: _scrollController,
  config: SmoothScrollConfig.elastic(
    scrollSpeed: 1.2,
    springStiffness: 100.0,  // Higher = stiffer
    springDamping: 10.0,     // Higher = less bouncy
    enableElasticOverscroll: true,
    enableMomentum: true,
  ),
  child: ListView(...),
)

Custom Scrolling

Fine-tune your own behavior:

SmoothScrollWeb(
  controller: _scrollController,
  config: SmoothScrollConfig.custom(
    scrollSpeed: 1.5,
    damping: 0.06,         // Your custom damping
    enableMomentum: true,
    momentumFactor: 0.7,
  ),
  child: ListView(...),
)

Native HTML Web Scroll

Mimics standard browser scrolling behavior:

SmoothScrollWeb(
  controller: _scrollController,
  config: SmoothScrollConfig.native(
    scrollSpeed: 1.0,      // Standard browser speed
    enableMomentum: true,
    momentumFactor: 0.6,   // Natural momentum
  ),
  child: ListView(...),
)

Complete Example #

import 'package:flutter/material.dart';
import 'package:flutter_web_scroll/flutter_web_scroll.dart';

class MyScrollablePage extends StatefulWidget {
  @override
  State<MyScrollablePage> createState() => _MyScrollablePageState();
}

class _MyScrollablePageState extends State<MyScrollablePage> {
  final ScrollController _scrollController = ScrollController();

  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SmoothScrollWeb(
        controller: _scrollController,
        config: SmoothScrollConfig.lenis(
          scrollSpeed: 1.2,
          damping: 0.08,
        ),
        child: ListView.builder(
          controller: _scrollController,
          itemCount: 100,
          itemBuilder: (context, index) {
            return Container(
              height: 100,
              margin: EdgeInsets.all(8),
              decoration: BoxDecoration(
                color: Colors.blue.withOpacity(0.1),
                borderRadius: BorderRadius.circular(8),
              ),
              child: Center(
                child: Text('Item $index'),
              ),
            );
          },
        ),
      ),
    );
  }
}

Configuration Options #

SmoothScrollConfig Properties #

Property Type Default Description
scrollType SmoothScrollType lenis Type of scrolling behavior
scrollSpeed double 1.2 Multiplier for scroll distance
damping double 0.08 Damping factor (0.0-1.0, lower = smoother)
linearDuration int 300 Duration for linear scrolling (ms)
springStiffness double 100.0 Spring stiffness for elastic scrolling
springDamping double 10.0 Spring damping for elastic scrolling
enableMomentum bool true Enable momentum scrolling after drag
momentumFactor double 0.5 Momentum throw distance factor
enableElasticOverscroll bool true Enable elastic overscroll at boundaries
stopThreshold double 0.1 Distance threshold to stop scrolling (px)

Performance #

  • Runs at 60fps using Flutter's Ticker
  • Efficient interpolation calculations
  • Minimal memory footprint
  • Zero external dependencies

Platform Support #

  • ✅ Flutter Web
  • ✅ Flutter Desktop (Windows, macOS, Linux)
  • ⚠️ Flutter Mobile (works but native scrolling is recommended)

Best Practices #

  1. Use appropriate scroll types: Lenis-style is great for most cases, elastic for playful UIs, linear for predictable behavior, custom for fine-tuned control, and native for standard browser feel.

  2. Tune damping values: Lower damping (0.05-0.08) = smoother/heavier feel. Higher damping (0.12-0.2) = snappier/more responsive.

  3. Adjust scroll speed: Higher values (1.5-2.0) for faster scrolling, lower (0.8-1.0) for slower, more controlled scrolling.

  4. Disable momentum if needed: Set enableMomentum: false for precise, controlled scrolling without throw effects.

  5. Use elastic overscroll sparingly: Can be distracting in professional applications but great for playful interfaces.

Contributing #

Contributions are welcome! Please feel free to submit a Pull Request.

License #

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments #

Inspired by Lenis - a smooth scroll library for the web.

4
likes
150
points
161
downloads

Publisher

verified publisherzenithsyntax.com

Weekly Downloads

A high-performance smooth scrolling package for Flutter web applications. Provides Lenis-style momentum scrolling, linear interpolation, elastic spring physics, and custom scroll behaviors. Perfect for ListView, ScrollView, and custom scrollable widgets with 60fps animations and zero dependencies.

Repository (GitHub)
View/report issues

Topics

#flutter #flutter-web #smooth-scroll #scroll #lenis

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on flutter_web_scroll