anchor.diff:      WidgetsBinding.instance.addPostFrameCallback((_) {
         if (isMessageDismissed(message) || isMessageVisible(message)) return;
         final messages = _messagesForScreen(message.screenId);
  -      messages.value.add(message);
  -      // TODO(kenz): we should make a ListValueNotifier class that handles
  -      // notifying listeners so we don't have to make an illegal call to a
  -      // protected method.
  -      // ignore: invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member
  -      messages.notifyListeners();
  +      messages.add(message);
       });
     }
   
     void removeMessage(BannerMessage message, {bool dismiss = false}) {
  +    if (dismiss) {
  +      _dismissedMessageKeys.add(message.key);
  +    }
       // We push the banner message in a post frame callback because otherwise,
       // we'd be trying to call setState while the parent widget `BannerMessages`
       // is in the middle of `build`.
       WidgetsBinding.instance.addPostFrameCallback((_) {
  -      if (dismiss) {
  -        assert(!_dismissedMessageKeys.contains(message.key));
  -        _dismissedMessageKeys.add(message.key);
  -      }
         final messages = _messagesForScreen(message.screenId);
  -      messages.value.remove(message);
  -      // ignore: invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member
  -      messages.notifyListeners();
  +      messages.remove(message);
       });
     }
   
  
positive.code:     'https://flutter.dev/docs/development/tools/devtools/performance#profile-granularity';
  
  class BannerMessagesController {
    final _messages = <String, ValueNotifier<List<BannerMessage>>>{};
    final _dismissedMessageKeys = <Key?>{};
  
    void addMessage(BannerMessage message) {
  
negative.code:         .isNotEmpty;
    }
  
    ListValueNotifier<BannerMessage> _messagesForScreen(String screenId) {
      return _messages.putIfAbsent(
        screenId,
        () => ListValueNotifier<BannerMessage>([]),
      );
    }
  
  