Как предотвратить повторное появление SnackBar при смене страниц в приложении с помощью BottomNavigationBar во Flutter? - PullRequest
0 голосов
/ 09 февраля 2020

Моя страница задач имеет три вкладки в BottomNavigationBar. И на этой странице я показываю SnackBar для сообщений об успехе или ошибках с его внутренних страниц с ObserverListener из flutter_mobx_helpers пакета.

body: ObserverListener(
  listener: (_) {
    if (controller.success != null) {
      _scaffoldKey.currentState.showSnackBar(SnackBar(...));
    }

    if (controller.error != null) {
      _scaffoldKey.currentState.showSnackBar(SnackBar(...));
    }
  },
  child: IndexedStack(
    index: _tabIndex,
    children: <Widget>[
      AddTaskPage(),
      SearchTaskPage(),
      PasswordPage(),
    ],
  ),
  ...

Мой контроллер устанавливает success или error в зависимости от статуса вызова API. Я пытался установить его на null в блоке finally или после попытки / улова, но из-за этого SnackBar вообще не появлялся.

try {
  await _repository.storeTasks(tasks);
  success = 'Saved succesffulyy!';
  _clear();
} catch (e) {
  error = e;
} finally {
  loading = false;
  // success = false;
}

Проблема в том, что при смене вкладок , SnackBar показывает снова. Я знаю, что это потому, что они на родительской странице, но я действительно не хочу дублировать код для внутренних страниц. Есть ли способ очистить SnackBar или предотвратить его появление?

...