Flutter ScrollController AssertionError:'_positions.isNotEmpty':关闭路由时 ScrollController 未附加到任何滚动视图

问题描述 投票:0回答:1

我在 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
实例?

附加信息:

  • 滚动监听功能正常工作 滚动。
flutter routes scroll navigator observers
1个回答
0
投票

fireWhenCloseQuestionDetails()
QuestionBankController
打电话给
onClose
怎么样?

@override
void onClose() {
  print("On close");
  fireWhenCloseQuestionDetails();
  questionDetailsScrollCtrl.dispose();
  super.onClose();
}

可能如果您的

QuestionBankController
绑定到
QuestionDetailsScreen

© www.soinside.com 2019 - 2024. All rights reserved.