Как получить текущий контекст во Флаттере? - PullRequest
0 голосов
/ 09 мая 2018

Я использую нижнюю панель навигации. На определенном триггере событий мне нужно показать какое-то предупреждение на текущем экране.

Так я реализовал нижнюю панель навигации. У меня есть четыре вкладки. Здесь мне нужно изменить значок 4-й вкладки, когда _isHomeDetected истинно и когда пользователь нажимает на значок, то есть на индекс 3, я должен показывать предупреждающее сообщение независимо от того, на какой вкладке находится пользователь. Как я могу сделай это?

class LandingScreen extends StatefulWidget {
  static Widget bottomNavigationBar;
  ..
}

class _LandingScreenState extends State<LandingScreen> {
  ...
  StreamSubscription<String> _subscription;
  bool _isHomeDetected = false;

  @override
  void initState() {
    ...
    _subscription = server.messages.listen(onData, onError: onError);
  }
  onData(message) {
    setState(() {
      _isHomeDetected = json.decode(message)["isHomeBeacon"];
    });
  }
  ...
  @override
  Widget build(BuildContext context) {
    LandingScreen.bottomNavigationBar = new BottomNavigationBar(
        ....
    );
    return new Scaffold(
      body: _currentPage,
      bottomNavigationBar: LandingScreen.bottomNavigationBar,
    );
  }

  _navigateToScreens(int currentIndex) {
    List screens = [
      ..
    ];
    setState((){

      if (!_isHomeDetected || currentIndex != 3){
        _currentPage = screens[currentIndex];
      } else {
        Utils.showCupertinoAlert(
            context: context, content: "You wanna log out???");
      }
    });
  }
}

1 Ответ

0 голосов
/ 15 ноября 2018

В методе сборки любого виджета с отслеживанием состояния вы сможете получить контекст сборки. Если вы не можете сделать это, приведенный ниже пример от команды флаттера использует GlobalKey<ScaffoldState>, чтобы получить доступ к отображению оповещения о перекусе.

https://github.com/flutter/flutter/blob/master/examples/flutter_gallery/lib/demo/cupertino/cupertino_alert_demo.dart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...