Flutter 2.2.3:无法将参数类型“Animation<dynamic>”分配给参数类型“Animation<double>”

问题描述

我试图从这里传递列表位置并收到此错误:无法将参数类型“动画”​​分配给参数类型“动画”​​。我按照 youtuber 的步骤操作,可以在此处查看完整代码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),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(),>     );   } }

解决方法

scaleAnimations 字段被声明为 List<Animation>,并且由于 Animation 是通用的,这与 List<Animation<dynamic>> 隐式相同。因此,运行时会将列表中的任何元素解释为 Animation<dynamic>,即使它们实际上具有 Animation<double> 类型。

要解决此问题,您只需更改字段声明:

List<Animation<double>> scaleAnimations;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...