// Copyright 2014 The Flutter 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/foundation.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; import 'button.dart'; import 'button_theme.dart'; import 'material_button.dart'; import 'theme.dart'; import 'theme_data.dart'; /// A Material Design "raised button". /// /// ### This class is deprecated, please use [ElevatedButton] instead. /// /// FlatButton, RaisedButton, and OutlineButton have been replaced by /// [TextButton], [ElevatedButton], and [OutlinedButton] respectively. /// ButtonTheme has been replaced by [TextButtonTheme], /// [ElevatedButtonTheme], and [OutlinedButtonTheme]. The original classes /// will eventually be removed, please migrate code that uses them. /// There's a detailed migration guide for the new button and button /// theme classes in /// [flutter.dev/go/material-button-migration-guide](https://flutter.dev/go/material-button-migration-guide). @Deprecated( 'Use ElevatedButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). ' 'This feature was deprecated after v1.26.0-18.0.pre.' ) class RaisedButton extends MaterialButton { /// Create a filled button. /// /// The [autofocus] and [clipBehavior] arguments must not be null. /// Additionally, [elevation], [hoverElevation], [focusElevation], /// [highlightElevation], and [disabledElevation] must be non-negative, if /// specified. @Deprecated( 'Use ElevatedButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). ' 'This feature was deprecated after v1.26.0-18.0.pre.' ) const RaisedButton({ Key? key, required VoidCallback? onPressed, VoidCallback? onLongPress, ValueChanged<bool>? onHighlightChanged, MouseCursor? mouseCursor, ButtonTextTheme? textTheme, Color? textColor, Color? disabledTextColor, Color? color, Color? disabledColor, Color? focusColor, Color? hoverColor, Color? highlightColor, Color? splashColor, Brightness? colorBrightness, double? elevation, double? focusElevation, double? hoverElevation, double? highlightElevation, double? disabledElevation, EdgeInsetsGeometry? padding, VisualDensity? visualDensity, ShapeBorder? shape, Clip clipBehavior = Clip.none, FocusNode? focusNode, bool autofocus = false, MaterialTapTargetSize? materialTapTargetSize, Duration? animationDuration, Widget? child, }) : assert(autofocus != null), assert(elevation == null || elevation >= 0.0), assert(focusElevation == null || focusElevation >= 0.0), assert(hoverElevation == null || hoverElevation >= 0.0), assert(highlightElevation == null || highlightElevation >= 0.0), assert(disabledElevation == null || disabledElevation >= 0.0), assert(clipBehavior != null), super( key: key, onPressed: onPressed, onLongPress: onLongPress, onHighlightChanged: onHighlightChanged, mouseCursor: mouseCursor, textTheme: textTheme, textColor: textColor, disabledTextColor: disabledTextColor, color: color, disabledColor: disabledColor, focusColor: focusColor, hoverColor: hoverColor, highlightColor: highlightColor, splashColor: splashColor, colorBrightness: colorBrightness, elevation: elevation, focusElevation: focusElevation, hoverElevation: hoverElevation, highlightElevation: highlightElevation, disabledElevation: disabledElevation, padding: padding, visualDensity: visualDensity, shape: shape, clipBehavior: clipBehavior, focusNode: focusNode, autofocus: autofocus, materialTapTargetSize: materialTapTargetSize, animationDuration: animationDuration, child: child, ); /// Create a filled button from a pair of widgets that serve as the button's /// [icon] and [label]. /// /// The icon and label are arranged in a row and padded by 12 logical pixels /// at the start, and 16 at the end, with an 8 pixel gap in between. /// /// The [elevation], [highlightElevation], [disabledElevation], [icon], /// [label], and [clipBehavior] arguments must not be null. @Deprecated( 'Use ElevatedButton instead. See the migration guide in flutter.dev/go/material-button-migration-guide). ' 'This feature was deprecated after v1.26.0-18.0.pre.' ) factory RaisedButton.icon({ Key? key, required VoidCallback? onPressed, VoidCallback? onLongPress, ValueChanged<bool>? onHighlightChanged, MouseCursor? mouseCursor, ButtonTextTheme? textTheme, Color? textColor, Color? disabledTextColor, Color? color, Color? disabledColor, Color? focusColor, Color? hoverColor, Color? highlightColor, Color? splashColor, Brightness? colorBrightness, double? elevation, double? highlightElevation, double? disabledElevation, ShapeBorder? shape, Clip clipBehavior, FocusNode? focusNode, bool autofocus, EdgeInsetsGeometry? padding, MaterialTapTargetSize? materialTapTargetSize, Duration? animationDuration, required Widget icon, required Widget label, }) = _RaisedButtonWithIcon; @override Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ButtonThemeData buttonTheme = ButtonTheme.of(context); return RawMaterialButton( onPressed: onPressed, onLongPress: onLongPress, onHighlightChanged: onHighlightChanged, mouseCursor: mouseCursor, clipBehavior: clipBehavior, fillColor: buttonTheme.getFillColor(this), textStyle: theme.textTheme.button!.copyWith(color: buttonTheme.getTextColor(this)), focusColor: buttonTheme.getFocusColor(this), hoverColor: buttonTheme.getHoverColor(this), highlightColor: buttonTheme.getHighlightColor(this), splashColor: buttonTheme.getSplashColor(this), elevation: buttonTheme.getElevation(this), focusElevation: buttonTheme.getFocusElevation(this), hoverElevation: buttonTheme.getHoverElevation(this), highlightElevation: buttonTheme.getHighlightElevation(this), disabledElevation: buttonTheme.getDisabledElevation(this), padding: buttonTheme.getPadding(this), visualDensity: visualDensity ?? theme.visualDensity, constraints: buttonTheme.getConstraints(this), shape: buttonTheme.getShape(this), focusNode: focusNode, autofocus: autofocus, animationDuration: buttonTheme.getAnimationDuration(this), materialTapTargetSize: buttonTheme.getMaterialTapTargetSize(this), child: child, ); } @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add(DiagnosticsProperty<double>('elevation', elevation, defaultValue: null)); properties.add(DiagnosticsProperty<double>('focusElevation', focusElevation, defaultValue: null)); properties.add(DiagnosticsProperty<double>('hoverElevation', hoverElevation, defaultValue: null)); properties.add(DiagnosticsProperty<double>('highlightElevation', highlightElevation, defaultValue: null)); properties.add(DiagnosticsProperty<double>('disabledElevation', disabledElevation, defaultValue: null)); } } /// The type of RaisedButtons created with [RaisedButton.icon]. /// /// This class only exists to give RaisedButtons created with [RaisedButton.icon] /// a distinct class for the sake of [ButtonTheme]. It can not be instantiated. class _RaisedButtonWithIcon extends RaisedButton with MaterialButtonWithIconMixin { _RaisedButtonWithIcon({ Key? key, required VoidCallback? onPressed, VoidCallback? onLongPress, ValueChanged<bool>? onHighlightChanged, MouseCursor? mouseCursor, ButtonTextTheme? textTheme, Color? textColor, Color? disabledTextColor, Color? color, Color? disabledColor, Color? focusColor, Color? hoverColor, Color? highlightColor, Color? splashColor, Brightness? colorBrightness, double? elevation, double? highlightElevation, double? disabledElevation, ShapeBorder? shape, Clip clipBehavior = Clip.none, FocusNode? focusNode, bool autofocus = false, EdgeInsetsGeometry? padding, MaterialTapTargetSize? materialTapTargetSize, Duration? animationDuration, required Widget icon, required Widget label, }) : assert(elevation == null || elevation >= 0.0), assert(highlightElevation == null || highlightElevation >= 0.0), assert(disabledElevation == null || disabledElevation >= 0.0), assert(clipBehavior != null), assert(icon != null), assert(label != null), assert(autofocus != null), super( key: key, onPressed: onPressed, onLongPress: onLongPress, onHighlightChanged: onHighlightChanged, mouseCursor: mouseCursor, textTheme: textTheme, textColor: textColor, disabledTextColor: disabledTextColor, color: color, disabledColor: disabledColor, focusColor: focusColor, hoverColor: hoverColor, highlightColor: highlightColor, splashColor: splashColor, colorBrightness: colorBrightness, elevation: elevation, highlightElevation: highlightElevation, disabledElevation: disabledElevation, shape: shape, clipBehavior: clipBehavior, focusNode: focusNode, autofocus: autofocus, padding: padding, materialTapTargetSize: materialTapTargetSize, animationDuration: animationDuration, child: Row( mainAxisSize: MainAxisSize.min, children: <Widget>[ icon, const SizedBox(width: 8.0), label, ], ), ); }