code: private void onChanged() {
      // If builder is null, this is the case where onChanged is being called
      // from setMessage or clear.
      if (builder != null) {
        message = null;
      }
      if (isClean && parent != null) {
        parent.markDirty();
  
        // Don't keep dispatching invalidations until build is called again.
        isClean = false;
      }
    }
docs: Called when a the builder or one of its nested children has changed and any parent should be
  notified of its invalidation.