pou*_*ews 12 flutter flutter-layout flutter-animation
目标:按下一个按钮,让它切换到另一个带有动画过渡的页面。
为此,我正在使用 AnimatedSwitcher。
下面是我的代码:
class WelcomeScreenSwitcher extends State<RandomWords>{
Widget calledWidget;
void switchPage(int newNumber, context) {
if (newNumber == 1) {
setState(() {calledWidget = welcomeScreen(context);},);
} else if (newNumber == 2) {
setState(() {calledWidget = learnMoreScreen(context);},);}
}
@override
Widget build(BuildContext context) {
if (calledWidget == null) {
switchPage(1, context);
}
return AnimatedSwitcher(
duration: Duration(milliseconds: 5000),
child: calledWidget,
);
Widget welcomeScreen(context){
return Scaffold({body: Column(children: [
RaisedButton(onPressed: () {switchPage(2, context);}, child: Text('B'),),],
);
});
}
Widget learnMoreScreen(context){
return Scaffold({body: Column(children: [
RaisedButton(onPressed: () {switchPage(2, context);}, child: Text('B'),),],
);
});
}
}
Run Code Online (Sandbox Code Playgroud)
该代码是功能性的。它实际上会在两个页面之间切换,但没有动画与之相配。
在开发过程中的某个时候,我得到了动画,但后来它就停止了,我不知道为什么。我不记得改变任何关于我如何调用 AnimatedSwitcher 的具体内容。
如果它有任何用处,热重载也不再起作用。我需要重新启动应用程序才能进行任何更改注册。在开始处理 AnimatedSwitcher 之前,它曾经正常运行。
Ami*_*khi 37
如果您要切换的新小部件与以前的小部件类型相同,请将key
属性设置为另一个值以获取该动画
例如,这AnimatedSwitcher
不起作用:
AnimatedSwitcher(
duration: const Duration(milliseconds: 1000),
child: (condition)
? Container(
width: 100,
height: 100,
color: Colors.red,
)
: Container(
width: 100,
height: 100,
color: Colors.blue,
),
);
Run Code Online (Sandbox Code Playgroud)
因为我们要在两个Container
s之间切换,AnimatedSwitcher
无法理解它们的区别,所以没有动画它们的切换。如果我们key
在那些Container
s 中设置不同的属性,那么AnimatedSwitcher
可以理解它们是不同的并且确实为它们的开关设置动画。
像这样:
AnimatedSwitcher(
duration: const Duration(milliseconds: 1000),
child: (condition)
? Container(
key: ValueKey<int>(0),
width: 100,
height: 100,
color: Colors.red,
)
: Container(
key: ValueKey<int>(1),
width: 100,
height: 100,
color: Colors.blue,
),
);
Run Code Online (Sandbox Code Playgroud)
你可以试试这个
class _AniSwitchState extends State<AniSwitch> {
Widget calledWidget;
@override
Widget build(BuildContext context) {
void switchPage(int newNumber) {
if (newNumber == 1) {
setState(() {calledWidget = WelcomeScreen();},);
} else if (newNumber == 2) {
setState(() {calledWidget = LearnMoreScreen();},);}
}
if (calledWidget == null) {
switchPage(1);
}
return Column(
children: <Widget>[
AnimatedSwitcher(
duration: Duration(milliseconds: 2000),
child: calledWidget
),
RaisedButton(
child: const Text('Increment'),
onPressed: () {
setState(() {
switchPage(2);
});
},
),
],
);
}
}
class WelcomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Text("Welcome"),
],
);
}
}
class LearnMoreScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Text("hello world"),
],
);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3398 次 |
最近记录: |