Flutter组件学习(6)单选按钮Switch和复选按钮Checkbox

介绍

它们都是继承自StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父组件来管理的。当SwitchCheckbox被点击时,会触发它们的onChanged回调,我们可以在此回调中处理选中状态改变逻辑

Checkbox的大小是固定的,无法自定义,而Switch只能定义宽度,高度也是固定的。值得一提的是Checkbox有一个属性tristate ,表示是否为三态,其默认值为false ,这时Checkbox有两种状态即“选中”和“不选中”,对应的value值为truefalse 。如果tristate值为true时,value的值会增加一个状态null

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

Switch

valuetrue 开 ;false 关
onChanged((value){})状态改变回调方法
activeColor状态打开下,那个条条和球球的颜色
activeTrackColor打开状态下,那个条条的颜色
inactiveTrackColor关闭状态下,那个条条的颜色
inactiveThumbColor关闭状态下,那个球球的颜色
activeThumbImage打开状态下,那个球球的图片
inactiveThumbImage关闭状态下,那个球球的图片
SwitchListTileSwitch 的上层封装,它的外观是提供类似设置页的选择组件,可设置图标和文字

 关于给球球设置图片,可以设置本地的,也可以设置网络的

activeThumbImage: AssetImage('images/weixin_invite.png'),

inactiveThumbImage: NetworkImage('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591175847643&di=6e41a32b6e6355aacbfae14d03439a83&imgtype=0&src=http%3A%2F%2Fimgwx4.2345.com%2Fdypcimg%2Fdongman%2Fimg%2F2%2F25%2Fsup75205_223x310.jpg',
            

我自己写的小demo 

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main(){
  runApp(MyCheck());
}

class MyCheck extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyCheck> {

  bool _flag = false;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.red,
          title: Text('单选框和复选框练习'),
          textTheme:
          TextTheme(title: TextStyle(fontSize: 18, color: Colors.yellow)),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              Switch(
                value: this._flag,
                activeColor: Colors.red,
                activeTrackColor: Colors.orange,
                inactiveTrackColor: Colors.green,
                inactiveThumbColor: Colors.blue,
                activeThumbImage: AssetImage('images/weixin_invite.png'),
                inactiveThumbImage: NetworkImage('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591175847643&di=6e41a32b6e6355aacbfae14d03439a83&imgtype=0&src=http%3A%2F%2Fimgwx4.2345.com%2Fdypcimg%2Fdongman%2Fimg%2F2%2F25%2Fsup75205_223x310.jpg',
                ),
                onChanged: (value){
                  setState(() {
                    this._flag = value;
                  });
                },
              ),

              Text(
                  '此时的状态是${this._flag == true ? "选中" : "未选中"}',
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.red
                ),
              )
            ],
          ),
        )
      ),
    );
  }
}

    

CheckBox

valuetrue 开 ;false 关
onChanged((value){})状态改变回调方法
activeColor复选框选中的颜色
checkColor系统默认的复选框是个对勾,这里设置对勾的颜色
CheckboxListTile Checkbox 的上层封装,它的外观是提供类似设置页的选择组件,可设置图标和文字

看下原生是怎么样的

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main(){
  runApp(MyApp());
}

class MyApp extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _MyAppState();
  }
}

class _MyAppState extends State{

  bool _flag = false;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.red,
          title: Text('单选框和复选框练习'),
          textTheme: TextTheme(
            title: TextStyle(
              fontSize: 18,
              color: Colors.yellow
            )
          ),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              Checkbox(
                value: _flag,
                activeColor: Colors.red, //选中时的颜色
                checkColor: Colors.green,
                hoverColor: Colors.blue,
                focusColor: Colors.yellow,
                autofocus: true,
                onChanged:(value){
                  setState(() {
                    _flag=value;
                  });
                } ,
              )
            ],
          ),
        ),
      ),
    );
  }

}

SwitchListTile和CheckboxListTile的应用

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小苏的小小苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值