| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:sky/painting/text_style.dart'; | 5 import 'package:sky/painting/text_style.dart'; |
| 6 import 'package:sky/theme/typography.dart' as typography; | 6 import 'package:sky/theme/typography.dart' as typography; |
| 7 import 'package:sky/widgets/basic.dart'; | 7 import 'package:sky/widgets/basic.dart'; |
| 8 import 'package:sky/widgets/card.dart'; | 8 import 'package:sky/widgets/card.dart'; |
| 9 import 'package:sky/widgets/scaffold.dart'; | 9 import 'package:sky/widgets/scaffold.dart'; |
| 10 import 'package:sky/widgets/tabs.dart'; | 10 import 'package:sky/widgets/tabs.dart'; |
| 11 import 'package:sky/widgets/theme.dart'; | 11 import 'package:sky/widgets/theme.dart'; |
| 12 import 'package:sky/widgets/tool_bar.dart'; | 12 import 'package:sky/widgets/tool_bar.dart'; |
| 13 import 'package:sky/widgets/widget.dart'; | 13 import 'package:sky/widgets/widget.dart'; |
| 14 | 14 |
| 15 class TabbedNavigatorApp extends App { | 15 class TabbedNavigatorApp extends App { |
| 16 // The index of the selected tab for each of the TabNavigators constructed bel
ow. | 16 // The index of the selected tab for each of the TabNavigators constructed bel
ow. |
| 17 List<int> selectedIndices = new List<int>.filled(4, 0); | 17 List<int> selectedIndices = new List<int>.filled(5, 0); |
| 18 | 18 |
| 19 TabNavigator _buildTabNavigator(int n, List<TabNavigatorView> views) { | 19 TabNavigator _buildTabNavigator(int n, List<TabNavigatorView> views, {scrollab
le: false}) { |
| 20 return new TabNavigator( | 20 return new TabNavigator( |
| 21 views: views, | 21 views: views, |
| 22 selectedIndex: selectedIndices[n], | 22 selectedIndex: selectedIndices[n], |
| 23 scrollable: scrollable, |
| 23 onChanged: (tabIndex) { | 24 onChanged: (tabIndex) { |
| 24 setState(() { selectedIndices[n] = tabIndex; } ); | 25 setState(() { selectedIndices[n] = tabIndex; } ); |
| 25 } | 26 } |
| 26 ); | 27 ); |
| 27 } | 28 } |
| 28 | 29 |
| 29 Widget _buildContent(String label) { | 30 Widget _buildContent(String label) { |
| 30 return new Center( | 31 return new Center( |
| 31 child: new Text(label, style: const TextStyle(fontSize: 48.0, fontWeight:
FontWeight.w800)) | 32 child: new Text(label, style: const TextStyle(fontSize: 48.0, fontWeight:
FontWeight.w800)) |
| 32 ); | 33 ); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 builder: () => _buildContent("Portfolio") | 66 builder: () => _buildContent("Portfolio") |
| 66 ), | 67 ), |
| 67 new TabNavigatorView( | 68 new TabNavigatorView( |
| 68 label: const TabLabel(text: 'SUMMARY', icon: 'action/assessment_white'), | 69 label: const TabLabel(text: 'SUMMARY', icon: 'action/assessment_white'), |
| 69 builder: () => _buildContent("Summary") | 70 builder: () => _buildContent("Summary") |
| 70 ) | 71 ) |
| 71 ]; | 72 ]; |
| 72 return _buildTabNavigator(n, views); | 73 return _buildTabNavigator(n, views); |
| 73 } | 74 } |
| 74 | 75 |
| 76 TabNavigator _buildScrollableTabNavigator(int n) { |
| 77 Iterable<TabNavigatorView> views = [ |
| 78 "MIN WIDTH", |
| 79 "THIS TAB LABEL IS SO WIDE THAT IT OCCUPIES TWO LINES", |
| 80 "THIS TAB IS PRETTY WIDE TOO", |
| 81 "MORE", |
| 82 "TABS", |
| 83 "TO", |
| 84 "STRETCH", |
| 85 "OUT", |
| 86 "THE", |
| 87 "TAB BAR" |
| 88 ] |
| 89 .map((text) { |
| 90 return new TabNavigatorView( |
| 91 label: new TabLabel(text: text), |
| 92 builder: () => _buildContent(text) |
| 93 ); |
| 94 }); |
| 95 return _buildTabNavigator(n, views.toList(), scrollable: true); |
| 96 } |
| 97 |
| 98 |
| 75 Container _buildCard(TabNavigator tabNavigator) { | 99 Container _buildCard(TabNavigator tabNavigator) { |
| 76 return new Container( | 100 return new Container( |
| 77 child: new Card(child: tabNavigator), | 101 child: new Card(child: new Padding(child: tabNavigator, padding: const Edge
Dims.all(8.0))), |
| 78 padding: const EdgeDims.all(12.0), | 102 padding: const EdgeDims.all(12.0), |
| 79 decoration: new BoxDecoration(backgroundColor: Theme.of(this).primarySwatch
[50]) | 103 decoration: new BoxDecoration(backgroundColor: Theme.of(this).primarySwatch
[50]) |
| 80 ); | 104 ); |
| 81 } | 105 } |
| 82 | 106 |
| 83 Widget build() { | 107 Widget build() { |
| 84 List<TabNavigatorView> views = <TabNavigatorView>[ | 108 List<TabNavigatorView> views = <TabNavigatorView>[ |
| 85 new TabNavigatorView( | 109 new TabNavigatorView( |
| 86 label: const TabLabel(text: 'TEXT'), | 110 label: const TabLabel(text: 'TEXT'), |
| 87 builder: () => _buildCard(_buildTextLabelsTabNavigator(0)) | 111 builder: () => _buildCard(_buildTextLabelsTabNavigator(0)) |
| 88 ), | 112 ), |
| 89 new TabNavigatorView( | 113 new TabNavigatorView( |
| 90 label: const TabLabel(text: 'ICONS'), | 114 label: const TabLabel(text: 'ICONS'), |
| 91 builder: () => _buildCard(_buildIconLabelsTabNavigator(1)) | 115 builder: () => _buildCard(_buildIconLabelsTabNavigator(1)) |
| 92 ), | 116 ), |
| 93 new TabNavigatorView( | 117 new TabNavigatorView( |
| 94 label: const TabLabel(text: 'BOTH'), | 118 label: const TabLabel(text: 'BOTH'), |
| 95 builder: () => _buildCard(_buildTextAndIconLabelsTabNavigator(2)) | 119 builder: () => _buildCard(_buildTextAndIconLabelsTabNavigator(2)) |
| 120 ), |
| 121 new TabNavigatorView( |
| 122 label: const TabLabel(text: 'SCROLL'), |
| 123 builder: () => _buildCard(_buildScrollableTabNavigator(3)) |
| 96 ) | 124 ) |
| 97 ]; | 125 ]; |
| 98 | 126 |
| 99 TabNavigator tabNavigator = _buildTabNavigator(3, views); | 127 TabNavigator tabNavigator = _buildTabNavigator(4, views); |
| 128 assert(selectedIndices.length == 5); |
| 100 | 129 |
| 101 ToolBar toolbar = new ToolBar( | 130 ToolBar toolbar = new ToolBar( |
| 102 center: new Text('Tabbed Navigator', style: typography.white.title) | 131 center: new Text('Tabbed Navigator', style: typography.white.title) |
| 103 ); | 132 ); |
| 104 | 133 |
| 105 return new Scaffold( | 134 return new Scaffold( |
| 106 toolbar: toolbar, | 135 toolbar: toolbar, |
| 107 body: tabNavigator | 136 body: tabNavigator |
| 108 ); | 137 ); |
| 109 } | 138 } |
| 110 } | 139 } |
| 111 | 140 |
| 112 void main() { | 141 void main() { |
| 113 runApp(new TabbedNavigatorApp()); | 142 runApp(new TabbedNavigatorApp()); |
| 114 } | 143 } |
| OLD | NEW |