【问题标题】:Unable to load asset: error when loading an .mp3 file Flutter无法加载资产:加载 .mp3 文件时出错 Flutter
【发布时间】:2020-04-07 16:26:07
【问题描述】:

我正在使用 audioplayers 包向我的应用程序添加声音,但最初构建时没有播放声音。在加载文件时热重启面团后,我得到了这个异常:

E/flutter (32175): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Unable to load asset: assets/assets/click.mp3
E/flutter (32175): #0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:221:7)
E/flutter (32175): <asynchronous suspension>
E/flutter (32175): #1      AudioCache._fetchAsset (package:audioplayers/audio_cache.dart:60:29)
E/flutter (32175): #2      AudioCache.fetchToMemory (package:audioplayers/audio_cache.dart:67:30)
E/flutter (32175): <asynchronous suspension>
E/flutter (32175): #3      AudioCache.load (package:audioplayers/audio_cache.dart:82:37)
E/flutter (32175): #4      AudioCache.getAbsoluteUrl (package:audioplayers/audio_cache.dart:140:23)
E/flutter (32175): #5      AudioCache.play (package:audioplayers/audio_cache.dart:103:24)
E/flutter (32175): #6      _MapScreenState.build.<anonymous closure> (package:fixit_cloud_biking/Screens/map_screen.dart:1239:46)
E/flutter (32175): #7      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter (32175): #8      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter (32175): #9      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (32175): #10     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter (32175): #11     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter (32175): #12     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:199:7)
E/flutter (32175): #13     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:467:9)
E/flutter (32175): #14     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter (32175): #15     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:117:9)
E/flutter (32175): #16     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter (32175): #17     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:115:18)
E/flutter (32175): #18     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:7)
E/flutter (32175): #19     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter (32175): #20     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter (32175): #21     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter (32175): #22     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter (32175): #23     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter (32175): #24     _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter (32175): #25     _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter (32175): #26     _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter (32175): #27     _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter (32175): #28     _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter (32175): 

我确实将文件放在包含我用于图标的所有图像的同一资产文件夹中,因此pubspec.yaml 文件中的缩进是正确的。 问题不应该是文件命名,因为我使用驼峰式命名或单个单词命名(从带有空格的图像命名中学到的教训..)。 值得一提的是,如果我将文件拖放到assets文件夹中,我会收到错误消息。我尝试删除文件夹,重新创建它,然后拖放工作,但只有一次..第二次添加的文件会引发错误。 这是应该播放声音的按钮:

IconButton(
                        icon: Image.asset('assets/centerMapButton.png'),
                        iconSize: 60,
                        onPressed: () async {
                          await widget.cache.play('assets/click.mp3',
                              volume: 50, mode: PlayerMode.MEDIA_PLAYER);
                          print('Center map button pressed');
                          _mapController.move(userLocation, 16);
                        }),

并且AudioCache()被声明为AudioCache cache = new AudioCache();

【问题讨论】:

  • 第二次添加文件后,您是否重新启动(通过停止并重新启动)您的应用
  • 我尝试了应用程序正在运行和未运行的时间。我确实解决了文件加载问题,因为事实证明不必指定路径,因为插件直接查看资产文件夹。 play('assets/click.mp3') 是错误的,play('click.mp3') works as expected.. I did noticed from the error Unable to load assets: assets/assets/click.mp3` 'assets/' 出现了两次,所以我尝试省略它并且它起作用了。我仍然必须解决拖放文件添加问题,因为使用 finder 复制它们可以工作,但显然有问题..
  • 这真的很奇怪
  • 是的..我将尝试将项目文件夹移动到不同的驱动器上,看看是否有什么不同..
  • @Vincenzo 这实际上是设计使然。您可以在此处阅读文档:github.com/luanpotter/audioplayers/blob/master/doc/…

标签: flutter assets


【解决方案1】:

尝试更改此设置 资产/点击.mp3 至 点击.mp3

我在忽略路径中的“assets/”时遇到了同样的错误,它会从本地无缝播放声音。 Audioplayers 假设它的默认路径是 assets/

【讨论】:

  • 嗨。欢迎并感谢您的回答。幸运的是,我确实发现了这一点,并且感谢 MidhumMP 评论,我明白了原因。再次感谢并欢迎加入社区。​​span>
【解决方案2】:

如果您未在 pubspec.yaml 中设置资产位置,just_audio 中可能会发生这种情况。

flutter:
  assets:
    - audio/

这告诉 Flutter 您在项目的根目录中有一个 audio 文件夹,用于保存音频资产。

完成之后,您应该能够设置资产并像这样播放它:

await player.setAsset('audio/cow.mp3');
player.play();

如果您在路径中拼写错误,也会发生该错误,但我假设您已经检查过了。

【讨论】:

    【解决方案3】:

    清除资产文件夹对我有用:

    await AudioPlayer.clearAssetCache();
    

    清除插件的内部资产缓存目录。什么时候调用这个 应用程序的资产已更改以强制重新获取资产 资产包。

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2020-04-28
      • 2021-05-10
      • 2020-04-11
      • 2021-06-21
      • 2020-10-12
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多