首页 > 其他分享 >Flutter基础组件(6):单选按钮、复选框、单选开关

Flutter基础组件(6):单选按钮、复选框、单选开关

时间:2024-10-11 16:01:24浏览次数:12  
标签:const value 复选框 Switch 单选 Flutter setState

在移动应用开发中,单选和复选是常见的用户交互模式,用于选择一个或多个选项。Flutter 提供了一些内置的组件和机制,方便我们实现单选和复选功能。本文将介绍 Flutter 中的单选按钮(RadioButton)和复选框(Checkbox)的使用方法和示例。

一、单选按钮(RadioButton)

单选按钮是一种用户界面组件,用于在多个选项中选择一个选项。在 Flutter 中,我们可以使用RadioRadioListTile来创建单选按钮。

Radio组件需要与RadioGroup一起使用,以便在一组选项中实现单选功能。以下是一个使用RadioRadioGroup的示例:

示例代码:

import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    home: RadioPage(),
    debugShowCheckedModeBanner: false,
  ));
}

class RadioPage extends StatelessWidget {
  const RadioPage({super.key});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Radio Page'),
      ),
      body: const Center(
        child: MyRadioGroup(),
      ),
    );
  }
}

class MyRadioGroup extends StatefulWidget {
  const MyRadioGroup({super.key});
  @override
  State<MyRadioGroup> createState() => _MyRadioGroupState();
}

class _MyRadioGroupState extends State<MyRadioGroup> {
  int _selectedValue = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        RadioListTile(
          title: const Text('Option 1'),
          value: 1,
          groupValue: _selectedValue,
          onChanged: (value) {
            setState(() {
              _selectedValue = value as int;
            });
          },
        ),
        RadioListTile(
          title: const Text('Option 2'),
          value: 2,
          groupValue: _selectedValue,
          onChanged: (value) {
            setState(() {
              _selectedValue = value as int;
            });
          },
        ),
      ],
    );
  }
}

在上面的示例中,我们创建了一个名为MyRadioGroup的有状态(stateful)小部件。通过使用RadioListTile,我们为每个选项创建了一个单选按钮,并使用groupValue属性指定当前选中的值。onChanged回调函数在选择改变时被调用,通过调用setState来更新选择的值。效果图如下所示:

Flutter_checkBox_B.png


二、复选框

Flutter 的复选框是一种用户界面组件,用于允许用户选择多个选项,可以同时选择或取消选择多个选项。复选框通常以一个方框和一个选中状态的标记符号呈现,用户可以通过点击复选框来切换选项的选择状态。

示例代码

以下是一个完整的能够运行的 Flutter 复选框的示例代码:

import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    home: CheckboxPage(),
  ));
}

class CheckboxPage extends StatefulWidget {
  const CheckboxPage({super.key});
  @override
  State<CheckboxPage> createState() => _CheckboxPageState();
}

class _CheckboxPageState extends State<CheckboxPage> {
  final List<bool> _selectedValues = [false, false, false];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Checkbox Example'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          CheckboxListTile(
            title: const Text('Option 1'),
            value: _selectedValues[0],
            onChanged: (value) {
              setState(() {
                _selectedValues[0] = value!;
              });
            },
          ),
          CheckboxListTile(
            title: const Text('Option 2'),
            value: _selectedValues[1],
            onChanged: (value) {
              setState(() {
                _selectedValues[1] = value!;
              });
            },
          ),
          CheckboxListTile(
            title: const Text('Option 3'),
            value: _selectedValues[2],
            onChanged: (value) {
              setState(() {
                _selectedValues[2] = value!;
              });
            },
          ),
        ],
      ),
    );
  }
}
  • 在上面的示例中,我们创建了一个名为CheckboxPage的有状态(stateful)小部件。该页面包含了三个复选框,用于选择不同的选项。复选框的选择状态通过_selectedValues列表进行控制,并在状态改变时使用setState进行更新。

  • 我们使用CheckboxListTile组件创建了复选框,并在每个复选框中设置了标题和初始的选中状态。onChanged回调函数在复选框状态改变时被调用,并通过setState更新选择的状态。

运行这个示例,您将看到三个复选框在页面上显示,并且可以通过点击复选框来切换它们的选中状态。效果图如下所示:

Flutter_checkBox_C.png


三、Flutter单选开关(Switch)

Flutter的单选开关(Switch)是一种用户界面组件,用于在两个选项之间进行单选选择,表示开关的状态为打开或关闭。单选开关通常以滑动开关的形式呈现,用户可以通过滑动或点击来改变其状态。

示例代码

以下是一个完整的能够运行的 Flutter 单选开关的示例代码:

import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(
    debugShowCheckedModeBanner: false,
    home: SwitchPage(),
  ));
}

class SwitchPage extends StatefulWidget {
  const SwitchPage({super.key});
  @override
  State<SwitchPage> createState() => _SwitchPageState();
}

class _SwitchPageState extends State<SwitchPage> {
  bool _isSwitched = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Switch Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Switch(
              value: _isSwitched,
              onChanged: (value) {
                setState(() {
                  _isSwitched = value;
                });
              },
            ),
            Text(
              _isSwitched ? 'Switch is ON' : 'Switch is OFF',
              style: const TextStyle(fontSize: 18.0),
            ),
          ],
        ),
      ),
    );
  }
}

