Commit e0760e6a authored by Adam Barth's avatar Adam Barth

Merge pull request #1173 from abarth/fix_stocks_loading

TabView fails to update tab contents
parents c4545da2 432b1793
...@@ -799,7 +799,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -799,7 +799,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
_selection = selection; _selection = selection;
if (_selection != null) { if (_selection != null) {
_selection.registerPerformanceListener(this); _selection.registerPerformanceListener(this);
_initItemsAndScrollOffset(); _updateItemsAndScrollBehavior();
} }
} }
...@@ -808,6 +808,12 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -808,6 +808,12 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
_initSelection(TabBarSelection.of(context)); _initSelection(TabBarSelection.of(context));
} }
void didUpdateConfig(TabBarView oldConfig) {
super.didUpdateConfig(oldConfig);
if (_selection != null && config.children != oldConfig.children)
_updateItemsForSelectedIndex(_selection.index);
}
void dispose() { void dispose() {
_selection?.unregisterPerformanceListener(this); _selection?.unregisterPerformanceListener(this);
super.dispose(); super.dispose();
...@@ -817,28 +823,40 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -817,28 +823,40 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
_selection = null; _selection = null;
} }
void _updateItems(int first, int second, [int third]) { void _updateItemsFromChildren(int first, int second, [int third]) {
List<Widget> widgets = config.children; List<Widget> widgets = config.children;
_items = <Widget>[widgets[first], widgets[second]]; _items = <Widget>[widgets[first], widgets[second]];
if (third != null) if (third != null)
_items.add(widgets[third]); _items.add(widgets[third]);
} }
void _initItemsAndScrollOffset() { void _updateItemsForSelectedIndex(int selectedIndex) {
assert(_selection != null); if (selectedIndex == 0) {
final int selectedIndex = _selection.index; _updateItemsFromChildren(0, 1);
} else if (selectedIndex == _tabCount - 1) {
_updateItemsFromChildren(selectedIndex - 1, selectedIndex);
} else {
_updateItemsFromChildren(selectedIndex - 1, selectedIndex, selectedIndex + 1);
}
}
void _updateScrollBehaviorForSelectedIndex(int selectedIndex) {
if (selectedIndex == 0) { if (selectedIndex == 0) {
_updateItems(0, 1);
scrollTo(scrollBehavior.updateExtents(contentExtent: 2.0, containerExtent: 1.0, scrollOffset: 0.0)); scrollTo(scrollBehavior.updateExtents(contentExtent: 2.0, containerExtent: 1.0, scrollOffset: 0.0));
} else if (selectedIndex == _tabCount - 1) { } else if (selectedIndex == _tabCount - 1) {
_updateItems(selectedIndex - 1, selectedIndex);
scrollTo(scrollBehavior.updateExtents(contentExtent: 2.0, containerExtent: 1.0, scrollOffset: 1.0)); scrollTo(scrollBehavior.updateExtents(contentExtent: 2.0, containerExtent: 1.0, scrollOffset: 1.0));
} else { } else {
_updateItems(selectedIndex - 1, selectedIndex, selectedIndex + 1);
scrollTo(scrollBehavior.updateExtents(contentExtent: 3.0, containerExtent: 1.0, scrollOffset: 1.0)); scrollTo(scrollBehavior.updateExtents(contentExtent: 3.0, containerExtent: 1.0, scrollOffset: 1.0));
} }
} }
void _updateItemsAndScrollBehavior() {
assert(_selection != null);
final int selectedIndex = _selection.index;
_updateItemsForSelectedIndex(selectedIndex);
_updateScrollBehaviorForSelectedIndex(selectedIndex);
}
void handleStatusChange(PerformanceStatus status) { void handleStatusChange(PerformanceStatus status) {
} }
...@@ -850,7 +868,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -850,7 +868,7 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
final Performance performance = _selection.performance; final Performance performance = _selection.performance;
if (performance.status == PerformanceStatus.completed) { if (performance.status == PerformanceStatus.completed) {
_initItemsAndScrollOffset(); _updateItemsAndScrollBehavior();
return; return;
} }
...@@ -861,10 +879,10 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe ...@@ -861,10 +879,10 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
final int previousSelectedIndex = _selection.previousIndex; final int previousSelectedIndex = _selection.previousIndex;
if (selectedIndex < previousSelectedIndex) { if (selectedIndex < previousSelectedIndex) {
_updateItems(selectedIndex, previousSelectedIndex); _updateItemsFromChildren(selectedIndex, previousSelectedIndex);
_scrollDirection = AnimationDirection.reverse; _scrollDirection = AnimationDirection.reverse;
} else { } else {
_updateItems(previousSelectedIndex, selectedIndex); _updateItemsFromChildren(previousSelectedIndex, selectedIndex);
_scrollDirection = AnimationDirection.forward; _scrollDirection = AnimationDirection.forward;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment