提交 3b53de73 编写于 作者: H Hans Muller

Vertically center stock demo row contents, better up/down arrows

StockRows are now a relatively simple application of flex layout.

The up/down arrows are now rendered within a circle, like
the original version. The arrows are a little bigger,
because.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1165223005.
上级 d9de344d
...@@ -34,25 +34,37 @@ class StockArrow extends Component { ...@@ -34,25 +34,37 @@ class StockArrow extends Component {
const double size = 40.0; const double size = 40.0;
var arrow = new CustomPaint(callback: (sky.Canvas canvas) { var arrow = new CustomPaint(callback: (sky.Canvas canvas) {
Paint paint = new Paint()..color = color; Paint paint = new Paint()..color = color;
paint.setStyle(sky.PaintingStyle.stroke); paint.strokeWidth = 1.0;
paint.strokeWidth = 2.0;
var padding = paint.strokeWidth * 3.0; var padding = paint.strokeWidth * 3.0;
var w = size - padding * 2.0; var r = size / 2.0 - padding;
var h = size - padding * 2.0;
canvas.save(); canvas.save();
canvas.translate(padding, padding); canvas.translate(padding, padding);
// The arrow (below) is drawn upwards by default.
if (percentChange < 0.0) { if (percentChange < 0.0) {
var cx = w / 2.0; canvas.translate(r, r);
var cy = h / 2.0;
canvas.translate(cx, cy);
canvas.rotate(math.PI); canvas.rotate(math.PI);
canvas.translate(-cx, -cy); canvas.translate(-r, -r);
} }
canvas.drawLine(0.0, h, w, h, paint);
canvas.drawLine(w, h, w / 2.0, 0.0, paint); // Draw the (equliateral triangle) arrow.
canvas.drawLine(w / 2.0, 0.0, 0.0, h, paint); var dx = math.sqrt(3.0) * r / 2.0;
var path = new Path();
path.moveTo(r, 0.0);
path.lineTo(r + dx, r * 1.5);
path.lineTo(r - dx, r * 1.5);
path.lineTo(r, 0.0);
path.close();
paint.setStyle(sky.PaintingStyle.fill);
canvas.drawPath(path, paint);
// Draw a circle that circumscribes the arrow.
paint.setStyle(sky.PaintingStyle.stroke);
canvas.drawCircle(r, r, r + 2.0, paint);
canvas.restore(); canvas.restore();
}); });
return new Container( return new Container(
child: arrow, child: arrow,
width: size, width: size,
......
...@@ -5,13 +5,14 @@ ...@@ -5,13 +5,14 @@
import 'dart:sky' as sky; import 'dart:sky' as sky;
import 'package:sky/framework/components2/ink_well.dart'; import 'package:sky/framework/components2/ink_well.dart';
import 'package:sky/framework/fn2.dart'; import 'package:sky/framework/fn2.dart';
import 'package:sky/framework/rendering/flex.dart';
import 'package:sky/framework/rendering/box.dart'; import 'package:sky/framework/rendering/box.dart';
import 'package:sky/framework/theme/typography.dart' as typography; import 'package:sky/framework/theme/typography.dart' as typography;
import 'stock_arrow.dart'; import 'stock_arrow.dart';
import 'stock_data.dart'; import 'stock_data.dart';
class StockRow extends Component { class StockRow extends Component {
static const double kHeight = 100.0; static const double kHeight = 70.0;
Stock stock; Stock stock;
...@@ -23,36 +24,28 @@ class StockRow extends Component { ...@@ -23,36 +24,28 @@ class StockRow extends Component {
String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}"; String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}";
String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%"; String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%";
if (stock.percentChange > 0) if (stock.percentChange > 0) changeInPrice = "+" + changeInPrice;
changeInPrice = "+" + changeInPrice;
List<UINode> children = [ List<UINode> children = [
new StockArrow(
percentChange: stock.percentChange
),
new FlexExpandingChild(new Text(stock.symbol)),
new Container( new Container(
width: 75.0, child: new StockArrow(percentChange: stock.percentChange),
padding: const EdgeDims.only(right: 16.0), margin: const EdgeDims.only(right: 5.0)),
// text-align: right new FlexExpandingChild(new Text(stock.symbol), flex: 2, key: "symbol"),
child: new Text(lastSale) // TODO(hansmuller): text-align: right
), new FlexExpandingChild(new Text(lastSale), key: "lastSale"),
// text-align: right, ${typography.black.caption}; // TODO(hansmuller): text-align: right, ${typography.black.caption};
new SizedBox( new FlexExpandingChild(new Text(changeInPrice), key: "changeInPrice")
width: 75.0,
child: new Text(changeInPrice)
),
]; ];
return new Container( return new Container(
padding: const EdgeDims(16.0, 16.0, 20.0, 16.0), padding: const EdgeDims(16.0, 16.0, 20.0, 16.0),
height: kHeight, height: kHeight, // TODO(hansmuller): This shouldn't be needed
decoration: const BoxDecoration( decoration: const BoxDecoration(
backgroundColor: const sky.Color(0xFFFFFFFF), backgroundColor: const sky.Color(0xFFFFFFFF),
border: const Border( border: const Border(
bottom: const BorderSide( bottom: const BorderSide(
color: const sky.Color(0xFFF4F4F4), color: const sky.Color(0xFFF4F4F4),
width: 1.0))), width: 1.0))),
child: new FlexContainer(children: children)); child: new FlexContainer(children: children));
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册