Index: sky/examples/fn/widgets/drawer.dart |
diff --git a/sky/examples/fn/widgets/drawer.dart b/sky/examples/fn/widgets/drawer.dart |
deleted file mode 100644 |
index 8f36d182455a0a51457e73afaca04a52e32f7897..0000000000000000000000000000000000000000 |
--- a/sky/examples/fn/widgets/drawer.dart |
+++ /dev/null |
@@ -1,159 +0,0 @@ |
-part of widgets; |
- |
-const double _kWidth = 256.0; |
-const double _kMinFlingVelocity = 0.4; |
-const double _kBaseSettleDurationMS = 246.0; |
-const double _kMaxSettleDurationMS = 600.0; |
-const Cubic _kAnimationCurve = easeOut; |
- |
-class DrawerAnimation extends Animation { |
- |
- Stream<double> get onPositionChanged => onValueChanged; |
- |
- bool get _isMostlyClosed => value <= -_kWidth / 2; |
- |
- DrawerAnimation() { |
- value = -_kWidth; |
- } |
- |
- void toggle(_) => _isMostlyClosed ? _open() : _close(); |
- |
- void handleMaskTap(_) => _close(); |
- |
- void handlePointerDown(_) => stop(); |
- |
- void handlePointerMove(sky.PointerEvent event) { |
- assert(!isAnimating); |
- value = math.min(0.0, math.max(value + event.dx, -_kWidth)); |
- } |
- |
- void handlePointerUp(_) { |
- if (!isAnimating) |
- _settle(); |
- } |
- |
- void handlePointerCancel(_) { |
- if (!isAnimating) |
- _settle(); |
- } |
- |
- void _open() => _animateToPosition(0.0); |
- |
- void _close() => _animateToPosition(-_kWidth); |
- |
- void _settle() => _isMostlyClosed ? _close() : _open(); |
- |
- void _animateToPosition(double targetPosition) { |
- double distance = (targetPosition - value).abs(); |
- if (distance != 0) { |
- double targetDuration = distance / _kWidth * _kBaseSettleDurationMS; |
- double duration = math.min(targetDuration, _kMaxSettleDurationMS); |
- animateTo(targetPosition, duration, curve: _kAnimationCurve); |
- } |
- } |
- |
- void handleFlingStart(event) { |
- double direction = event.velocityX.sign; |
- double velocityX = event.velocityX.abs() / 1000; |
- if (velocityX < _kMinFlingVelocity) |
- return; |
- |
- double targetPosition = direction < 0.0 ? -_kWidth : 0.0; |
- double distance = (targetPosition - value).abs(); |
- double duration = distance / velocityX; |
- |
- animateTo(targetPosition, duration, curve: linear); |
- } |
-} |
- |
-class Drawer extends Component { |
- |
- static Style _style = new Style(''' |
- position: absolute; |
- z-index: 2; |
- top: 0; |
- left: 0; |
- bottom: 0; |
- right: 0; |
- box-shadpw: ${Shadow[3]};''' |
- ); |
- |
- static Style _maskStyle = new Style(''' |
- background-color: black; |
- will-change: opacity; |
- position: absolute; |
- top: 0; |
- left: 0; |
- bottom: 0; |
- right: 0;''' |
- ); |
- |
- static Style _contentStyle = new Style(''' |
- background-color: ${Grey[50]}; |
- will-change: transform; |
- position: absolute; |
- z-index: 3; |
- width: 256px; |
- top: 0; |
- left: 0; |
- bottom: 0;''' |
- ); |
- |
- DrawerAnimation animation; |
- List<Node> children; |
- |
- Drawer({ |
- Object key, |
- this.animation, |
- this.children |
- }) : super(key: key); |
- |
- double _position = -_kWidth; |
- |
- bool _listening = false; |
- |
- void _ensureListening() { |
- if (_listening) |
- return; |
- |
- _listening = true; |
- animation.onPositionChanged.listen((position) { |
- setState(() { |
- _position = position; |
- }); |
- }); |
- } |
- |
- Node build() { |
- _ensureListening(); |
- |
- bool isClosed = _position <= -_kWidth; |
- String inlineStyle = 'display: ${isClosed ? 'none' : ''}'; |
- String maskInlineStyle = 'opacity: ${(_position / _kWidth + 1) * 0.25}'; |
- String contentInlineStyle = 'transform: translateX(${_position}px)'; |
- |
- Container mask = new Container( |
- key: 'Mask', |
- style: _maskStyle, |
- inlineStyle: maskInlineStyle |
- )..events.listen('gesturetap', animation.handleMaskTap) |
- ..events.listen('gestureflingstart', animation.handleFlingStart); |
- |
- Container content = new Container( |
- key: 'Content', |
- style: _contentStyle, |
- inlineStyle: contentInlineStyle, |
- children: children |
- ); |
- |
- return new Container( |
- style: _style, |
- inlineStyle: inlineStyle, |
- children: [ mask, content ] |
- )..events.listen('pointerdown', animation.handlePointerDown) |
- ..events.listen('pointermove', animation.handlePointerMove) |
- ..events.listen('pointerup', animation.handlePointerUp) |
- ..events.listen('pointercancel', animation.handlePointerCancel); |
- |
- } |
-} |