Android 互斥器未获取颤振中的临界截面
我有一架会唱歌的钢琴。每首歌曲都有一个带有音符的数组代表 有10首歌。在myTone1中,我检查正在播放的歌曲。并获取m互斥体。所以我没有同时播放歌曲。所以我根据颤振文档使用了互斥,但它不起作用。歌曲仍在相互播放Android 互斥器未获取颤振中的临界截面,android,flutter,Android,Flutter,我有一架会唱歌的钢琴。每首歌曲都有一个带有音符的数组代表 有10首歌。在myTone1中,我检查正在播放的歌曲。并获取m互斥体。所以我没有同时播放歌曲。所以我根据颤振文档使用了互斥,但它不起作用。歌曲仍在相互播放 void simonPlay (int index, int c) async { await Future.delayed(Duration(milliseconds: index * 500), () { songs.play(c); }
void simonPlay (int index, int c) async {
await Future.delayed(Duration(milliseconds: index * 500), () {
songs.play(c);
});
}
void playSequence(List<int> sequence) async {
try {
// critical section with asynchronous code
for (var i = 0; i < sequence.length ; i++) {
simonPlay(i,sequence[i]);
}
} finally {
m.release();
}
}
Widget myTone1(Color myColor1,Color myColor2, int myNumber)
{
return Expanded(
child : AbsorbPointer ( absorbing: false,
child: TextButton(
style: ButtonStyle(backgroundColor: MaterialStateProperty.all(myColor1)),
onPressed: () async {
setState(() async {
switch (myNumber) {
case 1:
await m.acquire();
playSequence(song1);
break;
case 2:
await m.acquire();
playSequence(song2);
break;
case 3:
await m.acquire();
playSequence(song3);
break;
//from 3 to 8
case 9:
await m.acquire();
playSequence(song9);
break;
case 10:
await m.acquire();
playSequence(song10);
}
},
);
void-simonPlay(int-index,int-c)异步{
等待未来。延迟(持续时间(毫秒:索引*500),(){
歌曲.播放(c);
});
}
无效播放序列(列表序列)异步{
试一试{
//带异步代码的临界段
对于(变量i=0;i
setState
:提供的回调立即被同步调用。它不能返回未来(回调不能是async
),因为这样就不清楚实际设置状态的时间。如果从setState中删除async,则不能使用wait m.aquire();您建议我如何编辑它?在调用switch
函数后,您可以调用setState
函数。例如switch(){};setState((){//无需添加任何内容})
;它不起作用,能否请您详细说明完整的答案?