我有一个带有StatelessWidget的ScrollController,在这个组件的子组件中,有一个StatefulWidget在它的initState中添加了scrollController.addListener
class MyStatelessWidget extends StatelessWidget {
final ScrollController scrollController = ScrollController();
@override
Widget build(BuildContext context) {
return Column(
children: [
Placeholder(), //Complex child
Placeholder(), //Complex child
Placeholder(), //
MyStatefulWidget(
scrollController: scrollController,
) // Complex child
],
);
}
}
class MyStatefulWidget extends StatefulWidget {
final ScrollController scrollController;
const MyStatefulWidget({
@required this.scrollController,
});
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
return Container();
}
@override
void initState() {
print('Scroll listener added');
widget.scrollController.addListener(() {
print('Scroll position changed');
});
super.initState();
}
}我的问题是,当build的父级MyStatelessWidget执行,有时我失去滚动侦听器为什么?我怎么才能修好它呢?
发布于 2020-11-21 11:07:13
_myStatefulWidget正在给build打电话,但没有给initState打电话。因此,您没有在新控制器上注册侦听器。
解决方案是使用状态管理解决方案,以便在小部件之间共享控制器。查看提供程序包。
https://stackoverflow.com/questions/64941531
复制相似问题