флаттер получить макет визуализированного события - PullRequest
0 голосов
/ 27 апреля 2018

Чтобы прокрутить ListView с помощью ScrollController сразу после его отображения, мне нужно вызвать функцию animateTo с задержкой, поскольку в противном случае макет не отображается во время вызова функции animateTo.

Есть ли способ получить событие визуализации макета, а затем вызвать функцию animateTo или другое решение помимо использования таймера?

class MainPageState extends State<MainPage> {

      bool listViewVisible = false;
  ScrollController _scrollController = new ScrollController();

  @override
  Widget build(BuildContext context) {
    return new Container(
      child: !listViewVisible ? null :
      new ListView(
        controller: _scrollController,
        children: <Widget>[
          //Some Items
        ],
      ),
    );
  }

  //does not work
  void showAndScrollListViewWithoutTimer() {
    setState(() {
      listViewVisible = true;
    });

    _scrollController.animateTo(100.0,
        duration: const Duration(milliseconds: 300),
        curve: Curves.easeOut);
  }

  //works
  void showAndScrollListViewWithTimer() {
    setState(() {
      listViewVisible = true;
    });

    new Timer(const Duration(milliseconds: 500), () {
      _scrollController.animateTo(100.0,
          duration: const Duration(milliseconds: 300),
          curve: Curves.easeOut);
    });
  }

1 Ответ

0 голосов
/ 27 апреля 2018

Только что опубликованный пакет https://pub.dartlang.org/packages?q=after_layout предоставляет для этого миксин.

Используется

WidgetsBinding.instance
    .addPostFrameCallback((_) => afterFirstLayout(context));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...