You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:12:53