Updated Answer April 2023
As of v2.9.0-1.0.pre, isAlwaysShown
is deprecated and you should use thumbVisibility
instead. Check jayjw’s more complete answer: https://stackoverflow.com/a/71357052/9777674
Original Answer June 2020
As of Flutter version 1.17, on Scrollbar
you can set isAlwaysShown
to true
, but you must set the same controller
for your Scrollbar
and your SingleChildScrollView
(and that applies to any other scrollable Widget as well).
Have in mind that, for the Scrollbar
to be visible, there must be enough items to scroll. If there are not, the Scrollbar
won’t be shown.
Full working example:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: MyWidget(),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final _scrollController = ScrollController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(15.0),
child: Center(
child: Column(
children: <Widget>[
// ...
Expanded(
child: Scrollbar(
controller: _scrollController, // <---- Here, the controller
isAlwaysShown: true, // <---- Required
child: SingleChildScrollView(
controller: _scrollController, // <---- Same as the Scrollbar controller
child: Text(
"Long Text Here ...",
textDirection: TextDirection.rtl,
style: TextStyle(fontSize: 17.2),
),
),
),
),
// ...
],
),
),
),
);
}
}