#flutter #flutter-animation
#flutter #flutter-анимация
Вопрос:
У меня возникают некоторые проблемы с использованием PageController.animateToPage при навигации по нижней панели, которую я загрузил сhttps://pub.dev/packages/bottom_navy_bar. Когда я хочу переключаться между первой и третьей страницами в моей нижней панели, это на какой-то момент загружает страницы моддла, но в других ситуациях это работает отлично. Я использую просмотр страниц, чтобы показывать страницы с помощью pagecontroller, включая анимацию.
Мой просмотр страницы:
body: SizedBox.expand(
child: PageView(
controller: _pageController,
onPageChanged: (i) {
setState(() {
selectedPos = i;
if (selectedPos == 0) {
setState(() {
_isActiveHome = true;
_isActiveMiddle = false;
_isActiveProfile = false;
});
} else if (selectedPos == 1) {
setState(() {
_isActiveMiddle = true;
_isActiveHome = false;
_isActiveProfile = false;
});
} else if (selectedPos == 2) {
setState(() {
_isActiveProfile = true;
_isActiveHome = false;
_isActiveMiddle = false;
});
}
});
},
children: [
AnimatedOpacity(
opacity: _isActiveHome ? 1.0 : 0.0,
duration: Duration(milliseconds: 500),
child: HomePage()),
AnimatedOpacity(
opacity: _isActiveMiddle ? 1.0 : 0.0,
duration: Duration(milliseconds: 500),
child: FavoritesPage()),
AnimatedOpacity(
opacity: _isActiveProfile ? 1.0 : 0.0,
duration: Duration(milliseconds: 500),
child: ProfilePage())
],
),
),
Там я включаю свои 3 страницы, которые будут использоваться в нижней панели, и придаю им эффект затухания.
Моя нижняя панель навигации:
bottomNavigationBar: ClipRRect(
clipBehavior: Clip.hardEdge,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(25), topRight: Radius.circular(25)),
child: BottomNavyBar(
selectedIndex: selectedPos,
showElevation: true,
itemCornerRadius: 15,
curve: Curves.easeInBack,
onItemSelected: (i) {
setState(() => selectedPos = i);
_pageController.animateToPage(i,
duration: Duration(milliseconds: 1500),
curve: Curves.fastLinearToSlowEaseIn);
},
mainAxisAlignment: MainAxisAlignment.spaceAround,
items: [
BottomNavyBarItem(
inactiveColor: Colors.grey[700],
activeColor: Colors.blue,
textAlign: TextAlign.center,
icon: ImageIcon(
AssetImage('assets/images/home-run.png'),
size: 28,
),
title: Text(
"Главная",
style: TextStyle(fontSize: 18),
)),
BottomNavyBarItem(
inactiveColor: Colors.grey[700],
activeColor: Colors.purple,
textAlign: TextAlign.center,
icon: ImageIcon(
AssetImage('assets/images/main.png'),
size: 23,
),
title: Text(
"Избранное",
style: TextStyle(fontSize: 15),
)),
BottomNavyBarItem(
inactiveColor: Colors.grey[700],
activeColor: Colors.red,
textAlign: TextAlign.center,
icon: ImageIcon(
AssetImage('assets/images/user.png'),
size: 27,
),
title: Text(
"Профиль",
style: TextStyle(fontSize: 18),
))
],
),
Там у меня есть моя нижняя панель, где я размещаю _pageController и анимацию.
Итак, мой вопрос в том, как я могу избежать загрузки средней страницы в animateToPage? Потому что каждый том, когда я хочу переключаться между 1-й и 3-й страницами, загружается на короткое время. Может кто-нибудь помочь с этим?