Package selection guidance compiled from public package information, community data, and project usage.
A customizable scrollbar designed specifically for Flutter web applications. It enhances user experience by providing a visually appealing and functional scroll indicator that adapts to web-specific interactions. The scrollbar supports custom styling, positioning, and behavior adjustments, making it easy to integrate into web-based Flutter projects. It works seamlessly with standard scrollable widgets like ListView and SingleChildScrollView, ensuring smooth scrolling on desktop and tablet browsers.
Use cases
Customizing scrollbars in web apps
Improving UX for long content lists
Enhancing visual design of web interfaces
Integrating with responsive layouts
Supporting desktop and tablet scrolling
Creating consistent scroll indicators across web platforms
Key features
Web-optimized scrollbar design
Fully customizable appearance
Supports vertical and horizontal scrolling
Easy integration with ScrollViews
Configurable track and thumb styles
Responsive behavior on different screen sizes
Suitable for
Flutter developers building web applications
Designers seeking polished scroll UIs
Projects requiring consistent web scrollbar behavior
Apps with extensive scrollable content
Teams focused on web-specific UX improvements
Considerations
Not intended for mobile platforms
Requires explicit setup for each scrollable widget
Limited to web platform only
May need additional styling for dark mode compatibility
Performance impact on very large scrollable lists
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
flutter_web_scrollbar
A flutter web plugin for adding a customizable scrollbar to your web project.
Adding the scrollbar to your webpage requires a few mandatory steps:
The content of your page must be the child of a Scrollable Widget (i.e: SingleChildScrollView
The scrollable widget and the FlutterWebScrollbar must be children in a parent Stack
The scrollable widget must be listed first in the Stack
The scrollable widget must have a ScrollController attached to it
The FlutterWebScrollbar must receive a callBack function that accepts a DragUpdateDetails as a parameter.
Example
import'package:flutter/material.dart';
import'package:flutter_web_scrollbar/flutter_web_scrollbar.dart';
classLandingPageextendsStatefulWidget{
LandingPage({Key key}) : super(key: key);
@overrideState<StatefulWidget> createState() {
return_LandingPageState();
}
}
class_LandingPageStateextendsState<LandingPage> {
ScrollController _controller;
@overridevoidinitState() {
//Initialize the scrollController
_controller = ScrollController();
super.initState();
}
voidscrollCallBack(DragUpdateDetails dragUpdate) {
setState(() {
// Note: 3.5 represents the theoretical height of all my scrollable content. This number will vary for you.
_controller.position.moveTo(dragUpdate.globalPosition.dy * 3.5);
});
}
@overrideWidgetbuild(BuildContext context) {
returnScaffold(
backgroundColor: Colors.white,
body: Stack(
children: [
Container(
child: SingleChildScrollView(
//Assign the controller to my scrollable widget
controller: _controller,
child: Column(
children: [
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
color: Colors.black,
),
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
color: Colors.red,
),
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
color: Colors.green,
),
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
color: Colors.blue,
),
],
),
),
),
FlutterWebScroller(
//Pass a reference to the ScrollCallBack function into the scrollbar
scrollCallBack,
//Add optional values
scrollBarBackgroundColor: Colors.white,
scrollBarWidth: 20.0,
dragHandleColor: Colors.red,
dragHandleBorderRadius: 2.0,
dragHandleHeight: 40.0,
dragHandleWidth: 15.0,
),
],
),
);
}
}
Things to note about the above code:
Inside of our scrollCallBack function, we're updating the ScrollController that is attached to our scrollable widget. It's important to note that in the example, we are using a value of 3.5 to represent the theoretical height of our page content. The theoretical height of your page content may be different. For example, if you have to full height container as your content, you may want to use 2 rather than 3.5. Getting this value as correct as possible plays a big role in how accurate your scrolling will be.
Visit the repository here to submit issue reports and request changes
If you'd like to help with the upkeep for the plugin, email me at caira102797@gmail.com