Introduction
这个在我在自己的老安卓手机上正常运作,启动飞快。iOS 未经测试哈。
为什么不直接使用手机自带的音量按钮?如果你的手机,音量键不幸地老化或损坏了,以至于无法使用物理按钮控制音量,这个就能派上用场了。
真是折腾啊,那么为什么不在应用市场下载一个呢?下过的都知道,他们都是在广告APP中加了个音量控制功能。
Codes
设备底层控制就不慢慢研究了,直接用现成的:
yaml
dependencies:
volume_controller: ^2.0.4
主文件不到100行的代码:
dart
/// main.dart
import 'package:flutter/material.dart';
import 'package:volume_controller/volume_controller.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
double _volumeValue = 0;
bool _showSystemUI = VolumeController().showSystemUI;
@override
void initState() {
super.initState();
// Listen to system volume change
VolumeController().listener((volume) {
setState(() => _volumeValue = volume);
});
}
@override
void dispose() {
VolumeController().removeListener();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('音量控制'),
actions: [
const Text('系统UI', style: TextStyle(
color: Colors.white54,
fontSize: 14.0,
height: 3,
)),
Switch(
value: _showSystemUI,
activeColor: Colors.cyanAccent,
inactiveThumbColor: Colors.lightBlueAccent,
onChanged: (value) {
_showSystemUI = value;
setState(() => VolumeController().showSystemUI = value);
},
),
],
),
body: Padding(
padding: const EdgeInsets.only(top: 40),
child: Column(
children: [
Row(
children: [
Flexible(
child: Slider(
label: '${_volumeValue * 100 ~/ 1}%',
divisions: 100,
value: _volumeValue,
min: 0,
max: 1,
onChanged: (value) =>
VolumeController().setVolume(value),
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
TextButton.icon(
onPressed: () => VolumeController().muteVolume(),
label: const Text(''),
icon: const Icon(Icons.volume_off_rounded),
),
TextButton.icon(
onPressed: () => VolumeController().maxVolume(),
label: const Text(''),
icon: const Icon(Icons.volume_up_rounded),
),
],
),
],
),
)),
);
}
}
Resources
实现效果:
代码中引用到的库:volume_controller
完整代码库见:https://github.com/kevinsheep/flutter_soft_volume
有空了优化下样式,打个 apk 包上来,方便有共同需要却又懒得动手的。