title: ListVIew doesn't scroll to the correct offset position after its built again
body: <p>I want the listview to start with an offset. Which I am trying to achieve by using below code in the ListView.</p>
  
  <blockquote>
    <p>controller: ScrollController(initialScrollOffset: 30 * ITEM_HEIGHT),</p>
  </blockquote>
  
  <p>Initially on the first load the list is loaded with the correct offset. </p>
  
  <p>When the list is built again by calling set state from the parent widget, the list gets updated but the scroll offset behaves weird.</p>
  
  <p>There are two scenarios:</p>
  
  <ol>
  <li>I don't scroll the list: After this if the set state is called everything works fine. List gets updated and is always at the correct offset.</li>
  <li>I scroll the list: if I scroll the list and then the list is rebuilt, 
  the scroll offset is off by a few items. The list gets updated which is fine. </li>
  </ol>
  
  <p>Is it because when I scroll it keeps the last scroll position and that offsets my calculation? Which I think should not happen as it is a state less widget. </p>
  
  <pre><code>class DaysManager extends StatelessWidget {
    final int daysBeforeFocusDate = 30;
    final int totalDaysToInit = 61;
    static final double ITEM_HEIGHT = 108.00;
  
    ScrollController scrollController;
  
    List&lt;Day&gt; days;
  
    DaysManager({DateTime focusDate}) {
        final DateTime startDate =
        focusDate.subtract(Duration(days: daysBeforeFocusDate));
        days = List.generate(totalDaysToInit, (int index) {
        return Day(
         date: startDate.add(
          Duration(days: index),
      ),
    );
  });
  
  scrollController = ScrollController(initialScrollOffset: 30 *ITEM_HEIGHT);
  }
  
    @override
    Widget build(BuildContext context) {
     return _buildScrollView();
    }
  
    ListView _buildScrollView() {
      ListView listView = ListView.builder(
      cacheExtent: 0,
      controller: scrollController,
      itemCount: days.length,
      itemBuilder: (BuildContext context, int index) {
        return days[index];
       });
  
      return listView;
    }
   }
  </code></pre>