【发布时间】:2020-09-06 13:40:45
【问题描述】:
我正在尝试将animation 库添加到我的项目中,但我遇到了问题。 之前的代码是这样的
Widget _buildScaffold(BuildContext context) {
return Scaffold(
body: PageView.builder(itemBuilder: (context,index)=>_pageList[index]),
extendBody: true,
bottomNavigationBar: Opacity(
opacity: 0.98,
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
selectedItemColor: Theme.of(context).accentColor,
currentIndex: index,
onTap: (index) {
setState(() {
this.index = index;
});
// _pageController.jumpToPage(index);
},
items: _bottomList),
),
);
}
当我把PageView.builder改成PageTransitionSwitcher时,按照例子,child的值为_pageList[index],动画可用,切换页面时状态丢失。当我尝试使用PageView作为孩子时,可以设置状态KeepAlive被保留,但动画消失(因为它被判断为同一个widget)
Widget _buildScaffold(BuildContext context) {
return Scaffold(
body: PageTransitionSwitcher(
transitionBuilder: (
Widget child,
Animation<double> primaryAnimation,
Animation<double> secondaryAnimation,
) {
return FadeThroughTransition(
animation: primaryAnimation,
secondaryAnimation: secondaryAnimation,
child: child,
);
},
child: PageView.builder(itemBuilder: (_,index)=>_pageList[index]),
),
extendBody: true,
bottomNavigationBar: Opacity(
opacity: 0.98,
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
selectedItemColor: Theme.of(context).accentColor,
currentIndex: index,
onTap: (index) {
setState(() {
this.index = index;
});
// _pageController.jumpToPage(index);
},
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home), title: Text(I18n.of(context).home)),
BottomNavigationBarItem(
icon: Icon(
CustomIcons.leaderboard,
),
title: Text(I18n.of(context).rank)),
BottomNavigationBarItem(
icon: Icon(Icons.favorite),
title: Text(I18n.of(context).quick_view)),
BottomNavigationBarItem(
icon: Icon(Icons.search),
title: Text(I18n.of(context).search)),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
title: Text(I18n.of(context).setting)),
]),
),
);
}
那么,有没有办法同时保留动画和页面状态?
【问题讨论】: