Flutter音量控制插件volume的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter音量控制插件volume的使用

简介

volume 是一个用于在 Android 程序中控制音量的 Flutter 插件。目前尚未实现 iOS 支持,欢迎提交 PR 进行 iOS 实现。

Streams(流)

AudioManager.STREAM_VOICE_CALL       -> 控制通话音量
AudioManager.STREAM_SYSTEM           -> 控制系统音量
AudioManager.STREAM_RING             -> 控制铃声音量
AudioManager.STREAM_MUSIC            -> 控制媒体音量
AudioManager.STREAM_ALARM            -> 控制闹钟音量
AudioManager.STREAM_NOTIFICATION     -> 控制通知音量

显示和隐藏系统音量 UI

ShowVolumeUI.SHOW (默认)          -> 更改音量时显示系统音量 UI
ShowVolumeUI.HIDE                 -> 更改音量时不显示系统音量 UI

函数和获取器

音量按钮在应用内生效

await Volume.controlVolume(AudioManager audioManager); // 传递任何流作为参数

返回最大可能音量(以整数形式)

await Volume.getMaxVol; // 返回一个整数

返回当前音量级别(以整数形式)

await Volume.getVol; // 返回一个整数

设置流的音量

await Volume.setVol(int i, {ShowVolumeUI showVolumeUI});
  • i 的最大值小于或等于 Volume.getMaxVol
  • showVolumeUI 是可选参数,默认为 ShowVolumeUI.SHOW

使用示例

以下是一个完整的示例,展示了如何使用 volume 插件来控制音量。

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:volume/volume.dart';

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  AudioManager audioManager;
  int maxVol, currentVol;
  ShowVolumeUI showVolumeUI = ShowVolumeUI.SHOW;

  [@override](/user/override)
  void initState() {
    super.initState();
    audioManager = AudioManager.STREAM_SYSTEM;
    initAudioStreamType();
    updateVolumes();
  }

  Future<void> initAudioStreamType() async {
    await Volume.controlVolume(AudioManager.STREAM_SYSTEM);
  }

  updateVolumes() async {
    // 获取最大音量
    maxVol = await Volume.getMaxVol;
    // 获取当前音量
    currentVol = await Volume.getVol;
    setState(() {});
  }

  setVol(int i) async {
    await Volume.setVol(i, showVolumeUI: showVolumeUI);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('音量控制示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              DropdownButton(
                value: audioManager,
                items: [
                  DropdownMenuItem(
                    child: Text("通话音量"),
                    value: AudioManager.STREAM_VOICE_CALL,
                  ),
                  DropdownMenuItem(
                    child: Text("系统音量"),
                    value: AudioManager.STREAM_SYSTEM,
                  ),
                  DropdownMenuItem(
                    child: Text("铃声音量"),
                    value: AudioManager.STREAM_RING,
                  ),
                  DropdownMenuItem(
                    child: Text("媒体音量"),
                    value: AudioManager.STREAM_MUSIC,
                  ),
                  DropdownMenuItem(
                    child: Text("闹钟音量"),
                    value: AudioManager.STREAM_ALARM,
                  ),
                  DropdownMenuItem(
                    child: Text("通知音量"),
                    value: AudioManager.STREAM_NOTIFICATION,
                  ),
                ],
                isDense: true,
                onChanged: (AudioManager aM) async {
                  setState(() {
                    audioManager = aM;
                  });
                  await Volume.controlVolume(aM);
                },
              ),
              ToggleButtons(
                borderRadius: BorderRadius.all(Radius.circular(10.0)),
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.all(20.0),
                    child: Text("显示 UI"),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(20.0),
                    child: Text("隐藏 UI"),
                  ),
                ],
                isSelected: [
                  showVolumeUI == ShowVolumeUI.SHOW,
                  showVolumeUI == ShowVolumeUI.HIDE
                ],
                onPressed: (int i) {
                  setState(() {
                    if (i == 0) {
                      showVolumeUI = ShowVolumeUI.SHOW;
                    } else if (i == 1) {
                      showVolumeUI = ShowVolumeUI.HIDE;
                    }
                  });
                },
              ),
              (currentVol != null || maxVol != null)
                  ? Slider(
                      value: currentVol / 1.0,
                      divisions: maxVol,
                      max: maxVol / 1.0,
                      min: 0,
                      onChanged: (double d) {
                        setVol(d.toInt());
                        updateVolumes();
                      },
                    )
                  : Container(),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter音量控制插件volume的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音量控制插件volume的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,volume 插件用于控制设备的音量。它是一个简单的插件,允许你获取当前的音量级别,并设置新的音量级别。以下是如何在Flutter中使用 volume 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  volume: ^2.0.0

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 volume 插件:

import 'package:volume/volume.dart';

3. 初始化音量控制

在使用 volume 插件之前,你需要初始化它。通常,你可以在 initState 方法中进行初始化:

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    Volume.controlVolume(AudioManager.STREAM_MUSIC);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VolumeControlScreen(),
    );
  }
}

4. 获取当前音量

你可以使用 Volume.getVol 方法来获取当前的音量级别:

double currentVolume = await Volume.getVol;
print('Current volume: $currentVolume');

5. 设置音量

你可以使用 Volume.setVol 方法来设置新的音量级别。音量级别通常在 0.01.0 之间,其中 0.0 表示静音,1.0 表示最大音量:

await Volume.setVol(0.5); // 设置音量为50%

6. 监听音量变化

你可以使用 Volume.addListener 方法来监听音量的变化:

Volume.addListener(() {
  Volume.getVol.then((volume) {
    print('Volume changed to: $volume');
  });
});

7. 移除音量监听器

当你不再需要监听音量变化时,可以移除监听器:

Volume.removeListener();

完整示例

以下是一个完整的示例,展示了如何使用 volume 插件来控制设备的音量:

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

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

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

class _MyAppState extends State<MyApp> {
  double _currentVolume = 0.0;

  [@override](/user/override)
  void initState() {
    super.initState();
    _initVolume();
    _listenVolume();
  }

  Future<void> _initVolume() async {
    await Volume.controlVolume(AudioManager.STREAM_MUSIC);
    _currentVolume = await Volume.getVol;
    setState(() {});
  }

  void _listenVolume() {
    Volume.addListener(() {
      Volume.getVol.then((volume) {
        setState(() {
          _currentVolume = volume;
        });
      });
    });
  }

  Future<void> _setVolume(double volume) async {
    await Volume.setVol(volume);
    setState(() {
      _currentVolume = volume;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Volume Control'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Current Volume: ${(_currentVolume * 100).toStringAsFixed(0)}%'),
              Slider(
                value: _currentVolume,
                onChanged: _setVolume,
                min: 0.0,
                max: 1.0,
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!