code: public static void bindVisible (final Value<Boolean> value, final Thunk thunk)
      {
          Preconditions.checkNotNull(thunk, "thunk");
          value.addListenerAndTrigger(new Value.Listener<Boolean>() {
              public void valueChanged (Boolean visible) {
                  if (visible) {
                      value.removeListener(this);
                      bindVisible(value, thunk.createWidget());
                  }
              }
          });
      }
docs: Binds the visible state of a to-be-created widget to the supplied boolean value. The
  supplied thunk will be called to create the widget (and add it to the appropriate parent)
  the first time the value transitions to true, at which point the visiblity of the created
  widget will be bound to subsequent changes of the value.