上下文:我将在我的应用程序中有几个可滚动的列表,并且我总是希望在添加项目时将它们滚动到最新的项目。
问题:我的 ListView.builders 和添加项目的地方在我的小部件树中相距甚远。通过构造函数传递所有这些滚动控制器似乎非常尴尬。
我的解决方案:当我目前正在使用 Provider 进行练习时,我想出了一个使用 Provider 的可行解决方案:
class ScrollControllerProvider with ChangeNotifier {
ScrollController _paneController = ScrollController();
//setting up all other controllers here later
get paneController {
return _paneController;
}
void scrollHistory() {
WidgetsBinding.instance?.addPostFrameCallback((_) {
if (_paneController.hasClients) {
_paneController.jumpTo(_paneController.position.maxScrollExtent);
}
});
}
}
我会将所有滚动控制器添加到该提供程序,并在我需要的地方获取我需要的内容。它已经适用于其中之一,但 reddit 上的某个人告诉我这不是一个好主意,因为应该处置滚动控制器。我对生命周期的话题还不是很了解,并且很难对此进行评估。
问题:在这里使用 Provider 真的是个坏主意吗?你能帮我理解为什么吗?如果是,解决此问题的最佳方法是什么?