Как открыть ящик Scaffold's при загрузке страницы? - PullRequest
0 голосов
/ 26 сентября 2018

При входе в наше приложение Flutter открывается панель инструментов, на которой имеется Scaffold с выдвижным ящиком, полным пунктов меню.

Я бы хотел провести некоторое A / B-тестирование с открытым ящиком при загрузке страницы или припо крайней мере, анимация открытия ящика сразу при загрузке.

Мне известно о Scaffold.of(context).openDrawer(), но я не уверен, где разместить этот код, чтобы он запускался сразу после метода build ().Я также не знаю каких-либо полей на Ящике или Скаффолде, которые могли бы загружаться при открытом Ящике.

Спасибо за ваше время и помощь.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Сохранить переменную состояния, чтобы скрыть и показать ящик - isDrawerBeingShown.

На основе переменной состояния переключать состояние ящика.По умолчанию установлено значение false, поэтому оно будет отображаться впервые.

void _showDrawer(BuildContext context) async он должен быть помечен как асинхронный, чтобы он выполнялся после метода сборки.

Создайте showDrawerUtility метод для отображения ящика по требованию при необходимости.

Редактировать:

Использовать GlobalKey

GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey();


class MainScreen extends StatefulWidget {

  MainScreen({Key key }) : super(key: key);

  @override
  State<MainScreen> createState() => new MainScreenState();
}

class MainScreenState extends State<MainScreen> {
  bool isDrawerBeingShown;

  @override
  void initState() {
    super.initState();
    isDrawerBeingShown = false;
    _showDrawer(context);
  }

  void _showDrawer(BuildContext context) async {
    if(!isDrawerBeingShown) {
     _scaffoldKey.currentState.openDrawer();
      setState(() => isDrawerBeingShown = true);
    }
  }
 @override
  Widget build(BuildContext context) { // build method goes here}
}
0 голосов
/ 27 сентября 2018

Я получил это, используя Timer.Убедитесь, что вы используете следующий код, когда ваш метод build() выполнен, чтобы у вас был действительный контекст.

Timer(Duration(seconds: 3), () => Scaffold.of(context).openDrawer());

Приведенный выше код дает вам больше контроля над точным временем.Когда именно ты захочешь показать открытый ящик.

0 голосов
/ 26 сентября 2018

Вам нужно подождать после загрузки первого кадра.

    _onLayoutDone(_) {
       //your logic here

    }

    @override
    void initState() {
      WidgetsBinding.instance.addPostFrameCallback(_onLayoutDone);
      super.initState();
    }

Я написал сообщение об этом, вы можете посмотреть, если хотите: https://medium.com/@diegoveloper/flutter-widget-size-and-position-b0a9ffed9407

...