ShowDialog не виден, когда я выхожу на передний план из фонового трепета

#flutter #dart #dialog

Вопрос:

Я делаю push-уведомление в своем приложении flutter, обрабатывая его как на переднем плане, так и на заднем плане. Когда уведомление прослушивается, я хочу загрузить a dialog до того, как сетевая операция будет полностью загружена. Итак, когда я нахожусь на переднем плане, диалоговое окно отображается нормально, но не появляется, когда я выхожу на передний план с заднего плана. Что может быть причиной этого?

   void showRideOrder(String newOrder) async {
    orderIdString = orderId = newOrder;
    print("new order here"   orderId);
    print("fetching info");
    assetsAudioPlayer.open(
      Audio('sounds/alert.mp3'),
    );
    assetsAudioPlayer.play();
  
   showDialog( //not showing when coming in from the background
      barrierDismissible: false,
      context: context,
      builder: (BuildContext builder_context) =>
          CustomProgressDialog(status:'Fetching details',),);

    Provider.of<MainBloc>(context, listen: false).
    fetchRideInfo(context, orderId).then((value){
      print("ride order fetched. closing dialog");
     Navigator.pop(context);
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) =>
            RideRequestPage(orderId: orderId)),
      );
      orderIdString =null;
    }).catchError((error) {
      Navigator.pop(context);
      AlertManager.showToast(error.toString());
    });
    orderIdString = null;
  }
 

Ответ №1:

Я думаю, это потому, что, когда нужно выйти на передний план, метод не вызывается.

Попробуйте расширить класс с помощью WidgetsBindingObserver и переопределить

 @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    showRideOrder(...);   //call your function
  }
 

Убедитесь, что вы написали регистр переключения и назвали его в соответствующем случае