gpt4 book ai didi

Flutter - 改变 TabBarView 的动画

转载 作者:IT老高 更新时间:2023-10-28 12:31:22 29 4
gpt4 key购买 nike

我用 DefaultTabController 实现了一个基本的 TabBar 和 TabBarView,见下面的代码。

class MyApp2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: BOTTOM_TABS,
child: Scaffold(
appBar: AppBar(title: const Text('Bottom App Bar')),
body: _tabBarView(),
bottomNavigationBar: _bottomTabBar(),
),
);
}

_tabBarView() {
return TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [
Container(
color: Colors.blue,
),
Container(
color: Colors.orange,
),
Container(
color: Colors.lightGreen,
),
Container(
color: Colors.red,
),
],
);
}

_bottomTabBar() {
return TabBar(
tabs: [
Tab(
icon: new Icon(Icons.home),
),
Tab(
icon: new Icon(Icons.public),
),
Tab(
icon: new Icon(Icons.group),
),
Tab(
icon: new Icon(Icons.person),
)
],
);
}
}

效果很好!现在我要做的是从默认动画更改两个选项卡之间的动画。但是我找不到一种简单的方法。

经过一番研究,我似乎需要使用自定义 TabController 并以某种方式使用它的 animateTo方法。对我来说,这似乎是一个相当大的改变,只是为了改变动画。 我想知道这是正确的方法,还是我缺少一些更轻松的方法来更改tabviews之间的默认动画?

如果有人能给我一些好的资源来为我指明正确的方向,我将不胜感激。

最佳答案

这并不难,只需使用 TabController(要做到这一点,您需要使用 SingleTickerProviderStateMixin )和 AnimatedBuilder。

enter image description here

class MyApp2 extends StatefulWidget {
@override
_MyApp2State createState() => _MyApp2State();
}

class _MyApp2State extends State<MyApp2> with SingleTickerProviderStateMixin {
TabController _tabController;

@override
void initState() {
_tabController = TabController(length: 4, vsync: this);
super.initState();
}

_tabBarView() {
return AnimatedBuilder(
animation: _tabController.animation,
builder: (BuildContext context, snapshot) {
return Transform.rotate(
angle: _tabController.animation.value * pi,
child: [
Container(
color: Colors.blue,
),
Container(
color: Colors.orange,
),
Container(
color: Colors.lightGreen,
),
Container(
color: Colors.red,
),
][_tabController.animation.value.round()],
);
},
);
}

_bottomTabBar() {
return TabBar(
controller: _tabController,
labelColor: Colors.black,
tabs: [
Tab(
icon: new Icon(Icons.home),
),
Tab(
icon: new Icon(Icons.public),
),
Tab(
icon: new Icon(Icons.group),
),
Tab(
icon: new Icon(Icons.person),
)
],
);
}

@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 4,
child: Scaffold(
appBar: AppBar(title: const Text('Bottom App Bar')),
body: _tabBarView(),
bottomNavigationBar: _bottomTabBar(),
),
);
}
}

关于Flutter - 改变 TabBarView 的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889604/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com