Flutter RawMaterialButton


简介

RawMaterial button “RawMaterial 按钮”

  • 基于 Semantics,Material 和InkWell 小部件创建按钮;
  • 此类不使用当前 Theme 或 ButtonTheme 来计算未指定参数的默认值。它旨在用于自定义 Material button,可选择包含主题或特定于应用程序源的默认值;

基本用法

参数的默认的 button 和禁用 button

进阶用法

更改项参数的自定义

实例演示

import 'dart:math';
import 'package:flutter/material.dart';

/*
* RawMaterialButton 默认按钮的实例
* isDisabled:是否是禁用,isDisabled 默认为true
* */
class RawMaterialButtonDefault extends StatelessWidget {
  final bool isDisabled;

  const RawMaterialButtonDefault([ this.isDisabled = true])
      : assert(isDisabled != null),
        super();

  @override
  Widget build(BuildContext context) {
    return RawMaterialButton(
        // 文本内容
        child: const Text('默认按钮', semanticsLabel: 'FLAT BUTTON 1'),
        onPressed: isDisabled ? () {} : null);
  }
}

/*
* RawMaterialButton 自定义的实例
* */
class RawMaterialButtonCustom extends StatelessWidget {
  final String txt;
  final Color color;
  final ShapeBorder shape;
  final VoidCallback onPressed;

  const RawMaterialButtonCustom(
      [ this.txt = '自定义按钮',
       this.color = Colors.blueAccent,
       this.shape,
       this.onPressed])
      : super();

  @override
  Widget build(BuildContext context) {
    final _onPressed = onPressed;
    final _fontSize = (Random.secure().nextInt(10)+15).toDouble();
    return RawMaterialButton(
        // 使用Material.textStyle为按钮的子项定义默认文本样式。
        textStyle:TextStyle(color: _randomColor(),fontSize: _fontSize),
        // 定义形状和高程的动画更改的持续时间
        animationDuration:Duration(seconds: 1),
        // 文本内容
        child: Text(txt, semanticsLabel: 'FLAT BUTTON 2'),
        // 高亮时的背景色
        highlightColor: Colors.yellow,
        // 按钮内部,墨汁飞溅的颜色,点击按钮时的渐变背景色,当你不设置高亮背景时才会看的更清楚
        splashColor: _randomColor(),
        // 抗锯齿能力,抗锯齿等级依次递增,none(默认),hardEdge,antiAliasWithSaveLayer,antiAlias
        clipBehavior: Clip.antiAlias,
        padding:  EdgeInsets.only(bottom: 5.0, top: 5.0, left: 30.0, right: 30.0),
        //高亮时候的阴影
        highlightElevation: 10.0,
        // 按钮材质的形状
        // shape: shape,
        // RawMaterialButton 的点击事件
        onPressed: () {
          // Perform some action
          if (_onPressed is VoidCallback) {
            _onPressed();
          }
        });
  }
}

Color _randomColor() {
  var red = Random.secure().nextInt(255);
  var greed = Random.secure().nextInt(255);
  var blue = Random.secure().nextInt(255);
  return Color.fromARGB(255, red, greed, blue);
}