flutter获取布局渲染事件

时间:2018-04-26 21:08:20

标签: dart flutter

为了在显示后立即使用ScrollController滚动ListView,我必须延迟调用animateTo函数,否则在调用animateTo函数时不会呈现布局。

有没有办法获得布局渲染事件,然后除了使用Timer之外还调用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 :(得分:2)

刚刚发布的软件包https://pub.dartlang.org/packages?q=after_layout为此提供了一个混合。

使用


simpleStickySidebar('#left', {
    container: '.sidebar', // sidebar relative element
    topSpace: 61 // Default : 0
    bottomSpace: 20 // Default : 0
});