但是现在, 你只需要继承MaterialStateProperty然后 @overrideresolve方法就可以了,例如TextButton里的 hovered 效果,在TextButton内默认就是通过_TextButtonDefaultOverlay实现,对primary.withOpacity来实现 hovered 效果。 @immutable class _TextButtonDefaultOverlay extends MaterialStateProperty<Color?> { _TextButtonDefault...
Flutter 1.20版本引入了MaterialStateProperty,这标志着对这一问题的根本性改进。MaterialStateProperty不再要求为每个状态单独传递静态颜色值,而是接受一个函数,这个函数基于组件当前的状态集合(如悬停、聚焦等)动态解析出相应的值。这种方法不仅简化了参数列表,提高了代码的可读性和可维护性,而且极大增强了组件在不同状态...
//设置按钮的大小minimumSize:MaterialStateProperty.all(Size(200,100)),//设置边框side:MaterialStateProperty.all(BorderSide(color:Colors.grey,data-width:1)),//外边框装饰会覆盖side配置的样式shape:MaterialStateProperty.all(StadiumBorder()),),*/),...
但是现在, 你只需要继承MaterialStateProperty然后 @overrideresolve方法就可以了,例如TextButton里的 hovered 效果,在TextButton内默认就是通过_TextButtonDefaultOverlay实现,对primary.withOpacity来实现 hovered 效果。 @immutable class _TextButtonDefaultOverlay extends MaterialStateProperty<Color?> { _TextButtonDefault...
但是现在, 你只需要继承MaterialStateProperty然后 @overrideresolve方法就可以了,例如TextButton里的 hovered 效果,在TextButton内默认就是通过_TextButtonDefaultOverlay实现,对primary.withOpacity来实现 hovered 效果。 代码语言:javascript 复制 @immutableclass_TextButtonDefaultOverlayextendsMaterialStateProperty<Color?>{_...
MaterialStateProperty.resolveWith() 可拦截分别设置不同状态下的样式。 如果所有的状态时的颜色都相同,使用MaterialStateProperty.all(),如果不同状态要使用不同的颜色时,用MaterialStateProperty.resolveWith(),例如: TextButton(onPressed: () {},child: Text('text'),style: ButtonStyle(//backgroundColor:Material...
Flutter —— 解密dart语法
例如,按钮组件可以通过MaterialStateProperty.resolveWith方法,根据不同的状态(如按下、悬停、禁用)解析出不同的背景颜色。这种方法不仅简化了代码,提高了可维护性,而且增强了用户界面的响应性和交互性。 ButtonStyle style = ButtonStyle(backgroundColor: MaterialStateProperty.resolveWith<Color>((Set<MaterialState> st...
MaterialStateProperty的用途是使为不同的状态指定不同的样式成为可能。
MaterialStateProperty.all is suitable if the returned value is always the same for all states. static MaterialStateProperty<T> all<T>(T value) Example: ButtonStyle( backgroundColor: const MaterialStateProperty.all(Colors.teal), ) Output: If you need a const value, the alternative is to use...