#flutter #dart #dispose #unhandled-exception
Вопрос:
у меня такая ошибка в моем приложении. Я использую пакет audioplayers для воспроизведения короткого звука. Но после того, как я сыграл около 5 раз, я получаю ошибку, которая заключается в следующем: на данный момент состояние дерева элементов виджета больше не является стабильным. Чтобы безопасно ссылаться на предка виджета в его методе dispose (), сохраните ссылку на предка, вызвав функцию dependOnInheritedWidgetOfExactType() в методе didChangeDependencies() виджета.
Это мой код:
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));
},
child: Container(
child: Text(
'${state.loadedOrders[index].tableNum} - стол',
style: TextStyle(
fontSize: 20, color: Colors.white),
),
),
),
);
}
},
itemCount: state.loadedOrders.length,
),
width: 250,
),
Expanded(
child: OrderInfoWidget(),
)
],
),
);
} else {
return EmptyCart();
}
} else {
return NetworkErrorWidget();
}
},
),
),
);
}
}
В чем причина того, что я получаю вышеуказанную ошибку?