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

Unified Diff: sky/examples/stocks-fn/stockrow.dart

Issue 971183002: Initial commit of Effen reactive framework experiment for Sky (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 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/stocks-fn/stocklist.dart ('k') | sky/examples/stocks-fn/stocks.sky » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/examples/stocks-fn/stockrow.dart
diff --git a/sky/examples/stocks-fn/stockrow.dart b/sky/examples/stocks-fn/stockrow.dart
new file mode 100644
index 0000000000000000000000000000000000000000..a5681f1f48fa670d05d426d9c1670e6135bb25c7
--- /dev/null
+++ b/sky/examples/stocks-fn/stockrow.dart
@@ -0,0 +1,124 @@
+part of stocksapp;
+
+class StockRow extends Component {
+
+ Stock stock;
+ LinkedHashSet<SplashAnimation> _splashes;
+
+ static Style _style = new Style('''
+ transform: translateX(0);
+ max-height: 48px;
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid #F4F4F4;
+ padding-top: 16px;
+ padding-left: 16px;
+ padding-right: 16px;
+ padding-bottom: 20px;'''
+ );
+
+ static Style _tickerStyle = new Style('''
+ flex: 1;
+ font-family: 'Roboto Medium', 'Helvetica';'''
+ );
+
+ static Style _lastSaleStyle = new Style('''
+ text-align: right;
+ padding-right: 16px;'''
+ );
+
+ static Style _changeStyle = new Style('''
+ color: #8A8A8A;
+ text-align: right;'''
+ );
+
+ StockRow({Stock stock}) : super(key: stock.symbol) {
+ this.stock = stock;
+ }
+
+ Node render() {
+ String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}";
+
+ String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%";
+ if (stock.percentChange > 0)
+ changeInPrice = "+" + changeInPrice;
+
+ List<Node> children = [
+ new StockArrow(
+ percentChange: stock.percentChange
+ ),
+ new Container(
+ key: 'Ticker',
+ style: _tickerStyle,
+ children: [new Text(stock.symbol)]
+ ),
+ new Container(
+ key: 'LastSale',
+ style: _lastSaleStyle,
+ children: [new Text(lastSale)]
+ ),
+ new Container(
+ key: 'Change',
+ style: _changeStyle,
+ children: [new Text(changeInPrice)]
+ )
+ ];
+
+ if (_splashes != null) {
+ children.addAll(_splashes.map((s) => new InkSplash(s.onStyleChanged)));
+ }
+
+ return new Container(
+ style: _style,
+ onScrollStart: _cancelSplashes,
+ onWheel: _cancelSplashes,
+ onPointerDown: _handlePointerDown,
+ children: children
+ );
+ }
+
+ sky.ClientRect _getBoundingRect() => getRoot().getBoundingClientRect();
+
+ void _handlePointerDown(sky.Event event) {
+ setState(() {
+ if (_splashes == null) {
+ _splashes = new LinkedHashSet<SplashAnimation>();
+ }
+
+ var splash;
+ splash = new SplashAnimation(_getBoundingRect(), event.x, event.y,
+ onDone: () { _splashDone(splash); });
+
+ _splashes.add(splash);
+ });
+ }
+
+ void _cancelSplashes(sky.Event event) {
+ if (_splashes == null) {
+ return;
+ }
+
+ setState(() {
+ var splashes = _splashes;
+ _splashes = null;
+ splashes.forEach((s) { s.cancel(); });
+ });
+ }
+
+ void willUnmount() {
+ _cancelSplashes(null);
+ }
+
+ void _splashDone(SplashAnimation splash) {
+ if (_splashes == null) {
+ return;
+ }
+
+ setState(() {
+ _splashes.remove(splash);
+ if (_splashes.length == 0) {
+ _splashes = null;
+ }
+ });
+ }
+}
« no previous file with comments | « sky/examples/stocks-fn/stocklist.dart ('k') | sky/examples/stocks-fn/stocks.sky » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698