Flutter 颤振:按下按钮时播放声音
我对编程非常陌生,尤其是Flitter。我想写一个音板,基本上是一个按钮列表,每个按钮的工作是播放一个声音,我在我的电脑上,当他们被按下。我已经用列表视图和一些材质按钮完成了设计,但我不知道如何让它们在按下时播放声音。有人能帮我吗?将Flutter 颤振:按下按钮时播放声音,flutter,dart,Flutter,Dart,我对编程非常陌生,尤其是Flitter。我想写一个音板,基本上是一个按钮列表,每个按钮的工作是播放一个声音,我在我的电脑上,当他们被按下。我已经用列表视图和一些材质按钮完成了设计,但我不知道如何让它们在按下时播放声音。有人能帮我吗?将音频播放器作为依赖项添加到pubspec.yaml文件中,如下所示: 依赖项: 音频播放器:有吗 颤振: 资产: -资产/audio/my_audio.mp3 完整代码(空安全): class\u HomePageState扩展状态{ 后期最终音频缓存_Audio
音频播放器
作为依赖项添加到pubspec.yaml
文件中,如下所示:
依赖项:
音频播放器:有吗
颤振:
资产:
-资产/audio/my_audio.mp3
完整代码(空安全):
class\u HomePageState扩展状态{
后期最终音频缓存_AudioCache;
@凌驾
void initState(){
super.initState();
_audioCache=audioCache(
前缀:“audio/”,
fixedPlayer:AudioPlayer()…设置释放模式(释放模式.停止),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:升降按钮(
按下:()=>\u audioCache.play('my\u audio.mp3'),
孩子:文本(“玩耍”),
),
);
}
}
如果您只想在有人按下按钮时播放音乐,则可以执行以下步骤:-
1。添加依赖项
dependencies:
audioplayers: ^0.10.0
然后在终端中运行以下命令以获取新添加的包-
flutter packages get
2。将其导入main.dart或要使用它的文件。
import 'package:audioplayers/audio_cache.dart';
将使用两个类,您可以导入AudioPlayer或AudioCache,并播放本地文件AudioCache
3。创建AudioCache对象
final player = AudioCache();
4。使用play()方法播放音频
player.play('note1.wav');
Note-note1.wav存储在我的主目录中的assets文件夹中,使用play()方法时不必提及它
示例代码-
import'包:audioplayers/audio_cache.dart';
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
最终播放器=AudioCache();
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:安全区(
孩子:扁平按钮(
儿童:文本(“游戏”),
已按下:(){
player.play('note1.wav');
},
),
),
),
);
}
}
对于重复的声音,我建议使用软件包。根据我的经验,它提供了更好的延迟,即触发动作和实际声音播放之间的延迟更低。
下面是代码示例(从程序包的自述文件中复制):
import'包:soundpool/soundpool.dart';
声音池=声音池(流类型:streamType.notification);
int soundId=wait rootBundle.load(“sounds/dices.m4a”)。然后((ByteData soundData){
返回池。加载(声音数据);
});
int streamId=wait pool.play(soundId);
首先,您必须在主项目文件夹名称中创建一个目录,作为“资产”,用于存储所有音乐。我有7种音乐,像note1.wav,note2.wav。。。。。注7.wav
资产
assets:
- assets/
依赖关系
dependencies:
audioplayers: ^0.10.0
main.dart代码
import 'package:audioplayers/audio_cache.dart';
import 'package:flutter/material.dart';
void main() => runApp(Xylophone());
class Xylophone extends StatefulWidget {
@override
_XylophoneState createState() => _XylophoneState();
}
class _XylophoneState extends State<Xylophone> {
// music play sound number function, like note1.wav, note2.wav etc.
void playSound(int number){
final player = AudioCache();
player.play('note$number.wav');
}
// Expanded Widget Function Used for repeated Code
Expanded buildKey(int soundNum, Color color){
return Expanded(
child: FlatButton(
color: color,
onPressed: (){
playSound(soundNum);
},
child: Text(""),
),
);
}
@override
Widget build(BuildContext context) {
// var buttonHeight = MediaQuery.of(context).size.height/2;
return MaterialApp(
debugShowCheckedModeBanner: false,
home: SafeArea(
child: Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
buildKey(1, Colors.red),
buildKey(2, Colors.green),
buildKey(3, Colors.blue),
buildKey(4, Colors.deepPurpleAccent),
buildKey(5, Colors.redAccent),
buildKey(6, Colors.black54),
buildKey(7, Colors.pink),
],
),
),
),
);
}
}
import'包:audioplayers/audio_cache.dart';
进口“包装:颤振/材料.省道”;
void main()=>runApp(木琴());
类木琴扩展了StatefulWidget{
@凌驾
_木琴酸盐createState()=>U木琴酸盐();
}
木琴酯类扩展状态{
//音乐播放声音数字功能,如note1.wav、note2.wav等。
无效播放声音(整数){
最终播放器=AudioCache();
player.play('note$number.wav');
}
//用于重复代码的扩展小部件功能
扩展的构建键(int soundNum,Color){
扩大回报(
孩子:扁平按钮(
颜色:颜色,
已按下:(){
播放声音(soundNum);
},
子项:文本(“”),
),
);
}
@凌驾
小部件构建(构建上下文){
//var buttonHeight=MediaQuery.of(context).size.height/2;
返回材料PP(
debugShowCheckedModeBanner:false,
家:安全区(
孩子:脚手架(
正文:专栏(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
构建键(1,颜色。红色),
buildKey(2种颜色,绿色),
buildKey(3种颜色,蓝色),
buildKey(4种颜色,深紫色),
buildKey(5种颜色,红色调),
buildKey(6种颜色,黑色54),
buildKey(7种颜色,粉色),
],
),
),
),
);
}
}
Tryaudioplayers
plugin我已经看到了,但从文档中我不明白一件事……错误:方法“initState”没有在“MyApp”的超类中定义。错误:方法“AudioCache”没有为类“HomePageState”定义。import“package:audioplayers/audio\u cache.dart”代码>位于文件顶部。我的问题是在import'package:audioplayers/audio_cache.dart'之前我没有使用有状态的小部件代码>导入“包:AudioPlayer/AudioPlayer.dart”代码>如果任何人对此实现有问题,我必须停止应用程序并重新启动它。热重新加载/重新启动是不够的。