我在 Flutter 应用程序中遇到与 ScrollController 相关的错误。我有一个 QuestionDetailsScreen,其中使用 ScrollController 来监视滚动位置。当 QuestionDetailsScreen 路由关闭时,我想在控制器中触发一个函数
fireWhenCloseQuestionDetails()
。为此,我实现了一个自定义 NavigatorObserver。但是,我收到错误:
'_positions.isNotEmpty':ScrollController 未附加到任何滚动视图
这是我的 QuestionBankController:
class QuestionBankController extends GetxController {
ScrollController questionDetailsScrollCtrl = ScrollController();
@override
void onInit() {
questionDetailsScrollCtrl = ScrollController();
questionDetailsScrollCtrl.addListener(_onScroll);
super.onInit();
}
void _onScroll() {
// This function will be called every time the scroll position changes
print("Scroll position: ${questionDetailsScrollCtrl.position.pixels}");
}
void fireWhenCloseQuestionDetails() {
print("Fire");
print(questionDetailsScrollCtrl.position.pixels);
}
@override
void onClose() {
print("On close");
questionDetailsScrollCtrl.dispose();
super.onClose();
}
}
我正在使用自定义
NavigatorObserver
在 fireWhenCloseQuestionDetails()
路线关闭时触发 QuestionDetailsScreen
:
class MyNavigatorObserver extends NavigatorObserver {
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
if (route.settings.name == "/questiondetailsscreen") {
Future.delayed(Duration.zero, () {
QuestionBankController().fireWhenCloseQuestionDetails();
});
}
}
}
问题似乎可能与调用
QuestionBankController
时创建 fireWhenCloseQuestionDetails()
的新实例有关。如何确保在关闭路线时使用与我的 QuestionBankController
关联的正确的 QuestionDetailsScreen
实例?
附加信息:
用
fireWhenCloseQuestionDetails()
的QuestionBankController
打电话给onClose
怎么样?
@override
void onClose() {
print("On close");
fireWhenCloseQuestionDetails();
questionDetailsScrollCtrl.dispose();
super.onClose();
}
可能如果您的
QuestionBankController
绑定到 QuestionDetailsScreen
。