// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:collection'; import 'framework.dart'; import 'media_query.dart'; bool debugCheckHasMediaQuery(BuildContext context) { assert(() { if (MediaQuery.of(context) == null) { Element element = context; throw new FlutterError( 'No MediaQuery widget found.\n' '${element.widget.runtimeType} widgets require a MediaQuery widget ancestor.\n' 'The specific widget that could not find a MediaQuery ancestor was:\n' ' ${element.widget}' 'The ownership chain for the affected widget is:\n' ' ${element.debugGetOwnershipChain(10)}' ); } return true; }); return true; } bool debugHasDuplicateKeys(Widget parent, Iterable<Widget> children) { assert(() { Set<Key> keySet = new HashSet<Key>(); for (Widget child in children) { assert(child != null); if (child.key == null) continue; if (!keySet.add(child.key)) { throw new FlutterError( 'Duplicate keys found.\n' 'If multiple keyed nodes exist as children of another node, they must have unique keys.\n' '$parent has multiple children with key "${child.key}".' ); } } return true; }); return false; }