anchor.diff:      assert(widget == newWidget);
       _children = updateChildren(_children, widget.children);
     }
  +}
  +
  +class WidgetError extends Error {
  +  WidgetError(String message, [ String rawDetails = '' ]) {
  +    rawDetails = rawDetails.trimRight(); // remove trailing newlines
  +    if (rawDetails != '')
  +      _message = '$message\n$rawDetails';
  +    else
  +      _message = message;
  +  }
  +  String _message;
  +  String toString() => _message;
   }
   
   typedef void WidgetsExceptionHandler(String context, dynamic exception, StackTrace stack);
  
positive.code:   static bool _debugCheckForDuplicates() {
      String message = '';
      for (GlobalKey key in _debugDuplicates.keys) {
        message += 'Duplicate GlobalKey found amongst mounted elements: $key (${_debugDuplicates[key]} instances)\n';
        message += 'Most recently registered instance is:\n${_registry[key]}\n';
      }
      if (!_debugDuplicates.isEmpty)
        throw message;
      return true;
    }
  
  
negative.code:     assert(() {
        if (_state._debugLifecycleState == _StateLifecycle.defunct)
          return true;
        throw new WidgetError('${_state.runtimeType}.dispose failed to call super.dispose.');
      });
      assert(!dirty); // See BuildableElement.unmount for why this is important.
      _state._element = null;
  