2017-12-29 30 views

答えて

-1

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],) 
      ], 
     ), 
    ), 
    ); 
    } 
} 

願っています!

+0

これは簡単ではありません。スクロールはウィジェットを再構築しないので – Darky

+0

私はスクロールが再構築されないことを知っています。イベントをスクロールして、 'setState'を計算して呼び出すと、子のサイズを変更できます。 –

+0

私の答えを更新しました –

関連する問題