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 '../rendering/box.dart'; | 5 import '../rendering/box.dart'; |
6 import '../rendering/object.dart'; | 6 import '../rendering/object.dart'; |
7 import '../theme/view_configuration.dart'; | 7 import '../theme/view_configuration.dart'; |
8 import 'widget.dart'; | 8 import 'widget.dart'; |
9 | 9 |
10 enum ScaffoldSlots { | 10 enum ScaffoldSlots { |
(...skipping 21 matching lines...) Expand all Loading... |
32 } | 32 } |
33 | 33 |
34 Map<ScaffoldSlots, RenderBox> _slots = new Map<ScaffoldSlots, RenderBox>(); | 34 Map<ScaffoldSlots, RenderBox> _slots = new Map<ScaffoldSlots, RenderBox>(); |
35 RenderBox operator[] (ScaffoldSlots slot) => _slots[slot]; | 35 RenderBox operator[] (ScaffoldSlots slot) => _slots[slot]; |
36 void operator[]= (ScaffoldSlots slot, RenderBox value) { | 36 void operator[]= (ScaffoldSlots slot, RenderBox value) { |
37 RenderBox old = _slots[slot]; | 37 RenderBox old = _slots[slot]; |
38 if (old == value) | 38 if (old == value) |
39 return; | 39 return; |
40 if (old != null) | 40 if (old != null) |
41 dropChild(old); | 41 dropChild(old); |
42 _slots[slot] = value; | 42 if (value == null) { |
43 if (value != null) | 43 _slots.remove(slot); |
| 44 } else { |
| 45 _slots[slot] = value; |
44 adoptChild(value); | 46 adoptChild(value); |
| 47 } |
45 markNeedsLayout(); | 48 markNeedsLayout(); |
46 } | 49 } |
47 | 50 |
48 void attachChildren() { | 51 void attachChildren() { |
49 for (ScaffoldSlots slot in ScaffoldSlots.values) { | 52 for (ScaffoldSlots slot in ScaffoldSlots.values) { |
50 RenderBox box = _slots[slot]; | 53 RenderBox box = _slots[slot]; |
51 if (box != null) | 54 if (box != null) |
52 box.attach(); | 55 box.attach(); |
53 } | 56 } |
54 } | 57 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 } | 114 } |
112 if (_slots[ScaffoldSlots.drawer] != null) { | 115 if (_slots[ScaffoldSlots.drawer] != null) { |
113 RenderBox drawer = _slots[ScaffoldSlots.drawer]; | 116 RenderBox drawer = _slots[ScaffoldSlots.drawer]; |
114 drawer.layout(new BoxConstraints(minWidth: 0.0, maxWidth: size.width, minH
eight: size.height, maxHeight: size.height)); | 117 drawer.layout(new BoxConstraints(minWidth: 0.0, maxWidth: size.width, minH
eight: size.height, maxHeight: size.height)); |
115 assert(drawer.parentData is BoxParentData); | 118 assert(drawer.parentData is BoxParentData); |
116 drawer.parentData.position = Point.origin; | 119 drawer.parentData.position = Point.origin; |
117 } | 120 } |
118 if (_slots[ScaffoldSlots.floatingActionButton] != null) { | 121 if (_slots[ScaffoldSlots.floatingActionButton] != null) { |
119 RenderBox floatingActionButton = _slots[ScaffoldSlots.floatingActionButton
]; | 122 RenderBox floatingActionButton = _slots[ScaffoldSlots.floatingActionButton
]; |
120 Size area = new Size(size.width - kButtonX, size.height - kButtonY); | 123 Size area = new Size(size.width - kButtonX, size.height - kButtonY); |
121 floatingActionButton.layout(new BoxConstraints.loose(area)); | 124 floatingActionButton.layout(new BoxConstraints.loose(area), parentUsesSize
: true); |
122 assert(floatingActionButton.parentData is BoxParentData); | 125 assert(floatingActionButton.parentData is BoxParentData); |
123 floatingActionButton.parentData.position = (area - floatingActionButton.si
ze).toPoint(); | 126 floatingActionButton.parentData.position = (area - floatingActionButton.si
ze).toPoint(); |
124 } | 127 } |
125 } | 128 } |
126 | 129 |
127 void paint(RenderCanvas canvas) { | 130 void paint(RenderCanvas canvas) { |
128 for (ScaffoldSlots slot in [ScaffoldSlots.body, ScaffoldSlots.statusBar, Sca
ffoldSlots.toolbar, ScaffoldSlots.floatingActionButton, ScaffoldSlots.drawer]) { | 131 for (ScaffoldSlots slot in [ScaffoldSlots.body, ScaffoldSlots.statusBar, Sca
ffoldSlots.toolbar, ScaffoldSlots.floatingActionButton, ScaffoldSlots.drawer]) { |
129 RenderBox box = _slots[slot]; | 132 RenderBox box = _slots[slot]; |
130 if (box != null) { | 133 if (box != null) { |
131 assert(box.parentData is BoxParentData); | 134 assert(box.parentData is BoxParentData); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 void syncRenderObject(Widget old) { | 217 void syncRenderObject(Widget old) { |
215 super.syncRenderObject(old); | 218 super.syncRenderObject(old); |
216 _toolbar = syncChild(_toolbar, old is Scaffold ? old._toolbar : null, Scaffo
ldSlots.toolbar); | 219 _toolbar = syncChild(_toolbar, old is Scaffold ? old._toolbar : null, Scaffo
ldSlots.toolbar); |
217 _body = syncChild(_body, old is Scaffold ? old._body : null, ScaffoldSlots.b
ody); | 220 _body = syncChild(_body, old is Scaffold ? old._body : null, ScaffoldSlots.b
ody); |
218 _statusBar = syncChild(_statusBar, old is Scaffold ? old._statusBar : null,
ScaffoldSlots.statusBar); | 221 _statusBar = syncChild(_statusBar, old is Scaffold ? old._statusBar : null,
ScaffoldSlots.statusBar); |
219 _drawer = syncChild(_drawer, old is Scaffold ? old._drawer : null, ScaffoldS
lots.drawer); | 222 _drawer = syncChild(_drawer, old is Scaffold ? old._drawer : null, ScaffoldS
lots.drawer); |
220 _floatingActionButton = syncChild(_floatingActionButton, old is Scaffold ? o
ld._floatingActionButton : null, ScaffoldSlots.floatingActionButton); | 223 _floatingActionButton = syncChild(_floatingActionButton, old is Scaffold ? o
ld._floatingActionButton : null, ScaffoldSlots.floatingActionButton); |
221 } | 224 } |
222 | 225 |
223 } | 226 } |
OLD | NEW |