Необработанное исключение: Поиск предка деактивированного виджета является небезопасной ошибкой в пакете audioplayers

#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();
            }
          },
        ),
      ),
    );
  }
}

 

В чем причина того, что я получаю вышеуказанную ошибку?