Метод удаления Flutter Provider не вызывается при выходе из приложения

Я использую Provider для упаковки MaterialApp в свое приложение, но при закрытии приложения метод удаления у поставщика не вызывается.

Мой код выглядит так:

MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: Provider<PageBloc>(
    builder: (context) => PageBloc(FlutterSerialService()),
    child: Consumer<PageBloc>(
      builder: (context, bloc, _) => MainPage(bloc: bloc),
    ),
    dispose: (context, bloc) {
      print("Dispose..");
      bloc.dispose();
    },
  ),
);

person Moti Bartov    schedule 16.11.2019    source источник


Ответы (1)


Из документа https://github.com/rrousselGit/provider (я предполагаю, что это провайдер ты используешь!?):

И в случае удаления Provider из дерева виджетов созданный экземпляр MyComplexClass будет удален.

Итак, насколько я понимаю, обратный вызов dispose запускается только при изменении дерева виджетов. При выходе из приложения дерево виджетов остается неизменным. Вы проверяли, вызывается ли оно, когда убиваете приложение?

person SebastianK    schedule 16.11.2019
comment
Спасибо за ответ, убийство приложения не помогает. Моя проблема в том, что мне нужно удалить блок главной страницы после его удаления, но я не могу получить никаких указаний на это. Я думал, что могу использовать обратный вызов Dispose поставщика. - person Moti Bartov; 16.11.2019
comment
Что именно вы делаете в блоке, который требует, чтобы вы удалили его при удалении страницы. С моей точки зрения, это не похоже на хороший дизайн ... - person SebastianK; 16.11.2019
comment
Блок инициализирует связь по bluetooth с каким-либо устройством. Хочу закрыть и убрать соединение и пары с него. Вы можете посмотреть весь код в моем репо: github.com/moti0375/FlutterBDT - person Moti Bartov; 16.11.2019
comment
Взгляните на эту страницу: flutterbyexample.com/stateful-widget-lifecycle/#9 -dispose При использовании виджета с отслеживанием состояния у вас есть доступная ловушка dispose. Вы можете использовать его для своего случая использования. - person SebastianK; 16.11.2019
comment
Обратный вызов statful dispose также не вызывается! Вначале мой виджет не имел состояния, но затем я изменил его на состояние, чтобы использовать удаление. Похоже, что не сразу определить, что приложение закрывается. - person Moti Bartov; 16.11.2019