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;
我试图从中传递列表位置并得到这个错误:参数类型 '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;