Flutterでスライドが表示されます_positions.isNotEmpty異常解決方法
昨日他のページからトップページに戻り、スライドbanner図の切り替えでエラーが見つかり、クラッシュは起こらなかったが、いつも気分が悪い.
bannerViewはpageViewコンポーネントによって実現されるため、PageControllerをトリガするanimateToPageメソッドで発生したこのエラーを、animateToPageメソッドをjumpToメソッドに置き換えるか、それともこのエラーが戻ってくるかを試してみました.これはPageControllerオブジェクトにエラーが発生したためであるべきであることを示しています.ソースコードの確認を続けます.PageControllerはScrollControllerコントローラから継承され、scroll_Controllerファイルグローバル検索'positions.isNotEmpty'はこのエラーの根源を見つけました
ソースコードによると、animateToメソッドには断言があります.positions.isNotEmpty、このエラーを投げ出して、検索を続けます.positions.isNotEmptyは変数hasClientsを指していることを発見し、animateToメソッドを実行する前にhsaClientsメソッドを判断すればよいことは明らかです.
ただ_pageController.hasClientsがtrueの場合、つまり_PageControllerがpageViewに依存している場合に、animateToPageメソッドを呼び出すことができます.ここで注意したいのは、animateToPageメソッドに加えて、position、position、jumpToなどのメソッドを呼び出すと、この問題が戻ります.特に、2回目のセンタ構築ページでは注意が必要です.
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回目のセンタ構築ページでは注意が必要です.