// 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 'dart:sky' as sky; import 'package:sky/painting/text_style.dart'; import 'package:sky/theme/colors.dart' as colors; import 'package:sky/widgets/basic.dart'; import 'package:sky/widgets/button_base.dart'; import 'package:sky/widgets/default_text_style.dart'; import 'package:sky/widgets/icon.dart'; import 'package:sky/widgets/ink_well.dart'; import 'package:sky/widgets/theme.dart'; import 'package:sky/widgets/framework.dart'; typedef EventDisposition OnPressedFunction(); class DrawerItem extends ButtonBase { DrawerItem({ Key key, this.icon, this.child, this.onPressed, this.selected: false }) : super(key: key); String icon; Widget child; OnPressedFunction onPressed; bool selected; void syncConstructorArguments(DrawerItem source) { icon = source.icon; child = source.child; onPressed = source.onPressed; selected = source.selected; super.syncConstructorArguments(source); } TextStyle _getTextStyle(ThemeData themeData) { TextStyle result = themeData.text.body2; if (selected) result = result.copyWith(color: themeData.primaryColor); return result; } Color _getBackgroundColor(ThemeData themeData) { if (highlight) return themeData.highlightColor; if (selected) return themeData.selectedColor; return colors.transparent; } sky.ColorFilter _getColorFilter(ThemeData themeData) { if (selected) return new sky.ColorFilter.mode(themeData.primaryColor, sky.TransferMode.srcATop); return new sky.ColorFilter.mode(const Color(0x73000000), sky.TransferMode.dstIn); } Widget buildContent() { ThemeData themeData = Theme.of(this); List<Widget> flexChildren = new List<Widget>(); if (icon != null) { flexChildren.add( new Padding( padding: const EdgeDims.symmetric(horizontal: 16.0), child: new Icon( type: icon, size: 24, colorFilter: _getColorFilter(themeData)) ) ); } flexChildren.add( new Flexible( child: new Padding( padding: const EdgeDims.symmetric(horizontal: 16.0), child: new DefaultTextStyle( style: _getTextStyle(themeData), child: child ) ) ) ); return new Listener( onGestureTap: (_) { if (onPressed != null) return onPressed(); return EventDisposition.ignored; }, child: new Container( height: 48.0, decoration: new BoxDecoration(backgroundColor: _getBackgroundColor(themeData)), child: new InkWell( child: new Row(flexChildren) ) ) ); } }