anchor.diff:    @override
     Widget build(BuildContext context) {
       final controller = Provider.of<BannerMessagesController>(context);
  -    final messagesForScreen = controller?.messagesForScreen(screen.screenId);
  +    final messagesForScreen = controller.messagesForScreen(screen.screenId);
       return Column(
         children: [
  -        if (messagesForScreen != null)
  -          ValueListenableBuilder<List<BannerMessage>>(
  -            valueListenable: messagesForScreen,
  -            builder: (context, messages, _) {
  -              return Column(
  -                children: messages,
  -              );
  -            },
  -          ),
  +        ValueListenableBuilder<List<BannerMessage>>(
  +          valueListenable: messagesForScreen,
  +          builder: (context, messages, _) {
  +            return Column(
  +              children: messages,
  +            );
  +          },
  +        ),
           Expanded(
             child: screen.build(context),
           )
  
positive.code: 
  class _BannerError extends BannerMessage {
    const _BannerError({
      @required Key key,
      @required List<TextSpan> textSpans,
      @required String screenId,
    }) : super(
            key: key,
            textSpans: textSpans,
  
negative.code:     // 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);
  