AnimationController 命名参数 'vsync' 未定义

AnimationController The named parameter 'vsync' isn't defined

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

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

注:

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

-周围class确实有: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!

升级flutter后出现同样的问题。重新启动 IDE 解决了问题。

在你的pubspec.yml

将其更改为:

environment:
  sdk: ">=2.8.0 <3.0.0"

flutter pub get

在 Android Studio 中使缓存无效并重新启动,您应该可以开始了。

来源:https://github.com/flutter/flutter/issues/62752#issuecomment-667744745

flutter升级后

  1. 正在重新启动 IDE
  2. 如有必要,请重新启动计算机

有几件事(不幸的是没有明确指出)可以帮助我解决这样的问题:

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

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

当然,其中一些策略需要注意。更有经验的开发人员肯定会提供更多详细信息,但我没有遇到这种方法的问题。

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

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

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

并且不要忘记继承 Tickerprovider。

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

我正在使用 VS Code。

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

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

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

environment:
sdk: '>=2.8.0 <3.0.0'

第 2 步:打开终端并 运行

flutter upgrade

第 3 步:在第 2 步之后,通过 运行 执行此命令

获取所有包
flutter pub get 

第四步:然后用这个命令清理flutter

flutter clean   

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

vsync 将再次出现。

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

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

如果您仍然遇到与 vsync 相同的错误:这 你可能没有 with TickerProviderStateMixin 在你的状态定义

像这样更正您的状态定义

class _BookListState extends State<BookList> with TickerProviderStateMixin {
  final BookHelper _bookHelper = BookHelper.instance;
}

我是如何在 Android Studio 中解决的?

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

environment:
  sdk: ">=2.1.0<3.0.0"

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

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

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

在我的例子中,我在 android studio 中设置了 dart 和 flutter SDK 路径后解决了这个问题。

添加这个怎么样,

class _AnimationScreenState 扩展状态 ///

with SingleTickerProviderStateMixin {

/// }

这对我有用

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

然后 运行 以下命令:

  • flutter升级
  • flutter pub get
  • 颤抖干净

并重启IDE

什么都不做just invalid the cache and restart your IDE

  1. 颤动干净
  2. 重启你的IDE

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

@override
void initState() {
super.initState();
_controller = AnimationController(duration: expandDuration, vsync: this);
}