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

Flutter 2.2.3 : The argument type 'Animation<dynamic>' can't be assigned to the parameter type 'Animation<double>'

我试图从中传递列表位置并得到这个错误:参数类型 'Animation' 不能分配给参数类型 'Animation'。我按照 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),
>       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(),
>     );   } }

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

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

List<Animation<double>> scaleAnimations;