7、Flutter 按钮状态管理与映射

Flutter自带ElevatedButton、TextButton、OutlinedButton都继承自ButtonStyleButton,其中有个ButtonStyle的属性有点特殊,它的属性的声明方式是:MaterialStateProperty<TextStyle?>? textStyle;

一、ButtonStyle属性

ButtonStyle 是Flutter中用于自定义按钮外观和行为的类,它提供了许多属性,可以用来定义按钮的样式。以下是一些常见的 ButtonStyle 属性:

  1. backgroundColor:设置按钮的背景颜色。

  2. foregroundColor:设置按钮上文本和图标的前景颜色(文本颜色)。

  3. overlayColor:设置按钮在用户与其交互(例如点击)时的覆盖颜色。

  4. elevation:设置按钮的升高程度。升高程度决定了按钮的立体感。

  5. shadowColor:设置按钮的阴影颜色。

  6. padding:设置按钮的内边距,控制按钮内容与按钮边缘之间的空白区域。

  7. minimumSize:设置按钮的最小尺寸。

  8. maximumSize:设置按钮的最大尺寸。

  9. side:设置按钮的边框样式,包括颜色、宽度和边框类型。

  10. shape:设置按钮的形状,例如圆角矩形或椭圆形。

  11. alignment:设置按钮内容的对齐方式,可以是Alignment对象。

  12. textStyle:设置按钮上文本的样式,包括字体大小、颜色、字重等。

  13. animationDuration:设置按钮状态切换的动画持续时间,用于处理按钮按下、释放等状态的过渡动画。

  14. visualDensity:控制按钮的紧凑性,通常用于改变按钮的大小。

  15. tapTargetSize:定义按钮的点击目标大小,用于影响按钮的可点击区域。

二、MaterialStateProperty
ButtonStyle中的多数属性是用MaterialStateProperty修饰的

 final MaterialStateProperty<TextStyle?>? textStyle;
 
  final MaterialStateProperty<Color?>? backgroundColor;
  
  final MaterialStateProperty<Color?>? foregroundColor;

  final MaterialStateProperty<Color?>? overlayColor;

  final MaterialStateProperty<Color?>? shadowColor;

中所周知按钮有不同的状态,通常我们会根据不同的状态来设置按钮的文字样式,背景颜色等。这就需要定义一个工具类,能根据状态返回我们想要的值。Flutter已经给我们封装好了MaterialStateProperty

MaterialStateProperty用来表示一个属性或样式的动态值,该值可以根据小部件的不同状态(例如正常状态、按下状态、禁用状态等)而变化。它通常用于自定义小部件的属性,以便在不同状态下提供不同的样式或值。

1、基础用法

我们可以使用resolveWith方法,传递一个闭包,系统会在状态发生变化时,调用此闭包来获取属性的值。例如:

ElevatedButton(
  onPressed: () {
   
    // 处理按钮点击事件
  },
  child: Text('ElevatedButton'),
  style: ButtonStyle(
  // 此处是一个状态的集合,我们只要判断是否包含我们想要的状态就可以了。
    textStyle: MaterialStateProperty.resolveWith<TextStyle?>(
      (Set<MaterialState> states) {
   
        if (states.contains(MaterialState.disabled)) {
   
          return TextStyle(
            color: Colors.grey,
          );
        }
        return TextStyle(
          color: Colors.blue,
        );
      },
    ),
  ),
)

如果要设置padding,可以这样做:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter状态管理是一个非常重要的主题,因为在移动应用程序中,管理状态是必不可少的。Flutter提供了多种状态管理库和方案,这里我们介绍三种常见的状态管理方案。 1. StatefulWidget StatefulWidget是Flutter最基本的状态管理方式之一,它通常用于管理小型或少量的状态。我们可以在StatefulWidget中定义自己的状态,然后在需要时使用setState()方法来更新状态。setState()方法会通知Flutter框架重新绘制UI,以反映新的状态。 优点:实现简单,适用于小型或少量的状态管理。 缺点:当状态较多时,代码复杂度会增加。 2. BLoC(Business Logic Component) BLoC是一种更高级的状态管理方式,它将UI组件、业务逻辑和状态分离开来。BLoC通过Stream和Sink来管理状态,通过StreamBuilder来监听状态变化并更新UI。BLoC的核心思想是单向数据流,即数据只能从Sink流入,通过Stream流出。 优点:代码结构清晰,易于维护和扩展。通过单向数据流,可以避免状态混乱和不一致性。 缺点:实现较为复杂,需要掌握Stream和Sink的使用。 3. Provider Provider是Flutter官方推荐的状态管理库,它是基于InheritedWidget和ChangeNotifier实现的。Provider提供了一种简单且灵活的方法来管理应用程序状态。它通过Provider.of()来访问状态,并通过ChangeNotifierProvider来监听状态变化并更新UI。 优点:实现简单,易于维护和扩展。通过Provider.of()可以轻松访问状态,而不必显式传递状态。 缺点:Provider在处理较复杂的状态管理时可能会出现性能问题。 总结: 以上是Flutter中三种常见的状态管理方式,每种方式都有其优缺点,根据实际情况选择合适的方式来管理状态。对于小型或少量的状态管理,可以使用StatefulWidget;对于复杂的状态管理,可以使用BLoC或Provider。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值