| Index: sky/sdk/lib/widgets/tabs.dart
|
| diff --git a/sky/sdk/lib/widgets/tabs.dart b/sky/sdk/lib/widgets/tabs.dart
|
| index 37f19cbf5b8dc0040b31dc4195e4ff7534c4f5cf..13cfaa35ed2abd3fd01020e32bc72940e2922946 100644
|
| --- a/sky/sdk/lib/widgets/tabs.dart
|
| +++ b/sky/sdk/lib/widgets/tabs.dart
|
| @@ -261,7 +261,7 @@ class TabBar extends Component {
|
| this.onChanged
|
| }) : super(key: key);
|
|
|
| - final List<TabLabel> labels;
|
| + final Iterable<TabLabel> labels;
|
| final int selectedIndex;
|
| final SelectedIndexChanged onChanged;
|
|
|
| @@ -286,9 +286,10 @@ class TabBar extends Component {
|
| assert(labels != null && labels.isNotEmpty);
|
| List<Widget> tabs = <Widget>[];
|
| bool textAndIcons = false;
|
| - for (int tabIndex = 0; tabIndex < labels.length; tabIndex++) {
|
| - tabs.add(_toTab(labels[tabIndex], tabIndex));
|
| - if (labels[tabIndex].text != null && labels[tabIndex].icon != null)
|
| + int tabIndex = 0;
|
| + for (TabLabel label in labels) {
|
| + tabs.add(_toTab(label, tabIndex++));
|
| + if (label.text != null && label.icon != null)
|
| textAndIcons = true;
|
| }
|
| return new TabBarWrapper(
|
| @@ -300,3 +301,51 @@ class TabBar extends Component {
|
| );
|
| }
|
| }
|
| +
|
| +class TabNavigatorView {
|
| + TabNavigatorView({ this.label, this.builder });
|
| +
|
| + final TabLabel label;
|
| + final Builder builder;
|
| +
|
| + Widget buildContent() {
|
| + assert(builder != null);
|
| + Widget content = builder();
|
| + assert(content != null);
|
| + return content;
|
| + }
|
| +}
|
| +
|
| +class TabNavigator extends Component {
|
| + TabNavigator({
|
| + String key,
|
| + this.views,
|
| + this.selectedIndex: 0,
|
| + this.onChanged
|
| + }) : super(key: key);
|
| +
|
| + final List<TabNavigatorView> views;
|
| + final int selectedIndex;
|
| + final SelectedIndexChanged onChanged;
|
| +
|
| + void _handleSelectedIndexChanged(int tabIndex) {
|
| + if (onChanged != null)
|
| + onChanged(tabIndex);
|
| + }
|
| +
|
| + Widget build() {
|
| + assert(views != null && views.isNotEmpty);
|
| + assert(selectedIndex >= 0 && selectedIndex < views.length);
|
| +
|
| + TabBar tabBar = new TabBar(
|
| + labels: views.map((view) => view.label),
|
| + onChanged: _handleSelectedIndexChanged,
|
| + selectedIndex: selectedIndex
|
| + );
|
| +
|
| + Widget content = views[selectedIndex].buildContent();
|
| + return new Flex([tabBar, new Flexible(child: content)],
|
| + direction: FlexDirection.vertical
|
| + );
|
| + }
|
| +}
|
|
|