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).primary[50]) | 103 decoration: new BoxDecoration(backgroundColor: Theme.of(this).primary[50]) |
80 ); | 104 ); |
81 } | 105 } |
82 | 106 |
83 Widget build() { | 107 Widget build() { |
| 108 int n = 0; |
84 List<TabNavigatorView> views = <TabNavigatorView>[ | 109 List<TabNavigatorView> views = <TabNavigatorView>[ |
85 new TabNavigatorView( | 110 new TabNavigatorView( |
86 label: const TabLabel(text: 'TEXT'), | 111 label: const TabLabel(text: 'TEXT'), |
87 builder: () => _buildCard(_buildTextLabelsTabNavigator(0)) | 112 builder: () => _buildCard(_buildTextLabelsTabNavigator(n++)) |
88 ), | 113 ), |
89 new TabNavigatorView( | 114 new TabNavigatorView( |
90 label: const TabLabel(text: 'ICONS'), | 115 label: const TabLabel(text: 'ICONS'), |
91 builder: () => _buildCard(_buildIconLabelsTabNavigator(1)) | 116 builder: () => _buildCard(_buildIconLabelsTabNavigator(n++)) |
92 ), | 117 ), |
93 new TabNavigatorView( | 118 new TabNavigatorView( |
94 label: const TabLabel(text: 'BOTH'), | 119 label: const TabLabel(text: 'BOTH'), |
95 builder: () => _buildCard(_buildTextAndIconLabelsTabNavigator(2)) | 120 builder: () => _buildCard(_buildTextAndIconLabelsTabNavigator(n++)) |
| 121 ), |
| 122 new TabNavigatorView( |
| 123 label: const TabLabel(text: 'SCROLL'), |
| 124 builder: () => _buildCard(_buildScrollableTabNavigator(n++)) |
96 ) | 125 ) |
97 ]; | 126 ]; |
98 | 127 |
99 TabNavigator tabNavigator = _buildTabNavigator(3, views); | 128 TabNavigator tabNavigator = _buildTabNavigator(n++, views); |
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 |