如何解决未处理的异常:使用 audioplayers 包查找停用的小部件的祖先是不安全的错误
我的应用程序中出现这种错误。我正在使用 audioplayers 包来播放简短的声音。但是在玩了大约 5 次后,我收到了一个错误,即: 此时小部件的元素树的状态不再稳定。 要在其 dispose() 方法中安全地引用小部件的祖先,请通过在小部件的 didChangeDependencies() 方法中调用 DependOnInheritedWidgetofExactType() 来保存对祖先的引用。
这是我的代码:
class NewOrders extends StatefulWidget {
@override
_NewOrdeRSState createState() => _NewOrdeRSState();
}
class _NewOrdeRSState extends State<NewOrders> {
final SocketService socketService = injector.get<SocketService>();
final _orderRepo = OrderRepo(type: 'Accepted');
int activeItem = 0;
AudioPlayer audioPlayer = AudioPlayer();
final player = AudioCache(prefix: 'assets/sounds/');
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<OrderBloc>(
create: (context) =>
OrderBloc(orderRepo: _orderRepo)..add(OrderLoadEvent()),),BlocProvider<OrderInfoBloc>(
create: (context) => OrderInfoBloc(),)
],child: Scaffold(
body: BlocBuilder<OrderBloc,OrderState>(
builder: (BuildContext context,state) {
if (state is OrderLoadingState) {
return Center(child: Customloading());
}
if (state is OrderLoadedState) {
if (state.loadedOrders.length > 0) {
OrderInfoRepo _orderInfoRepo =
OrderInfoRepo(tableId: state.loadedOrders[activeItem].id);
context
.read<OrderInfoBloc>()
.add(OrderInfoLoadEvent(orderInfoRepo: _orderInfoRepo));
socketService.socket.on(
'createOrder',(data) => {
context.read<OrderBloc>().add(OrderLoadEvent()),player.play('accomplished.mp3'),Future.delayed(const Duration(milliseconds: 500),() => player.clear('accomplished.mp3'))
},);
return Container(
child: Row(
children: [
Container(
decoration: Boxdecoration(
color: tertiaryColor,BoxShadow: [
BoxShadow(
color: Colors.grey,offset: Offset.zero,blurRadius: 1,spreadRadius: 0.5)
],child: ListView.builder(
itemBuilder: (context,int index) {
if (index == activeItem) {
return Container(
height: 50,color: Colors.white,child: TextButton(
onpressed: () {},child: Container(
child: Text(
'${state.loadedOrders[index].tableNum} - стол',style: TextStyle(
fontSize: 20,color: tertiaryColor),);
} else {
return Container(
height: 50,// color: tertiaryColor,child: TextButton(
onpressed: () {
setState(() {
activeItem = index;
});
context.read<OrderInfoBloc>().add(
OrderInfoLoadEvent(
orderInfoRepo: _orderInfoRepo));
},color: Colors.white),);
}
},itemCount: state.loadedOrders.length,width: 250,Expanded(
child: OrderInfoWidget(),)
],);
} else {
return EmptyCart();
}
} else {
return NetworkErrorWidget();
}
},);
}
}
出现上述错误的原因是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。