Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: sky/sdk/lib/widgets/scaffold.dart

Issue 1218183009: When syncing a child, we have to update the parent in all cases. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/sdk/example/widgets/sector.dart ('k') | sky/sdk/lib/widgets/widget.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 'dart:sky' as sky; 5 import 'dart:sky' as sky;
6 6
7 import '../rendering/box.dart'; 7 import '../rendering/box.dart';
8 import '../rendering/object.dart'; 8 import '../rendering/object.dart';
9 import '../theme/view_configuration.dart'; 9 import '../theme/view_configuration.dart';
10 import 'widget.dart'; 10 import 'widget.dart';
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 174
175 Scaffold({ 175 Scaffold({
176 String key, 176 String key,
177 Widget body, 177 Widget body,
178 Widget statusBar, 178 Widget statusBar,
179 Widget toolbar, 179 Widget toolbar,
180 Widget snackBar, 180 Widget snackBar,
181 Widget floatingActionButton, 181 Widget floatingActionButton,
182 Widget drawer 182 Widget drawer
183 }) : super(key: key) { 183 }) : super(key: key) {
184 this[ScaffoldSlots.body] = body; 184 _slots[ScaffoldSlots.body] = body;
185 this[ScaffoldSlots.statusBar] = statusBar; 185 _slots[ScaffoldSlots.statusBar] = statusBar;
186 this[ScaffoldSlots.toolbar] = toolbar; 186 _slots[ScaffoldSlots.toolbar] = toolbar;
187 this[ScaffoldSlots.snackBar] = snackBar; 187 _slots[ScaffoldSlots.snackBar] = snackBar;
188 this[ScaffoldSlots.floatingActionButton] = floatingActionButton; 188 _slots[ScaffoldSlots.floatingActionButton] = floatingActionButton;
189 this[ScaffoldSlots.drawer] = drawer; 189 _slots[ScaffoldSlots.drawer] = drawer;
190 } 190 }
191 191
192 Map<ScaffoldSlots, Widget> _slots = new Map<ScaffoldSlots, Widget>(); 192 Map<ScaffoldSlots, Widget> _slots = new Map<ScaffoldSlots, Widget>();
193 Widget operator[] (ScaffoldSlots slot) => _slots[slot];
194 void operator[]= (ScaffoldSlots slot, Widget value) {
195 _slots[slot] = value;
196 }
197 193
198 RenderScaffold get root => super.root; 194 RenderScaffold get root => super.root;
199 RenderScaffold createNode() => new RenderScaffold(); 195 RenderScaffold createNode() => new RenderScaffold();
200 196
201 void walkChildren(WidgetTreeWalker walker) { 197 void walkChildren(WidgetTreeWalker walker) {
202 for (ScaffoldSlots slot in ScaffoldSlots.values) { 198 for (ScaffoldSlots slot in ScaffoldSlots.values) {
203 Widget widget = _slots[slot]; 199 Widget widget = _slots[slot];
204 if (widget != null) 200 if (widget != null)
205 walker(widget); 201 walker(widget);
206 } 202 }
(...skipping 12 matching lines...) Expand all
219 } 215 }
220 216
221 void remove() { 217 void remove() {
222 walkChildren((Widget child) => removeChild(child)); 218 walkChildren((Widget child) => removeChild(child));
223 super.remove(); 219 super.remove();
224 } 220 }
225 221
226 void syncRenderObject(Widget old) { 222 void syncRenderObject(Widget old) {
227 super.syncRenderObject(old); 223 super.syncRenderObject(old);
228 for (ScaffoldSlots slot in ScaffoldSlots.values) { 224 for (ScaffoldSlots slot in ScaffoldSlots.values) {
229 Widget widget = this[slot]; 225 Widget widget = _slots[slot];
230 this[slot] = syncChild(widget, old is Scaffold ? old[slot] : null, slot); 226 _slots[slot] = syncChild(widget, old is Scaffold ? old._slots[slot] : null , slot);
227 assert((_slots[slot] == null) == (widget == null));
228 assert(_slots[slot] == null || _slots[slot].parent == this);
231 } 229 }
232 } 230 }
233 231
234 } 232 }
OLDNEW
« no previous file with comments | « sky/sdk/example/widgets/sector.dart ('k') | sky/sdk/lib/widgets/widget.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698