颤动,根据scrolloffset调整列表中的小部件

问题描述 投票:0回答:1

如何根据底层scrollview的偏移量在ListView中设置Widget的高度?

谢谢你的任何提示:)

mobile dart scrollview flutter
1个回答
0
投票

要知道ListView的当前滚动偏移,您只需传递一个控制器并检查控制器的偏移量。

例:

class ScrollOffsetWidget extends StatefulWidget {
  @override
  _ScrollOffsetWidgetState createState() => new _ScrollOffsetWidgetState();
}

class _ScrollOffsetWidgetState extends State<ScrollOffsetWidget> {
  List<double> height = <double>[200.0,200.0,200.0,200.0,200.0];

  double scrollOffset = 0.0;

  static ScrollController _controller;

  _ScrollOffsetWidgetState(){
    _controller = new ScrollController(initialScrollOffset: scrollOffset);
    _controller.addListener(listen);
  }

  void listen(){
    final List<double> newHeight = height;

    if(_controller.offset>100.0){
      newHeight[1] = 400.0;
    }else{
      newHeight[1] = 200.0;
    }

    setState((){
      height = newHeight;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        body: new ListView(
          controller: _controller,
          children: <Widget>[
            new AnimatedContainer(duration: const Duration(milliseconds: 300),height: height[0],color: Colors.primaries[0],),
            new AnimatedContainer(duration: const Duration(milliseconds: 300),height: height[1],color: Colors.primaries[1],),
            new AnimatedContainer(duration: const Duration(milliseconds: 300),height: height[2],color: Colors.primaries[2],),
            new AnimatedContainer(duration: const Duration(milliseconds: 300),height: height[3],color: Colors.primaries[3],),
            new AnimatedContainer(duration: const Duration(milliseconds: 300),height: height[4],color: Colors.primaries[4],)
          ],
        ),
      ),
    );
  }
}

希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.