80

AnimationController 停止工作,因为不知何故 vsync 不再是命名参数。

这行代码停止工作。

controller = AnimationController(duration: Duration(seconds: 3), vsync: this);

它现在显示一条错误消息:

The named parameter 'vsync' isn't defined.
Try correcting the name to an existing named parameter's name, or defining a named parameter with the name 'vsync'.dartundefined_named_parameter

我在两个不同的应用程序中使用了完全相同的代码,在其中一个应用程序中,我只是将淡入淡出的文本动画作为热修复删除,但在另一个应用程序中,我需要一个真正的修复。最近有没有人看到这个问题?

笔记:

- 这个完全相同的代码已经工作了几个月,并且在更新后停止工作。

- 周围的班级确实有:with TickerProviderStateMixin

class FadingText extends StatefulWidget {
  final String text;
  final int seconds;
  final TextStyle style;

  FadingText({this.text, this.seconds, this.style});

  @override
  _FadingTextState createState() => _FadingTextState();
}

class _FadingTextState extends State<FadingText> with TickerProviderStateMixin {
  AnimationController controller;
  Animation animation;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: FadeTransition(
        opacity: animation,
        child: Text(widget.text, style: widget.style,),
      ),
    );
  }

  @override
  void initState() {
    super.initState();

    controller = AnimationController(duration: Duration(seconds: widget.seconds), vsync: this);
    animation = Tween(begin: 0.5, end: 1.0).animate(controller);

    animation.addStatusListener((status) {
      if (status == AnimationStatus.completed) { controller.reverse(); }
      else if (status == AnimationStatus.dismissed) { controller.forward(); }
    });

    controller.forward();
  }


  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

}
Flutter Doctor


[✓] Flutter (Channel master, 1.21.0-6.0.pre.140, on Mac OS X 10.15.5 19F101, locale en-MX)
    • Flutter version 1.21.0-6.0.pre.140 at /Users/luisharo/Developer/flutter
    • Framework revision 7884420a0a (25 hours ago), 2020-07-31 20:20:00 +0200
    • Engine revision 280bbfc763
    • Dart version 2.10.0 (build 2.10.0-2.0.dev bd528bfbd6)

 
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/luisharo/Library/Android/sdk
    • Platform android-29, build-tools 29.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.5)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.5, Build version 11E608c
    • CocoaPods version 1.8.4

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 3.6)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.7761
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)

[✓] IntelliJ IDEA Community Edition (version 2019.2.4)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.8052

[✓] VS Code (version 1.47.3)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.13.1

[✓] Connected device (4 available)
    • JKM LX3 (mobile)       • 7MLNW19723003608                     • android-arm64  • Android 9 (API 28)
    • iPhone 11 Pro (mobile) • 675C24C4-7682-4DFE-8037-062893405EE7 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-13-5
      (simulator)
    • Web Server (web)       • web-server                           • web-javascript • Flutter Tools
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 84.0.4147.105

• No issues found!
4

16 回答 16

126

在你的pubspec.yml

将其更改为:

environment:
  sdk: ">=2.8.0 <3.0.0"

flutter pub get

在 Android Studio 中使缓存无效并重新启动,你应该好好去。

信用:https ://github.com/flutter/flutter/issues/62752#issuecomment-667744745

于 2020-08-03T12:32:17.673 回答
34

发生的情况是,@required在推出 null-safety 期间,语法被迁移到现在只是 be required。这是有效的 new-Dart,但如果您在打开编辑器的情况下升级,它将具有陈旧的构建规则。只需运行flutter clean并重新启动您的 IDE,就可以了。

希望不需要重新启动计算机、更改互联网提供商等。

于 2020-08-18T00:54:34.883 回答
23

一些可以帮助我解决此类问题的事情(不幸的是没有明确指出):

**编辑:我建议按顺序执行这些操作,希望问题能在您到达列表末尾之前得到解决。

  • 运行颤振升级
  • 运行 flutter pub get
  • 跑干净
  • 重启IDE
  • 改变颤振通道
  • 在这种情况下,将最低 SDK 版本从 2.7.0 更改为 2.8.0。

