ラジオボタンやチェックボックスのFluter基本的なコンポーネント

ラジオボタンやチェックボックス

材料コンポーネントライブラリは、それらがStatefulWidgetから継承されますが、彼ら自身が現在選択されている状態の保存、選択された状態は、親コンポーネントによって管理されていませんが、材料スタイルスイッチは、ラジオやチェックボックスチェックボックスを切り替えています。スイッチまたはチェックボックスをクリックすると、そのonChangedイベントコールバックをトリガし、我々は、このコールバックでロジックを変更するために選択処理することができます。

一般的な属性
のラジオチェックボックスを

プロパティ 説明
ラジオの値
onChangedイベント トリガーを変更する場合
activeColor 選択した色、背景色
groupValue 値のグループを選択します

コード例:

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: "Radio",
    home: MyApp(),
  ));
}


class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}


class _MyAppState extends State<MyApp> {
  int sex = 1;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Radio")),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text("大:"),
              Radio(
                value: 1,
                groupValue: this.sex,
                onChanged: (value) {
                  setState(() {
                    this.sex = value;
                  });
                },
              ),
              SizedBox(width: 20),
              Text("小:"),
              Radio(
                value: 2,
                groupValue: this.sex,
                onChanged: (value) {
                  setState(() {
                    this.sex = value;
                  });
                },
              )
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text("你选择的是${this.sex == 1 ? "" : ""}")
            ],
          )
        ],
      ),
    );
  }
}

RadioListTileラジオボタン

プロパティ 説明
trueまたはfalse
onChangedイベント イベントによってトリガーさ変化の時
activeColor 選択した色、背景色
題名 見出し
字幕 小見出し
二次 設定したアイコンや画像
groupValue 値のグループを選択します

コードは以下の通りであります:

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: "RadioListTile",
    home: MyApp(),
  ));
}


class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}


class _MyAppState extends State<MyApp> {
  int sex = 1;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("我的app")),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          RadioListTile(
            value: 1,
            onChanged: (value) {
              setState(() {
                this.sex = value;
              });
            },
            groupValue: this.sex,
            title: Text("一级标题"),
            subtitle: Text("二级标题"),
            secondary: Icon(Icons.camera),
            selected: this.sex == 1,
          ),

        ],
      ),
    );
  }
}

チェックボックスのチェックボックス

プロパティ 説明
場合は、このボックスをチェックしてください
onChangedイベント チェックボックスの値を変更する必要があるとき、コールの監視
トライステート デフォルトはfalse、trueの場合、チェックボックスの値が真、偽、またはnullの場合もあります
activeColor あなたは色を使用するには、このチェックボックスを選択した場合
checkColor 色のアイコンを確認する場合は、このチェックボックス
materialTapTargetSize 最小サイズの設定]をタップターゲット

コード:


Checkbox(
  value: this.valueb, 
  onChanged: (bool value) {
    setState(() {
      this.valueb = value; 
    });
  },

CheckboxListTileボックス

プロパティ 説明
場合は、このボックスをチェックしてください
onChangedイベント チェックボックスの値を変更する必要があるとき、コールの監視
activeColor あなたは色を使用するには、このチェックボックスを選択した場合
題名 メインタイトルのリスト
字幕 サブタイトル一覧
isThreeLine デフォルトはfalse
密集 このリストは、リストのタイル垂直集約型の一部かどうかであります
二次 チェックボックスの前面に表示ウィジェット
選択 選択したテキストの強調表示した後、デフォルトはfalse
controlAffinity テキストの位置に対してコントロール、デフォルトListTileControlAffinity.platform

コード:


CheckboxListTile(
  secondary: const Icon(Icons.alarm_on),
  title: const Text('每天6:10 响铃'),
  subtitle: Text('12小时58分钟后响铃'),
  value: this.valued, 
  onChanged: (bool value) {
    setState(() {
      this.valued = value; 
    });
  },

下面以一个例子说明状态的维护:
以下代码中,由于需要维护Switch和Checkbox的选中状态,所以SwitchAndCheckBoxTestRoute继承自StatefulWidget 。在其build方法中分别构建了一个Switch和Checkbox,初始状态都为选中状态,当用户点击时,会将状态置反,然后回调用setState()通知Flutter framework重新构建UI

class SwitchAndCheckBoxTestRoute extends StatefulWidget {
  @override
  _SwitchAndCheckBoxTestRouteState createState() => new _SwitchAndCheckBoxTestRouteState();
}

class _SwitchAndCheckBoxTestRouteState extends State<SwitchAndCheckBoxTestRoute> {
  bool _switchSelected=true; //维护单选开关状态
  bool _checkboxSelected=true;//维护复选框状态
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Switch(
          value: _switchSelected,//当前状态
          onChanged:(value){
            //重新构建页面  
            setState(() {
              _switchSelected=value;
            });
          },
        ),
        Checkbox(
          value: _checkboxSelected,
          activeColor: Colors.red, //选中时的颜色
          onChanged:(value){
            setState(() {
              _checkboxSelected=value;
            });
          } ,
        )
      ],
    );
  }
}

总结
通过Switch和Checkbox我们可以看到,虽然它们本身是与状态(是否选中)关联的,但它们却不是自己来维护状态,而是需要父组件来管理状态,然后当用户点击时,再通过事件通知给父组件,这样是合理的,因为Switch和Checkbox是否选中本就和用户数据关联,而这些用户数据也不可能是它们的私有状态。我们在自定义组件时也应该思考一下哪种状态的管理方式最为合理。

发布了13 篇原创文章 · 获赞 38 · 访问量 2553

おすすめ

転載: blog.csdn.net/m0_46369686/article/details/104648877