我上周开始使用 flutter,并且在音频播放器包上遇到了这个问题。我正在 Udemy 与 Dart 一起举办 Flutter 开发训练营。我几乎遵循了视频中的所有内容,但我收到了一条无法解决的巨大错误消息。
这是我的代码:
import 'package:flutter/material.dart';
import 'package:audioplayers/audioplayers.dart';
void main() => runApp(XylophoneApp());
class XylophoneApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.lightBlue,
body: SafeArea(
child: Container(
child: Center(
child: TextButton(
onPressed: (){
final player = AudioCache();
player.play('assets/note1');
},
child: Text(
'click me'
),
),
),
),
),
),
);
}
}
这是我收到的错误消息: 运行 Gradle 任务“assembleDebug”... e:在依赖项中发现不兼容的类。从类路径中删除它们或使用“-Xskip-metadata-version-check”来抑制错误 e: C:/Users/victo/.gradle/caches/transforms-2/files-2.1/24fa3aa8d2270e5eb067bbe36e9b7563/jetified-kotlin-stdlib-1.5.10.jar!/META-INF/kotlin-stdlib.kotlin_module:模块已编译与 Kotlin 版本不兼容。其元数据的二进制版本是1.5.1,预期版本是1.1.15...(消息比这个大得多)
编译错误。查看日志了解更多详情
尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。
21 秒内构建失败 异常:Gradle 任务 assembleDebug 失败,退出代码为 1
我看到了这条消息,其元数据的二进制版本是1.5.1,预期版本是1.1.15,但我不知道如何处理它或如何解决它。
这是我的 pubspec.yaml:
name: xylophone
description: A new Flutter application.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
audioplayers: ^0.19.1
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- assets/
在 gradle 文件中,转到 build.gradle(项目:YourApp)。然后,更改以下代码(在构建脚本中):
来自
ext.kotlin_version = '1.3.50'
到
ext.kotlin_version = '1.4.32'
或者可用的最新版本的 Kotlin,并确保也更新 Android Studio 上的 Kotlin 版本
按照说明操作后,您的错误将得到解决。
您可以查看错误日志
Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.15
,但尝试1.3.50
,我有带有音频播放器的应用程序,我正在使用此版本,如果它不起作用,请使用1.1.15
或更改版本后建议的版本卸载应用程序并运行flutter clean然后再次运行
尝试在 build.gradle 中降级到较低的 kotlin 版本
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
}
如果不起作用,也请参考此答案
迁移指南
依赖关系: 音频播放器:^0.x.x
到
依赖关系: 音频播放器:^1.0.1
https://github.com/bluefireteam/audioplayers/blob/main/migration_guide.md
AudioCache已死,Sources万岁 主要变化之一是我希望“杀死”AudioCache API,因为它给用户带来了巨大的混乱(尽管我们尽了最大努力记录所有内容)。
我们仍然有 AudioCache 类,但它的 API 专门用于将资源文件转换为本地文件、缓存它们并提供路径。然而,最终用户通常不需要使用它,因为 AudioPlayer 本身现在能够播放来自任何源的音频。
什么是来源?这是一个密封类,可以是以下之一:
UrlSource:从互联网上的远程 URL 获取音频 DeviceFileSource:访问用户设备中的文件,可能由文件选择器选择 AssetSource:播放与您的应用程序捆绑在一起的资源,通常位于资源目录中 BytesSource(仅限某些平台):直接传递音频字节(从任何地方读取)。 如果您使用 AssetSource,AudioPlayer 将自动使用其 AudioCache 实例(如果未更改,则默认为全局缓存)。这统一了 AudioPlayer 下的所有播放 API,并完全删除了大多数用户的 AudioCache 细节。
如果您在我的情况下使用最新版本的 audioplayers
^1.0.1
那么您的代码应该如下所示
onPressed: () async {
final player = AudioPlayer();
await player.play(AssetSource('note1.wav'));
},
祝您学习一切顺利
根据最新的稳定版本,
AudioCache()
处理得不好,你可以尝试这个
ElevatedButton(
onPressed: () {
final player = AudioPlayer();
player.play(AssetSource('s1.wav'));
},
child: const Text(
'Click Me',
),
),
注意:在
player.play(AssetSource('s1.wav'))
中 - 在 s1.wav 的位置只需给出文件名,而不是给出整个路径,如 asset/s1.wav
音频播放器:^6.1.0
child: TextButton(
onPressed: () async {
final player = AudioPlayer();
await player.setSource(AssetSource('note1.wav'));
await player.resume();
},
child: Text('Click Me')
),