当然,其中一些策略有一些警告。更有经验的开发人员肯定会提供更多细节,但我没有遇到这种方法的问题。

于 2020-08-08T17:20:05.787 回答
19

升级颤振后有同样的问题。重新启动 IDE 解决了这个问题。

于 2020-08-03T09:58:12.357 回答
13

当我升级到 Flutter 1.22 时遇到了同样的问题。

我正在使用 VS 代码。

只需运行:Flutter Clean在终端中并重新启动您的 IDE。那应该可以解决问题!

于 2020-10-15T10:12:48.723 回答
6

如果您仍然在使用 vsync 时遇到同样的错误:您的 State 定义中可能没有 TickerProviderStateMixin

像这样更正您的状态定义

class _BookListState extends State<BookList> with TickerProviderStateMixin {
  final BookHelper _bookHelper = BookHelper.instance;
}
于 2021-01-04T11:49:23.067 回答
5

我已经给出了 5 个步骤,并按照上述相同的顺序应用了所有步骤,我认为您的问题将得到解决。

第 1 步:将 pubspec.yaml 中的 SDK 版本更改为 2.8

environment:
sdk: '>=2.8.0 <3.0.0'

第二步:打开终端并运行

flutter upgrade

第 3 步:在第 2 步之后,通过运行此命令获取所有包

flutter pub get 

第 4 步:然后使用此命令清理颤振

flutter clean   

第 5 步:关闭 IDE(如 VS Code、Android Studio)然后重新打开它。就这样!!!

vsync 将再次出现。

除了垂直同步,LinearGradient 中的颜色属性也丢失了,在我应用所有这些步骤之后,颜色属性和垂直同步重新出现。

于 2020-10-29T07:05:23.283 回答
4

升级颤振后。

  1. 重新启动 IDE
  2. 如有必要,重新启动计算机
于 2020-08-07T10:12:21.033 回答
3

我如何在 Android Studio 中解决它?

首先,以前的答案可能是错误的,因为我没有更改我的 SDK 范围

environment:
  sdk: ">=2.1.0<3.0.0"

我在我的 dart 文件中编写了代码(vsync),我知道 Android Studio 显示错误但不在乎,只需编写您的代码:

AnimationController _animationController = AnimationController(
  duration: Duration(seconds: 3),
  vsync: this,
);

之后,关闭您的项目,然后再次打开它。系统可以自己理解。就这样 !你可以看到我的截图证明

在此处输入图像描述

于 2021-01-10T18:05:36.987 回答
1

只需重新启动 IDE 即可为我解决此问题

并且不要忘记继承 Tickerprovider。

于 2020-09-26T19:16:19.930 回答
1

我遇到了同样的问题,我升级了 SDK,然后使缓存无效并重新启动,它对我有用。

在此处输入图像描述

于 2020-11-03T12:59:02.130 回答
1

不要做任何事just invalid the cache and restart your IDE

  1. 扑干净
  2. 重启你的IDE
于 2021-06-03T16:53:23.160 回答
0

就我而言,我在 android studio 中设置了 dart 和 flutter SDK 路径后解决了这个问题。

于 2021-02-15T09:34:39.107 回答
0

怎么加这个,

类 _AnimationScreenState 扩展状态 ///

with SingleTickerProviderStateMixin {

/// }

于 2021-03-05T02:42:55.473 回答
0

这对我有用

将 pubspec.yaml 中的 SDK 版本更改为 '>=2.8.0 <3.0.0'

然后运行以下命令:

  • 颤振升级
  • 扑吧酒吧
  • 扑干净

并重启IDE

于 2021-04-15T10:26:35.747 回答
0

您必须将该行放在 initState() 方法中,如下所示:

@override
void initState() {
super.initState();
_controller = AnimationController(duration: expandDuration, vsync: this);
}
于 2021-07-14T17:05:43.250 回答