OLD | NEW |
(Empty) | |
| 1 part of widgets; |
| 2 |
| 3 const double _kSplashSize = 400.0; |
| 4 const double _kSplashDuration = 500.0; |
| 5 |
| 6 class SplashAnimation { |
| 7 AnimationGenerator _animation; |
| 8 double _offsetX; |
| 9 double _offsetY; |
| 10 |
| 11 Stream<String> _styleChanged; |
| 12 |
| 13 Stream<String> get onStyleChanged => _styleChanged; |
| 14 |
| 15 void cancel() => _animation.cancel(); |
| 16 |
| 17 SplashAnimation(sky.ClientRect rect, double x, double y, |
| 18 { Function onDone }) |
| 19 : _offsetX = x - rect.left, |
| 20 _offsetY = y - rect.top { |
| 21 |
| 22 _animation = new AnimationGenerator(_kSplashDuration, |
| 23 end: _kSplashSize, curve: easeOut, onDone: onDone); |
| 24 |
| 25 _styleChanged = _animation.onTick.map((p) => ''' |
| 26 top: ${_offsetY - p/2}px; |
| 27 left: ${_offsetX - p/2}px; |
| 28 width: ${p}px; |
| 29 height: ${p}px; |
| 30 border-radius: ${p}px; |
| 31 opacity: ${1.0 - (p / _kSplashSize)}; |
| 32 '''); |
| 33 } |
| 34 } |
| 35 |
| 36 class InkSplash extends Component { |
| 37 |
| 38 Stream<String> onStyleChanged; |
| 39 |
| 40 static Style _style = new Style(''' |
| 41 position: absolute; |
| 42 pointer-events: none; |
| 43 overflow: hidden; |
| 44 top: 0; |
| 45 left: 0; |
| 46 bottom: 0; |
| 47 right: 0; |
| 48 '''); |
| 49 |
| 50 static Style _splashStyle = new Style(''' |
| 51 position: absolute; |
| 52 background-color: rgba(0, 0, 0, 0.4); |
| 53 border-radius: 0; |
| 54 top: 0; |
| 55 left: 0; |
| 56 height: 0; |
| 57 width: 0; |
| 58 '''); |
| 59 |
| 60 double _offsetX; |
| 61 double _offsetY; |
| 62 String _inlineStyle; |
| 63 |
| 64 InkSplash(Stream<String> onStyleChanged) |
| 65 : onStyleChanged = onStyleChanged, |
| 66 super(stateful: true, key: onStyleChanged.hashCode); |
| 67 |
| 68 bool _listening = false; |
| 69 |
| 70 void _ensureListening() { |
| 71 if (_listening) |
| 72 return; |
| 73 |
| 74 _listening = true; |
| 75 |
| 76 onStyleChanged.listen((style) { |
| 77 setState(() { |
| 78 _inlineStyle = style; |
| 79 }); |
| 80 }); |
| 81 } |
| 82 |
| 83 Node render() { |
| 84 _ensureListening(); |
| 85 |
| 86 return new Container( |
| 87 style: _style, |
| 88 children: [ |
| 89 new Container( |
| 90 inlineStyle: _inlineStyle, |
| 91 style: _splashStyle |
| 92 ) |
| 93 ] |
| 94 ); |
| 95 } |
| 96 } |
OLD | NEW |