【问题标题】:How to open audio file from file manager and play that audio file using Flutter app如何从文件管理器打开音频文件并使用 Flutter 应用程序播放该音频文件
【发布时间】:2021-12-06 05:09:28
【问题描述】:

我是 Flutter 开发的新手,我被困在一个程序中,我想通过从文件管理器中选择来播放音频文件。我可以从文件管理器打开音频文件,但我不知道如何播放该音频文件。 这个你能帮我吗。 我正在使用此代码 -

import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class FilePickerDemo extends StatefulWidget {
@override
_FilePickerDemoState createState() => _FilePickerDemoState();
}

我正在使用它进行文件选择和保存文件我想知道如何播放保存文件

class _FilePickerDemoState extends State<FilePickerDemo> {
void _pickFiles() async {
_resetState();
try {
  _directoryPath = null;
  _paths = (await FilePicker.platform.pickFiles(
    type: _pickingType,
    allowMultiple: _multiPick,
    onFileLoading: (FilePickerStatus status) => print(status),
    allowedExtensions: ['mp3'],
  ))
      ?.files;
} on PlatformException catch (e) {
  _logException('Unsupported operation' + e.toString());
} catch (e) {
  _logException(e.toString());
}
if (!mounted) return;
setState(() {
  _isLoading = false;
  _fileName =
  _paths != null ? _paths!.map((e) => e.name).toString() : '...';
  _userAborted = _paths == null;
});
}

【问题讨论】:

    标签: flutter audio-player


    【解决方案1】:

    您可以使用https://pub.dev/packages/just_audio 包播放音频。

    import 'package:just_audio/just_audio.dart';
    
    final _player = AudioPlayer();
        
    
    playAudio() async {
        try {
          await _player.setFilePath(widget.audioPath);
        } catch (e) {
          log("Error loading audio source: $e");
        }
        _player.play();
      }
    

    【讨论】:

      【解决方案2】:

      另一个方便的包是AudioPlayers,它也可以缓存本地音频文件。

      这是一个非常基本的示例,它具有播放、暂停和停止对传递到有状态小部件的本地音频的引用的按钮,以帮助您入门(主要基于这篇 Medium 文章)Medium Article

      提醒您将音频保存在您的本地文件中,如下所示

      并在您的 yaml 文件中添加引用并获取依赖项

        assets:
          - assets/audio/
      
      import 'package:audioplayers/audioplayers.dart';
      import 'package:flutter/material.dart';
      
      class AudioManagerExample extends StatefulWidget {
        const AudioManagerExample({required this.audioName, Key? key}) : super(key: key);
      
        final String audioName;
      
        @override
        _AudioManagerExampleState createState() => _AudioManagerExampleState();
      }
      
      class _AudioManagerExampleState extends State<AudioManagerExample> {
        AudioPlayer audioPlayer = AudioPlayer();
        late AudioCache audioCache;
      
        @override
        void initState() {
          audioCache = AudioCache(fixedPlayer: audioPlayer);
          audioCache.load('audio/${widget.audioName}.mp3');
          super.initState();
        }
      
        @override
        void dispose() {
          audioCache.clearAll();
          audioPlayer.dispose();
          super.dispose();
        }
      
        @override
        Widget build(BuildContext context) {
          return Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    audioCache.play('audio/${widget.audioName}.mp3');
                  });
                },
                child: Text('Play ${widget.audioName}'),
              ),
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    audioPlayer.pause();
                  });
                },
                child: Text('Pause ${widget.audioName}'),
              ),
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    audioPlayer.stop();
                  });
                },
                child: Text('Stop ${widget.audioName}'),
              ),
            ],
          );
        }
      }
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-13
        • 2012-07-31
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多