天天看點

flutter Radio 單選框

Radio 單選框

目前在西瓜視訊上免費刊登 Flutter 系列教程,每日更新,歡迎關注接收提醒

【x1】點選檢視提示

【x2】各種系列的教程

【x3】Flutter文章積累目錄

1 flutter單選框Radio的基本使用

///單選框的基本使用
  ///預設選中的單選框的值
  int groupValue = 0;
  Radio buildRadioUseWidget() {
    return Radio(
      ///此單選框綁定的值 必選參數
      value: 0,
      ///目前組中這標明的值  必選參數
      groupValue: groupValue,
      ///點選狀态改變時的回調 必選參數
      onChanged: (v) {
        setState(() {
          this.groupValue = v;
        });
      },
    );
  }
           

運作效果如下圖所示

flutter Radio 單選框

在實際項目開發中,一般單選框都會成組使用,不會單獨使用,如下圖所示效果:

flutter Radio 單選框

代碼如下:

///預設選中的單選框的值
  int groupValue = 0;
  ///單選框的成組使用
  Row buildRadioGroupWidget() {
    return Row(children: [
      Radio(
        ///此單選框綁定的值 必選參數
        value: 0,
        ///目前組中這標明的值  必選參數
        groupValue: groupValue,
        ///點選狀态改變時的回調 必選參數
        onChanged: (v) {
          setState(() {
            this.groupValue = v;
          });
        },
      ),
      Radio(
        ///此單選框綁定的值 必選參數
        value: 1,
        ///目前組中這標明的值  必選參數
        groupValue: groupValue,
        ///點選狀态改變時的回調 必選參數
        onChanged: (v) {
          setState(() {
            this.groupValue = v;
          });
        },
      ),
      Radio(
        ///此單選框綁定的值 必選參數
        value: 2,
        ///目前組中這標明的值  必選參數
        groupValue: groupValue,
        ///點選狀态改變時的回調 必選參數
        onChanged: (v) {
          setState(() {
            this.groupValue = v;
          });
        },
      )
    ],);
  }
           

如下圖所示效果,是在實際項目中也比較常用的一種設計效果,單選框與文字結合使用,在水準方向通過結合Row來實作

flutter Radio 單選框
///預設選中的單選框的值
int groupValue = 0;
///單選框的成組使用
Row buildRadioGroupRowWidget() {
  return Row(
    children: [
      Row(
        ///包裹子布局
        mainAxisSize: MainAxisSize.min,
        children: [
          Radio(
            ///此單選框綁定的值 必選參數
            value: 0,
            ///目前組中這標明的值  必選參數
            groupValue: groupValue,
            ///點選狀态改變時的回調 必選參數
            onChanged: (v) {
              setState(() {
                this.groupValue = v;
              });
            },
          ),
          Text("國文")
        ],
      ),
      Row(
        ///包裹子布局
        mainAxisSize: MainAxisSize.min,
        children: [
          Radio(
            ///此單選框綁定的值 必選參數
            value: 1,
            ///目前組中這標明的值  必選參數
            groupValue: groupValue,
            ///點選狀态改變時的回調 必選參數
            onChanged: (v) {
              setState(() {
                this.groupValue = v;
              });
            },
          ),
          Text("數學")
        ],
      ),
      Row(
        ///包裹子布局
        mainAxisSize: MainAxisSize.min,
        children: [
          Radio(
            ///此單選框綁定的值 必選參數
            value: 2,
            ///目前組中這標明的值  必選參數
            groupValue: groupValue,
            ///點選狀态改變時的回調 必選參數
            onChanged: (v) {
              setState(() {
                this.groupValue = v;
              });
            },
          ),
          Text("英語")
        ],
      ),
    ],
  );
}

           

在這裡需要注意的是水準線性布局Row預設的填充父布局的,用在這裡的話,需要将其設定為包裹子布局的方式,通過配置mainAxisSize的值為MainAxisSize.min來實作。

在上圖的效果基礎上進行一些改造,将單選框Radio與文字的排列方式使用線性布局Column來元件,實作的效果如下圖所示,對應的關鍵代碼如下:

flutter Radio 單選框

代碼如下:

///單選框的成組使用
///預設選中的單選框的值
int groupValue = 0;
  Row buildRadioGroupColumnWidget() {
    return Row(
      children: [
        Column(
          ///包裹子布局
          mainAxisSize: MainAxisSize.min,
          children: [
            Radio(
              ///此單選框綁定的值 必選參數
              value: 0,
              ///目前組中這標明的值  必選參數
              groupValue: groupValue,
              ///點選狀态改變時的回調 必選參數
              onChanged: (v) {
                setState(() {
                  this.groupValue = v;
                });
              },
            ),
            Text("國文")
          ],
        ),
        Column(
          ///包裹子布局
          mainAxisSize: MainAxisSize.min,
          children: [... ... 省略 ],
        ),
        Column(
          ///包裹子布局
          mainAxisSize: MainAxisSize.min,
          children: [... ... 省略 ],
        ),
      ],
    );
  }

           

目前在西瓜視訊上免費刊登 Flutter 系列教程,每日更新,歡迎關注接收提醒