Flutter音频缓存播放插件cached_s5_audio的使用

Flutter音频缓存播放插件cached_s5_audio的使用

cached_s5_audio

cached_s5_audio 是一个用于 S5 CID 的简单缓存音频小部件。

演示

使用

查看示例

这是一个基于 s5 构建的库。有关更多详细信息,请参阅该库。

基本用法:

CachedS5Audio(
    cid: cid!, // CID 字符串表示
    s5: s5!, // S5 单例
)

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 cached_s5_audio 插件。

import 'package:cached_s5_audio/cached_s5_audio.dart';
import 'package:cached_s5_audio_exmaple/src/s5.dart';
import 'package:cached_s5_manager/cached_s5_manager.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:s5/s5.dart';

void main() {
  runApp(const Demo());
}

class Demo extends StatelessWidget {
  const Demo({super.key});

  // 这是你的应用的根组件。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: CachedS5AudioDemo(),
    );
  }
}

class CachedS5AudioDemo extends StatefulWidget {
  const CachedS5AudioDemo({super.key});

  [@override](/user/override)
  State<CachedS5AudioDemo> createState() => _CachedS5AudioDemoState();
}

class _CachedS5AudioDemoState extends State<CachedS5AudioDemo> {
  String? cid;
  final TextEditingController _cidController = TextEditingController(
      text: "z2H7G8Z25ajNkXqn3o1A5Eam7pmdPangcNk2VFViqM993fhxpDhg");
  S5? s5;
  Logger logger = Logger();
  CachedS5Manager? cacheManager;

  [@override](/user/override)
  void initState() {
    _initS5();
    _initCache();
    super.initState();
  }

  void _initCache() async {
    cacheManager?.init();
  }

  void _initS5() async {
    // 这是一个示例 S5 节点,使用自己的节点以获得最佳性能
    s5 = await initS5("https://s5.jptr.tech", "hive", null);
    cacheManager = CachedS5Manager(s5: s5!);
    setState(() {}); // 更新 UI
  }

  void _submitCID() async {
    if (s5 != null) {
      setState(() {
        cid = _cidController.text;
      });
    }
  }

  void _clearCache() async {
    cacheManager?.clear();
  }

  void _clearImage() async {
    setState(() {
      cid = null;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: [
          Row(
            children: [
              const Text("S5 状态:"),
              (s5 == null)
                  ? const CircularProgressIndicator()
                  : const Icon(Icons.check),
            ],
          ),
          TextField(
            controller: _cidController,
            decoration: const InputDecoration(labelText: "CID: z2..."),
          ),
          const SizedBox(
            height: 10,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                  onPressed: _submitCID, child: const Text("提交 CID")),
              ElevatedButton(
                  onPressed: _clearCache, child: const Text("清除缓存")),
              ElevatedButton(
                  onPressed: _clearImage,
                  child: const Text("清除已加载的音频"))
            ],
          ),
          const SizedBox(
            height: 10,
          ),
          (cid != null && s5 != null)
              ? CachedS5Audio(
                  cid: cid!,
                  s5: s5!,
                )
              : Container(),
        ],
      ),
    );
  }
}

更多关于Flutter音频缓存播放插件cached_s5_audio的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音频缓存播放插件cached_s5_audio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


cached_audio_player 是一个用于在 Flutter 应用中播放音频并支持缓存的插件。它可以帮助你在应用中播放网络音频文件,并且会将音频文件缓存到本地,以便在下次播放时不需要重新下载。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 cached_audio_player 依赖:

dependencies:
  flutter:
    sdk: flutter
  cached_audio_player: ^0.1.0  # 请根据最新版本号进行替换

然后运行 flutter pub get 来安装插件。

基本使用方法

  1. 导入插件

    import 'package:cached_audio_player/cached_audio_player.dart';
    
  2. 初始化播放器

    你可以通过 CachedAudioPlayer 类来初始化播放器。

    final player = CachedAudioPlayer();
    
  3. 播放音频

    使用 play 方法来播放网络音频文件。插件会自动缓存音频文件。

    await player.play('https://example.com/audio.mp3');
    
  4. 暂停和恢复播放

    你可以使用 pauseresume 方法来暂停和恢复播放。

    player.pause();  // 暂停播放
    player.resume(); // 恢复播放
    
  5. 停止播放

    使用 stop 方法来停止播放。

    player.stop();
    
  6. 释放资源

    当你不再需要播放器时,记得释放资源。

    player.dispose();
    
  7. 监听播放状态

    你可以通过监听 player.state 来获取播放器的当前状态。

    player.state.listen((state) {
      print('Player state: $state');
    });
    
  8. 获取当前播放位置

    你可以使用 position 属性来获取当前播放的位置。

    Duration position = await player.position;
    print('Current position: $position');
    
  9. 设置音量

    你可以通过 setVolume 方法来设置音量。

    player.setVolume(0.5);  // 设置音量为 50%
    
  10. 跳转到指定位置

    你可以使用 seek 方法来跳转到指定的播放位置。

    player.seek(Duration(seconds: 30));  // 跳转到 30 秒
    

示例代码

以下是一个简单的示例,展示了如何使用 cached_audio_player 播放网络音频文件:

import 'package:flutter/material.dart';
import 'package:cached_audio_player/cached_audio_player.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AudioPlayerScreen(),
    );
  }
}

class AudioPlayerScreen extends StatefulWidget {
  [@override](/user/override)
  _AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}

class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
  final player = CachedAudioPlayer();
  bool isPlaying = false;

  [@override](/user/override)
  void dispose() {
    player.dispose();
    super.dispose();
  }

  Future<void> togglePlay() async {
    if (isPlaying) {
      await player.pause();
    } else {
      await player.play('https://example.com/audio.mp3');
    }
    setState(() {
      isPlaying = !isPlaying;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: togglePlay,
          child: Text(isPlaying ? 'Pause' : 'Play'),
        ),
      ),
    );
  }
}
回到顶部