#flutter
Вопрос:
Метод _warpToCurrentIndex в TabBarViewState включает обработку (_currentIndex-предыдущий индекс).abs()> 1, но зачем с ним нужно иметь дело? Я не вижу, какую проблему нужно решать.
Я думаю, что достаточно непосредственно выполнить следующую обработку
_pageController.animateToPage(
_currentIndex, duration: kTabScrollDuration, curve: Curves.ease);
Зачем вам нужны атрибуты _childrenWithKey и _childrenWithKey? Почему вам нужно сначала прыгать, а затем анимировать изображение:
_pageController.jumpToPage(начальная страница); ожидание _pageController.animateToPage(_currentIndex, длительность: kTabScrollDuration, кривая: Кривые.простота);
Future<void> _warpToCurrentIndex() async {
if (!mounted)
return Future<void>.value();
if (_pageController.page == _currentIndex.toDouble())
return Future<void>.value();
final int previousIndex = _controller.previousIndex;
if ((_currentIndex - previousIndex).abs() == 1)
return _pageController.animateToPage(_currentIndex, duration: kTabScrollDuration, curve: Curves.ease);
////Why need special handling (_currentIndex-previousIndex).abs()> 1
assert((_currentIndex - previousIndex).abs() > 1);
final int initialPage = _currentIndex > previousIndex
? _currentIndex - 1
: _currentIndex 1;
final List<Widget> originalChildren = _childrenWithKey;
setState(() {
_warpUnderwayCount = 1;
_childrenWithKey = List<Widget>.from(_childrenWithKey, growable: false);
final Widget temp = _childrenWithKey[initialPage];
_childrenWithKey[initialPage] = _childrenWithKey[previousIndex];
_childrenWithKey[previousIndex] = temp;
});
_pageController.jumpToPage(initialPage);
await _pageController.animateToPage(_currentIndex, duration: kTabScrollDuration, curve: Curves.ease);
if (!mounted)
return Future<void>.value();
setState(() {
_warpUnderwayCount -= 1;
if (widget.children != _children) {
_updateChildren();
} else {
_childrenWithKey = originalChildren;
}
});
}