diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 41ac24cd09c..00db241accc 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -103,6 +103,7 @@ dart_pkg("sdk") { "lib/widgets/basic.dart", "lib/widgets/button_base.dart", "lib/widgets/checkbox.dart", + "lib/widgets/dialog.dart", "lib/widgets/drawer.dart", "lib/widgets/drawer_header.dart", "lib/widgets/fixed_height_scrollable.dart", diff --git a/sdk/lib/widgets/dialog.dart b/sdk/lib/widgets/dialog.dart new file mode 100644 index 00000000000..36a171aeb22 --- /dev/null +++ b/sdk/lib/widgets/dialog.dart @@ -0,0 +1,53 @@ +// 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 'basic.dart'; +import 'material.dart'; + +class Dialog extends Component { + Dialog({ + String key, + this.title, + this.content, + this.actions, + this.onDismiss + }) : super(key: key); + + final Widget title; + final Widget content; + final Widget actions; + final Function onDismiss; + + Widget build() { + Container mask = new Container( + decoration: const BoxDecoration( + backgroundColor: const Color(0x7F000000))); + + List children = new List(); + + if (title != null) + children.add(title); + + if (content != null) + children.add(content); + + if (actions != null) + children.add(content); + + return new Stack([ + new EventListenerNode(mask, onGestureTap: (_) => onDismiss()), + new Center( + child: new ConstrainedBox( + constraints: new BoxConstraints(minWidth: 280.0), + child: new Material( + level: 4, + child: new ShrinkWrapWidth( + child: new Block(children) + ) + ) + ) + ) + ]); + } +} diff --git a/tests/widgets/dialog-expected.txt b/tests/widgets/dialog-expected.txt new file mode 100644 index 00000000000..0c76eb7d078 --- /dev/null +++ b/tests/widgets/dialog-expected.txt @@ -0,0 +1,24 @@ +CONSOLE: TestRenderView enabled +CONSOLE: +PAINT FOR FRAME #1 ---------------------------------------------- +1 | TestDisplayList() constructor: 800.0 x 600.0 +------------------------------------------------------------------------ +CONSOLE: +PAINT FOR FRAME #2 ---------------------------------------------- +2 | TestDisplayList() constructor: 800.0 x 600.0 +2 | paintChild RenderStack at Point(0.0, 0.0) +2 | | TestDisplayList() constructor: 800.0 x 600.0 +2 | | paintChild RenderDecoratedBox at Point(0.0, 0.0) +2 | | | TestDisplayList() constructor: 800.0 x 600.0 +2 | | | drawRect(Rect.fromLTRB(0.0, 0.0, 800.0, 600.0), Paint(Color(0x7f000000))) +2 | | paintChild RenderPositionedBox at Point(0.0, 0.0) +2 | | | TestDisplayList() constructor: 800.0 x 600.0 +2 | | | paintChild RenderConstrainedBox at Point(260.0, 284.0) +2 | | | | TestDisplayList() constructor: 800.0 x 600.0 +2 | | | | drawRRect(Instance of 'RRect', Paint(Color(0xfffafafa))) +2 | | | | paintChild RenderParagraph at Point(0.0, 0.0) +2 | | | | | TestDisplayList() constructor: 800.0 x 600.0 +2 | | | | paintChild RenderParagraph at Point(0.0, 16.0) +2 | | | | | TestDisplayList() constructor: 800.0 x 600.0 +------------------------------------------------------------------------ +PAINTED 2 FRAMES diff --git a/tests/widgets/dialog.dart b/tests/widgets/dialog.dart new file mode 100644 index 00000000000..b90a413f9b0 --- /dev/null +++ b/tests/widgets/dialog.dart @@ -0,0 +1,21 @@ +// 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:sky/widgets/basic.dart'; +import 'package:sky/widgets/dialog.dart'; + +import '../resources/display_list.dart'; + +main() async { + WidgetTester tester = new WidgetTester(); + + await tester.test(() { + return new Dialog( + title: new Text("I am a title"), + content: new Text("I am some content") + ); + }); + + await tester.endTest(); +}