flutter/examples/rendering/shadowed_box.dart
Ian Hickson 51566aeffa More elaborate RenderBox example
Also, some trivial fixes for things that I found while playing with
the rendering library directly.
2016-01-17 22:31:41 -08:00

97 lines
3.7 KiB
Dart

// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/rendering.dart';
const List<BoxShadow> shadow = const <BoxShadow>[
const BoxShadow(offset: const Offset(0.0, 3.0), blurRadius: 1.0, spreadRadius: -2.0, color: const Color(0x33000000)),
const BoxShadow(offset: const Offset(0.0, 2.0), blurRadius: 2.0, spreadRadius: 0.0, color: const Color(0x24000000)),
const BoxShadow(offset: const Offset(0.0, 1.0), blurRadius: 5.0, spreadRadius: 0.0, color: const Color(0x1F000000)),
];
void main() {
RenderDecoratedBox box1, box2, box3;
new RenderingFlutterBinding(root: new RenderPadding(
padding: const EdgeDims.all(40.0),
child: new RenderViewport(
child: new RenderDecoratedBox(
decoration: const BoxDecoration(
backgroundColor: const Color(0xFFFFFFFF)
),
child: new RenderBlock(
children: <RenderBox>[
new RenderPadding(
padding: const EdgeDims.all(40.0),
child: new RenderPointerListener(
behavior: HitTestBehavior.opaque,
onPointerDown: (PointerDownEvent event) {
box1.decoration = const BoxDecoration(
gradient: const RadialGradient(
center: Point.origin, radius: 500.0,
colors: const <Color>[const Color(0x20F0D0B0), const Color(0xD0C0FFFF)]
),
borderRadius: 20.0
);
RenderPadding innerBox1 = box1.child;
innerBox1.padding *= 1.5;
innerBox1.child = new RenderParagraph(
const StyledTextSpan(
const TextStyle(
color: const Color(0xFF000000),
fontSize: 20.0,
fontWeight: FontWeight.w900,
textAlign: TextAlign.center
),
const <TextSpan>[ const PlainTextSpan('Hello World!') ]
)
);
RenderBlock block = box3.parent.parent;
block.remove(box3.parent);
RenderPadding innerBox2 = box2.child;
innerBox2.child = box3.parent;
RenderPointerListener listener = box1.parent;
listener.onPointerDown = null;
},
child: box1 = new RenderDecoratedBox(
decoration: const BoxDecoration(
backgroundColor: const Color(0xFFFFFF00),
boxShadow: shadow
),
child: new RenderPadding(
padding: const EdgeDims.all(40.0)
)
)
)
),
new RenderPadding(
padding: const EdgeDims.all(40.0),
child: box2 = new RenderDecoratedBox(
decoration: const BoxDecoration(
backgroundColor: const Color(0xFF00FFFF),
boxShadow: shadow
),
child: new RenderPadding(
padding: const EdgeDims.all(40.0)
)
)
),
new RenderPadding(
padding: const EdgeDims.all(40.0),
child: box3 = new RenderDecoratedBox(
decoration: const BoxDecoration(
backgroundColor: const Color(0xFF33FF33),
boxShadow: shadow
),
child: new RenderPadding(
padding: const EdgeDims.all(40.0)
)
)
),
]
)
)
)
));
}