FlutterFlow中Assets Audio Player无法暂停?如何引用播放实例
解决Assets Audio Player重复调用无法暂停的问题
你的问题根源在于每次调用assetsAP()函数时都会创建一个全新的AssetsAudioPlayer实例,第二次调用时操作的并不是之前正在播放的那个实例,自然无法实现暂停效果。
修改方案:复用同一个播放器实例
把播放器实例定义为全局变量,确保每次调用函数都操作同一个实例,同时添加状态检查避免重复加载音频:
// Automatic FlutterFlow imports import '/backend/backend.dart'; import '/backend/supabase/supabase.dart'; import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import '/custom_code/actions/index.dart'; // Imports other custom actions import '/flutter_flow/custom_functions.dart'; // Imports custom functions import 'package:flutter/material.dart'; // Begin custom action code // DO NOT REMOVE OR MODIFY THE CODE ABOVE! import 'package:assets_audio_player/assets_audio_player.dart'; // 定义全局播放器实例,确保复用同一个对象 final assetsAP = AssetsAudioPlayer.withId("0"); Future assetsAP() async { // 检查是否已经加载过目标音频,避免重复open final currentAudio = assetsAP.current.valueOrNull?.audio; const targetUrl = "https://firebasestorage.googleapis.com/v0/b/king-a1558.appspot.com/o/users%2F191vQKCdf8eBy1%2Fuploads%2F1674554237169000.mp3?"; if (currentAudio == null || currentAudio.path != targetUrl) { try { await assetsAP.open( Audio.network(targetUrl), autoStart: false, ); } catch (t) { // 处理音频加载失败 } } // 对同一个实例执行播放/暂停操作 assetsAP.playOrPause(); }
关键修改点说明
- 将
assetsAP实例从函数内部移到全局作用域,确保每次调用函数都操作同一个播放器对象 - 添加音频路径检查,避免重复调用
open加载同一个音频 - 保留原有的异常处理,确保加载失败时不会影响后续操作
内容的提问来源于stack exchange,提问作者speakupboy
相关产品推荐
相关产品推荐

