Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Unified Diff: sky/examples/fn/widgets/drawer.dart

Issue 993033003: Move example fn widgets into sky/framework/components (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/examples/fn/widgets/checkbox.dart ('k') | sky/examples/fn/widgets/drawerheader.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
-
- }
-}
« no previous file with comments | « sky/examples/fn/widgets/checkbox.dart ('k') | sky/examples/fn/widgets/drawerheader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698