flutter/examples/widgets/fab.dart
2016-01-12 11:42:20 -08:00

95 lines
2.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/material.dart';
class _Page {
_Page({this.label, this.color, this.icon});
final String label;
final Map<int, Color> color;
final String icon;
TabLabel get tabLabel => new TabLabel(text: label);
bool get fabDefined => color != null && icon != null;
Color get fabColor => color[400];
Icon get fabIcon => new Icon(icon: icon);
Key get fabKey => new ValueKey<Color>(fabColor);
}
List<_Page> _pages = <_Page>[
new _Page(label: "Blue", color: Colors.indigo, icon: 'content/add'),
new _Page(label: "Too", color: Colors.indigo, icon: 'content/add'),
new _Page(label: "Eco", color: Colors.green, icon: 'content/create'),
new _Page(label: "No"),
new _Page(label: "Teal", color: Colors.teal, icon: 'content/add'),
new _Page(label: "Red", color: Colors.red, icon: 'content/create')
];
class FabApp extends StatefulComponent {
FabApp();
FabAppState createState() => new FabAppState();
}
class FabAppState extends State<FabApp> {
_Page selectedPage = _pages[0];
void _handleTabSelection(_Page page) {
setState(() {
selectedPage = page;
});
}
Widget buildTabView(_Page page) {
return new Builder(
builder: (BuildContext context) {
final TextStyle textStyle = new TextStyle(
color: Theme.of(context).primaryColor,
fontSize: 32.0,
textAlign: TextAlign.center
);
return new Container(
key: new ValueKey<String>(page.label),
padding: const EdgeDims.TRBL(48.0, 48.0, 96.0, 48.0),
child: new Card(
child: new Center(
child: new Text(page.label, style: textStyle)
)
)
);
}
);
}
Widget build(BuildContext context) {
return new TabBarSelection<_Page>(
values: _pages,
onChanged: _handleTabSelection,
child: new Scaffold(
toolBar: new ToolBar(
elevation: 0,
center: new Text('FAB Transition Demo'),
tabBar: new TabBar<String>(
labels: new Map.fromIterable(_pages, value: (_Page page) => page.tabLabel)
)
),
body: new TabBarView(children: _pages.map(buildTabView).toList()),
floatingActionButton: !selectedPage.fabDefined ? null : new FloatingActionButton(
key: selectedPage.fabKey,
backgroundColor: selectedPage.fabColor,
child: selectedPage.fabIcon
)
)
);
}
}
void main() {
runApp(new MaterialApp(
title: 'FabApp',
routes: {
'/': (RouteArguments args) => new FabApp()
}
));
}