I'm using ScrollController on my StatefulWidget
and Later in this widget, I'm trying to get the _scrollController.position.maxScrollExtent
property and I'm getting null.
but when I change anything on my screen (tap, scroll, rotate, etc.) the error disappear.
Should I add some sort of delay to the _scrollController.position.maxScrollExtent calculation? and if so, how?
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late ScrollController _scrollController = ScrollController();
double _scrollControllerOffset = 0.0;
_scrollListener() {
setState(() {
_scrollControllerOffset = _scrollController.offset;
});
}
@override
void initState() {
_scrollController = ScrollController();
_scrollController.addListener(_scrollListener);
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => ProductsProvider(),
child: Directionality(
textDirection: TextDirection.rtl,
child: Scaffold(
body: CustomScrollView(
controller: _scrollController,
slivers: [
const SliverPersistentHeader(
delegate: MainAppBar(),
pinned: true,
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return _buildBody(context);
}, childCount: 1),
),
],
),
),
),
);
}
Stack _buildBody(context) {
return Stack(
children: [
Text(_scrollController.position.maxScrollExtent); // <== here I use 'maxScrollExtent'
],
);
}
}
_scrollListener() {
if(_scrollController.hasClients){
setState(() {
_scrollControllerOffset = _scrollController.offset;
});
}
}