在上面的示例中,我们创建了一个名为SwitchPage的有状态(stateful)小部件。该页面包含一个Switch组件和一个文本组件,用于显示开关的状态。开关的状态通过_isSwitched变量进行控制,并在状态改变时使用setState进行更新。

Switch组件中,我们使用value属性指定当前的开关状态,onChanged回调函数在开关状态改变时被调用,并通过setState更新开关的值。效果图如下所示:

Flutter_checkBox_D.png


四、其它示例

Material 组件库中提供了 Material 风格的单选开关Switch和复选框Checkbox,虽然它们都是继承自StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父组件来管理的。当SwitchCheckbox被点击时,会触发它们的onChanged回调,我们可以在此回调中处理选中状态改变逻辑。下面看一个简单的例子:

class SwitchAndCheckBoxTestRoute extends StatefulWidget {
  @override
  _SwitchAndCheckBoxTestRouteState createState() => _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;
            });
          } ,
        )
      ],
    );
  }
}

上面代码中,由于需要维护SwitchCheckbox的选中状态,所以SwitchAndCheckBoxTestRoute继承自StatefulWidget 。在其build方法中分别构建了一个SwitchCheckbox,初始状态都为选中状态,当用户点击时,会将状态置反,然后回调用setState()通知 Flutter 框架重新构建UI,效果如图3-17所示:

Flutter_checkBox_A.png


标签:const,value,复选框,Switch,单选,Flutter,setState
From: https://www.cnblogs.com/linuxAndMcu/p/18458602

相关文章

  • Flutter布局(2):弹性布局(Flex、Expanded)
    一、什么是弹性布局(Flex)什么是弹性布局(Flex)?弹性布局(Flex)是一种基于弹性盒子模型的布局方式,类似于Web开发中的Flexbox。在Flutter中,Flex组件是用于实现弹性布局的关键组件之一。Flex布局是一种简洁且强大的方式,可用于构建水平或垂直方向的弹性布局。Flex组件可以沿着水平......
  • Flutter布局(1):线性布局(Row、Column)
    所谓线性布局,即指沿水平或垂直方向排列子组件。Flutter中通过Row和Column来实现线性布局。主轴和纵轴对于线性布局,有主轴和纵轴之分,如果布局是沿水平方向,那么主轴就是指水平方向,而纵轴即垂直方向;如果布局沿垂直方向,那么主轴就是指垂直方向,而纵轴就是水平方向。一、Row组件1.1......
  • Flutter布局(4):层叠布局(Stack、Positioned)
    层叠布局和Web中的绝对定位、Android中的Frame布局是相似的,子组件可以根据距父容器四个角的位置来确定自身的位置。层叠布局允许子组件按照代码中声明的顺序堆叠起来。Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位。Stack允许子组件堆叠,而Positioned用于根据......
  • Flutter布局(3):流式布局(Wrap、Flow)
    一、简介在Flutter中,流式布局是一种常用的布局方式,用于实现动态调整子组件位置和尺寸的需求。Flutter提供了两个流式布局的组件:Wrap和Flow。其实,Flow用的实在不多呀。二、Wrap组件Wrap组件是一种流式布局,它会自动调整和换行子组件,以适应可用空间。属性Wrap组件具有......
  • Flutter布局(5):对齐与居中布局(Align、Center)
    在Flutter中,布局是构建用户界面的重要组成部分。Align和Center是两个常用的布局组件,它们都用于在父组件中对子组件进行对齐和居中。本篇博客将详细介绍Align和Center的用法、属性和适用场景,帮助你更好地理解和运用它们。一、Align:精准对齐,掌握位置Align组件用于将子组......
  • Flutter 实现骨架屏CE
    什么是骨架屏在客户端开发中,我们总是需要等待拿到服务端的响应后,再将内容呈现到页面上,那么在用户发起请求到客户端成功拿到响应的这段时间内,应该在屏幕上呈现点什么好呢?答案是:骨架屏那么什么是骨架屏呢,来问下GPT:骨架屏(SkeletonScreen)是一种现代的用户界面设计技术,用于提升......
  • Flutter 实现骨架屏
    Flutter实现骨架屏 合集-flutter(1) 1.Flutter实现骨架屏09-30收起 什么是骨架屏在客户端开发中,我们总是需要等待拿到服务端的响应后,再将内容呈现到页面上,那么在用户发起请求到客户端成功拿到响应的这段时间内,应该在屏幕上呈现点什么好呢?答案是:骨架屏......
  • 使用flutter
    运行flutterdoctorvs报错先将这几个下载在环境变量中添加:FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cnPUB_HOSTED_URLhttps://pub.flutter-io.cn安卓报错首先需要将jdk升级版本在环境变量中绑定配置AndroidStudio的路径flutterconf......
  • 鸿蒙harmonyos纯flutter开发环境搭建
            公司app是用纯flutter开发的,目前支持android和iOS,后续估计也会支持鸿蒙harmonyos。目前谷歌flutter并没有支持咱们国产手机操作系统鸿蒙harmonyos,于是乎国内有个叫OpenHarmony-SIG的组织,去做了鸿蒙harmonyos适配flutter开发的工作。本文就是基于OpenHarmony-SI......
  • 开发一个flutter app
    重新开启了flutter学习,因为一个大创项目很对不起王建民主任,教导的软件需求知识,我完全没有用到。首先配置环境需要用androidstudio自己用idea一直出错。所以一定要选择用androidstudio,随便在网上找个教程就可以了在android中build.gradle添加以下代码确保app启动慢的问......