// 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/editing/input.dart'; import 'package:sky/theme/colors.dart' as colors; import 'package:sky/theme/typography.dart' as typography; import 'package:sky/widgets.dart'; class Field extends Component { Field({ Key key, this.inputKey, this.icon, this.placeholder }): super(key: key); final GlobalKey inputKey; final String icon; final String placeholder; Widget build() { return new Flex([ new Padding( padding: const EdgeDims.symmetric(horizontal: 16.0), child: new Icon(type: icon, size: 24) ), new Flexible( child: new Input( key: inputKey, placeholder: placeholder ) ) ], direction: FlexDirection.horizontal ); } } class AddressBookApp extends App { Widget buildToolBar(Navigator navigator) { return new ToolBar( left: new IconButton(icon: "navigation/arrow_back"), right: [new IconButton(icon: "navigation/check")] ); } Widget buildFloatingActionButton(Navigator navigator) { return new FloatingActionButton( child: new Icon(type: 'image/photo_camera', size: 24), backgroundColor: Theme.of(this).accentColor, onPressed: () { showDialog(navigator, (navigator) { return new Dialog( title: new Text("Describe your picture"), content: new ScrollableBlock([ new Field(inputKey: fillKey, icon: "editor/format_color_fill", placeholder: "Color"), new Field(inputKey: emoticonKey, icon: "editor/insert_emoticon", placeholder: "Emotion"), ]), onDismiss: navigator.pop, actions: [ new FlatButton( child: new Text('DISCARD'), onPressed: navigator.pop ), new FlatButton( child: new Text('SAVE'), onPressed: () { navigator.pop(); } ), ] ); }); } ); } static final GlobalKey nameKey = new GlobalKey(); static final GlobalKey phoneKey = new GlobalKey(); static final GlobalKey emailKey = new GlobalKey(); static final GlobalKey addressKey = new GlobalKey(); static final GlobalKey ringtoneKey = new GlobalKey(); static final GlobalKey noteKey = new GlobalKey(); static final GlobalKey fillKey = new GlobalKey(); static final GlobalKey emoticonKey = new GlobalKey(); Widget buildBody(Navigator navigator) { return new Material( child: new ScrollableBlock([ new AspectRatio( aspectRatio: 16.0 / 9.0, child: new Container( decoration: new BoxDecoration(backgroundColor: colors.Purple[300]) ) ), new Field(inputKey: nameKey, icon: "social/person", placeholder: "Name"), new Field(inputKey: phoneKey, icon: "communication/phone", placeholder: "Phone"), new Field(inputKey: emailKey, icon: "communication/email", placeholder: "Email"), new Field(inputKey: addressKey, icon: "maps/place", placeholder: "Address"), new Field(inputKey: ringtoneKey, icon: "av/volume_up", placeholder: "Ringtone"), new Field(inputKey: noteKey, icon: "content/add", placeholder: "Add note"), ]) ); } Widget buildMain(Navigator navigator) { return new Scaffold( toolbar: buildToolBar(navigator), body: buildBody(navigator), floatingActionButton: buildFloatingActionButton(navigator) ); } NavigationState _navigationState; void initState() { _navigationState = new NavigationState([ new Route( name: '/', builder: (navigator, route) => buildMain(navigator) ), ]); super.initState(); } Widget build() { ThemeData theme = new ThemeData( brightness: ThemeBrightness.light, primarySwatch: colors.Teal, accentColor: colors.PinkAccent[100] ); return new Theme( data: theme, child: new DefaultTextStyle( style: typography.error, // if you see this, you've forgotten to correctly configure the text style! child: new TaskDescription( label: 'Address Book', child: new Navigator(_navigationState) ) ) ); } } void main() { runApp(new AddressBookApp()); }