1 dart flutter animationcontroller
我尝试从中传递列表位置并收到此错误:参数类型“动画”无法分配给参数类型“动画”。我按照 YouTube 用户的步骤操作,可以在此处查看完整代码: https: //github.com/codespiration/petadoption/blob/master/menu_frame.dart。真的很感谢你们的帮助
> @override void initState() {
> super.initState();
> _animationController = AnimationController(vsync: this, duration: duration);
> scaleAnimation =
> Tween<double>(begin: 1.0, end: 0.6).animate(_animationController);
> smallerScaleAnimation =
> Tween<double>(begin: 1.0, end: 0.5).animate(_animationController);
>
> scaleAnimations = [
> Tween<double>(begin: 1.0, end: 0.7).animate(_animationController),
> Tween<double>(begin: 1.0, end: 0.6).animate(_animationController),
> Tween<double>(begin: 1.0, end: 0.5).animate(_animationController),
> ];
> _animationController.forward(); }
>
> Widget buildScreenStack(int position) {
> final deviceWidth = MediaQuery.of(context).size.width;
> return AnimatedPositioned(
> duration: duration,
> top: 0,
> bottom: 0,
> left: menuOpen ? deviceWidth * 0.35 : 0.0,
> right: menuOpen ? deviceWidth * -0.65 : 0.0,
> child: ScaleTransition(
> scale: scaleAnimations[position],
> child: GestureDetector(
> onTap: () {
> if (menuOpen) {
> setState(() {
> menuOpen = false;
> _animationController.reverse();
> });
> }
> },
> child: AbsorbPointer(
> absorbing: menuOpen,
> child: Stack(
> children: <Widget>[
> Material(
> animationDuration: duration,
> borderRadius: BorderRadius.circular(menuOpen ? 30.0 : 0.0),
> child: screens[position],
> ),
> ],
> ),
> ),
> ),
> ),
> ); }
>
> @override Widget build(BuildContext context) {
> final deviceWidth = MediaQuery.of(context).size.width;
> return Stack(
> children: finalStack(),
> ); } }
Run Code Online (Sandbox Code Playgroud)
该scaleAnimations字段被声明为List<Animation>,并且由于Animation是通用的,因此这与 隐式相同List<Animation<dynamic>>。因此,运行时会将列表中的任何元素解释为Animation<dynamic>,即使它们实际上具有类型Animation<double>。
要解决此问题,您只需更改字段声明:
List<Animation<double>> scaleAnimations;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4913 次 |
| 最近记录: |