我写这个系列的目的,可能更倾向于自我总结,而不是教Flutter入门,所以可能有些东西是在我本人的理解下的一些用法与理解,不一定准确与适合所有开发者,如果有其他更好的想法,可以与我讨论,联系方式见关于

本项目基于macOS桌面程序,源码地址:https://github.com/NeverOvO/learningfoundation

-NeverOuO

前言

近期忙完了服务器迁移,也打完了《缺氧》的更新。最近应该会逐渐更新下博客的内容和我自己的网站组成了,预期的是会上线一个带有导航性质的Flutter Web应用,但是具体的内容更新逻辑还是不太理想,早期应该会作为一个静态APP上线网页。文章部分可能会去探索一些新的内容,比如分享一下我平时写Flutter时候的一些偷懒的注释、文档啥的,大伙感兴趣的可以看看。毕竟买服务器也花了不少钱,不能浪费啊。

然后之前的写作方式对于阅读负担太重,我从这篇文章开始直写出核心用法与部分常用用法了,如果写的比较跳脱请见谅。

常用Button系列:ElevatedButton

这个button组件应该是目前效果最好的一个按钮样式了,同时也存在着比较多的限制的地方。

ElevatedButton属性

const ElevatedButton({
    super.key,
    required super.onPressed,
    super.onLongPress,
    super.onHover,
    super.onFocusChange,
    super.style,
    super.focusNode,
    super.autofocus = false,
    super.clipBehavior = Clip.none,
    required super.child,
  });

基础用法

ElevatedButton(
  onPressed: () {  },
  child: Text("ElevatedButton"),
),
最基本样式

必要方法

required super.onPressed, // 按下去出发的方法。
required super.child, //内部的子组件

常用方法

super.style  //控制按钮的样式,类型很多参考下面的常用用法。

const ButtonStyle({
  this.textStyle, //字体
  this.backgroundColor, //背景色
  this.foregroundColor, //前景色
  this.overlayColor, // 高亮色,按钮处于focused, hovered, or pressed时的颜色
  this.shadowColor, // 阴影颜色
  this.elevation, // 阴影值
  this.padding, // padding
  this.minimumSize, //最小尺寸
  this.side, //边框
  this.shape, //形状
  this.mouseCursor, //鼠标指针的光标进入或悬停在此按钮的[InkWell]上时。
  this.visualDensity, // 按钮布局的紧凑程度
  this.tapTargetSize, // 响应触摸的区域
  this.animationDuration, //[shape]和[elevation]的动画更改的持续时间。
  this.enableFeedback, // 检测到的手势是否应提供声音和/或触觉反馈。例如,在Android上,点击会产生咔哒声,启用反馈后,长按会产生短暂的振动。通常,组件默认值为true。
});

常用用法

ElevatedButton(
  style: ButtonStyle(
    backgroundColor: MaterialStateProperty.all(Colors.blue),//背景颜色
    foregroundColor: MaterialStateProperty.all(Colors.white), //字体颜色
    overlayColor: MaterialStateProperty.all(Colors.red),// 高亮色
    shadowColor: MaterialStateProperty.all( Colors.black),//阴影颜色
    elevation: MaterialStateProperty.all(10), //阴影值
    side: MaterialStateProperty.all(BorderSide(width: 1,color: Colors.black)),//边框
    shape: MaterialStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(30))),//圆角弧度
  ),
  onPressed: () {  },
  child: Text("ElevatedButton"),
),

常用Button系列:TextButton

TextButton与ElevatedButton的属性相似,区别在于这个按钮已突出文本内容为主

基础用法/常用用法

TextButton(
  onPressed: () {  },
  child: Text("ElevatedButton"),
),

常用Button系列:OutlineButton

同TextButton,区别在于他一个边框,且默认无背景。

基础用法/常用用法

OutlinedButton(
  onPressed: () {},
  child: Text("OutineButton"),
),

常用Button系列:IconButton

此按钮的核心逻辑为突出Icon。

基础用法/常用用法

 IconButton(
  onPressed: () {},
  icon: Icon(Icons.ac_unit_outlined),
),

ElevatedButton、TextButton、OutlineButton的Icon构造函数

以下以ElevatedButton的icon构造函数为例子,另外2个方法相似。

用法

ElevatedButton.icon(
  onPressed: () {},
  icon: Icon(Icons.dark_mode),
  label: Text("ElevatedButton.icon"),
),