Flutterでスライドが表示されます_positions.isNotEmpty異常解決方法


昨日他のページからトップページに戻り、スライドbanner図の切り替えでエラーが見つかり、クラッシュは起こらなかったが、いつも気分が悪い.
Unhandled Exception: 'package:flutter/src/widgets/scroll_controller.dart': 
Failed assertion: line 110 pos 12: '_positions.isNotEmpty': ScrollController not attached to any scroll views.
#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:42:39)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:38:5)
#2      ScrollController.position 

bannerViewはpageViewコンポーネントによって実現されるため、PageControllerをトリガするanimateToPageメソッドで発生したこのエラーを、animateToPageメソッドをjumpToメソッドに置き換えるか、それともこのエラーが戻ってくるかを試してみました.これはPageControllerオブジェクトにエラーが発生したためであるべきであることを示しています.ソースコードの確認を続けます.PageControllerはScrollControllerコントローラから継承され、scroll_Controllerファイルグローバル検索'positions.isNotEmpty'はこのエラーの根源を見つけました
 Future animateTo(
    double offset, {
    @required Duration duration,
    @required Curve curve,
  }) {
    assert(_positions.isNotEmpty, 'ScrollController not attached to any scroll views.');
    final List> animations = List>(_positions.length);
    for (int i = 0; i < _positions.length; i += 1)
      animations[i] = _positions[i].animateTo(offset, duration: duration, curve: curve);
    return Future.wait(animations).then((List _) => null);
  }

ソースコードによると、animateToメソッドには断言があります.positions.isNotEmpty、このエラーを投げ出して、検索を続けます.positions.isNotEmptyは変数hasClientsを指していることを発見し、animateToメソッドを実行する前にhsaClientsメソッドを判断すればよいことは明らかです.
        if(_pageController.hasClients) {
          _pageController.animateToPage(
            _curIndex,
            duration: Duration(milliseconds: 300),
            curve: Curves.linear,
          );
        }

ただ_pageController.hasClientsがtrueの場合、つまり_PageControllerがpageViewに依存している場合に、animateToPageメソッドを呼び出すことができます.ここで注意したいのは、animateToPageメソッドに加えて、position、position、jumpToなどのメソッドを呼び出すと、この問題が戻ります.特に、2回目のセンタ構築ページでは注意が必要です.