WithTransition top-level property
A wrapper component that hooks into CSS transition(s) present on a single child passed to it.
For example, say you have an element that "fades" in/out using the fade
CSS class to apply
a CSS transition
, and an in
CSS class that - when present - changes the opacity from 0
to 1
.
Using this component, you can simply toggle the value of WithTransitionPropsMixin.isShown from false
to
true
using your own state to make the node "fade in", and hook into the available prop callbacks like
onDidShow
, onDidHide
to know when the CSS transition has completed.
import 'package:over_react/over_react.dart';
import 'package:over_react/components.dart' show WithTransition;
mixin WithTransitionExampleProps on UiProps {
bool? initiallyShown;
}
UiFactory<WithTransitionExampleProps> WithTransitionExample = uiFunction(
(props) {
final initiallyShown = props.initiallyShown ?? false;
final isShown = useState(initiallyShown);
final classes = ClassNameBuilder.fromProps(props)
..add('fade')
..add('in', isShown.value);
return Dom.div()(
Dom.div()(
(Dom.button()
..type = 'button'
..onClick = (useCallback((_) {
isShown.setWithUpdater((isShown) => !isShown);
}, const []))
)('Toggle Visibility'),
),
(WithTransition()
..isShown = isShown.value
..onWillShow = () {
// Do something that should happen before the CSS transition completes.
}
..onDidShow = () {
// Do something that shouldn't happen until the CSS transition completes.
}
..onWillHide = () {
// Do something that should happen before the CSS transition completes.
}
..onDidHide = () {
// Do something that shouldn't happen until the CSS transition completes.
}
)(
(Dom.div()
..className = classes.toClassName()
)(
// Some children...
),
)
);
},
_$WithTransitionExampleConfig, // ignore: undefined_identifier
);
Wrapping around custom components
If you want to wrap around another component instead of around a single Dom
element child as shown in the
first example above, you must ensure that the value of props.ref
is forwarded to the Element
that has
the CSS transition using uiForwardRef
:
import 'package:over_react/over_react.dart';
mixin CustomChildProps on UiProps {}
UiFactory<CustomChildProps> CustomChild = uiForwardRef(
(props, ref) {
return (Dom.div()..ref = ref)(
props.children,
),
},
_$CustomChildConfig, // ignore: undefined_identifier
);
Implementation
UiFactory<WithTransitionProps> WithTransition = castUiFactory(_$WithTransition);