Flutter开发(二十)—— 选择按钮

【Flutter】二十九、Flutter通知—— Notification 一、使用NotificationListener监听滚动进度二、使用自定义通知 Notification可以实现将数据从子组件向父组件传递,与InheritedWidget的传递方向正好相反。 一、使用NotificationListener监听滚动进度     Flutter中很多地方使用了通知,如可滚动(Scrollable) Widget中滑动时就会分发ScrollNotificati... 阅读详情

此处介绍的选择按钮:包括了CheckBox、Radio、Switch、Slider等
以下主要通过一个Demo代码,展示多种选择按钮的属性和使用效果。
main.dart

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.purple,
      ),
      initialRoute: '/',
      // routes:
      routes: {
        '/': (context) => MaterialComponents(),
      },
    );
  }
}

MaterialComponents.dart

import 'package:flutter/material.dart';
import 'demo/checkbox_demo.dart';
import 'demo/radioDemo.dart';
import 'demo/switchDemo.dart';
import 'demo/sliderDemo.dart';

class MaterialComponents extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MaterialComponents'),
        elevation: 0.0,
      ),
      body: ListView(
        //ListView 增加padding
        padding: EdgeInsets.all(30.0),
        children: <Widget>[
          ListItem(title: 'CheckBox', page: CheckBoxDemo()),
          ListItem(title: 'Radio', page: RadioDemo()),
          ListItem(title: 'Switch', page: SwitchDemo()),
          ListItem(title: 'Slider', page: SliderDemo()),
        ],
      ),
    );
  }
}

class ListItem extends StatelessWidget {
  final String title;
  final Widget page;
  ListItem({this.title, this.page});

  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(title),
      onTap: () {
        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => page));
      },
    );
  }
}

checkbox_demo.dart

import 'package:flutter/material.dart';

class CheckBoxDemo extends StatefulWidget {
  @override
  _CheckBoxDemoState createState() => _CheckBoxDemoState();
}

class _CheckBoxDemoState extends State<CheckBoxDemo> {
  bool _checkboxItemA = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('CheckBoxDemo'),
        elevation: 0.0,
      ),
      body: Container(
        padding: EdgeInsets.all(15.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CheckboxListTile(
              value: _checkboxItemA,
              // 点击事件 如果null 这禁止点击
              onChanged: (value) {
                setState(() {
                  _checkboxItemA = value;
                });
              },
              title: Text('CheckboxListTile标题'), //标题
              subtitle: Text('附属标题'), //副标题
              secondary: Icon(Icons.gradient), //添加条目图标
              selected: _checkboxItemA, //添加激活颜色(跟随主题颜色)
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Checkbox(
                  value: _checkboxItemA,
                  onChanged: (value) {
                    setState(() {
                      _checkboxItemA = value;
                    });
                  },
                  activeColor: Colors.black,
                )
              ],
            )
          ],
        ),
      ),
    );
  }
}

效果展示:
在这里插入图片描述
Radio 是一个复选框组件,通常用于设置的选项里。
Radio 有以下常用属性:
activeColor → Color - 激活时的颜色。
groupValue → T - 选择组的值。
onChanged → ValueChanged - 改变时触发。
value → T - 单选的值。

radioDemo.dart

import 'package:flutter/material.dart';

class RadioDemo extends StatefulWidget {
  @override
  _RadioDemoState createState() => _RadioDemoState();
}

class _RadioDemoState extends State<RadioDemo> {
  int _radioGroupA = 0;

  void _handleRadioValueChanged(int value) {
    setState(() {
      _radioGroupA = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Radio'),
        elevation: 10.0,
      ),
      body: Container(
        padding: EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('_radioGroupA: $_radioGroupA'),
            SizedBox(height: 15.0,),
            RadioListTile(
              value: 0,
              groupValue: _radioGroupA,
              onChanged: _handleRadioValueChanged,
              title: Text('RadioListTile A'),
              subtitle: Text('选择框A'),
              secondary: Icon(Icons.backspace),
              //利用_radioGroupA值与当前控件value 进行bool判断
              selected: _radioGroupA == 0,  //是否跟随主题颜色
            ),
            RadioListTile(
              value: 1,
              groupValue: _radioGroupA,
              onChanged: _handleRadioValueChanged,
              title: Text('RadioListTile B'),
              subtitle: Text('选择框B'),
              secondary: Icon(Icons.backspace),
              selected: _radioGroupA == 1,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Radio(
                  value: 0,
                  groupValue: _radioGroupA,
                  onChanged: _handleRadioValueChanged,
                  activeColor: Colors.black,
                ),
                Radio(
                  value: 1,
                  groupValue: _radioGroupA,
                  onChanged: _handleRadioValueChanged,
                )
              ],
            )
          ],
        ),
      ),
    );
  }
}

效果展示:
在这里插入图片描述
Switch 是一个切换按钮组件,通常用于设置的选项里。
Switch 的原点颜色,横条颜色都可以设置,此外原点可以以图片形式显示。
Switch 有以下常用属性:
activeColor → Color - 激活时原点的颜色。
activeThumbImage → ImageProvider - 原点还支持图片,激活时的效果。
activeTrackColor → Color - 激活时横条的颜色。
inactiveThumbColor → Color - 非激活时原点的颜色。
inactiveThumbImage → ImageProvider - 非激活原点的图片效果。
inactiveTrackColor → Color - 非激活时横条的颜色。
onChanged → ValueChanged - 改变时触发。

value → bool - 切换按钮的值。

switchDemo.dart

import 'package:flutter/material.dart';

class SwitchDemo extends StatefulWidget {
  @override
  _SwitchDemoState createState() => _SwitchDemoState();
}

class _SwitchDemoState extends State<SwitchDemo> {
  bool _SwitchItemA = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SwitchDemo'),
        elevation: 0.0,
      ),
      body: Container(
        padding: EdgeInsets.all(15.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SwitchListTile(
              value: _SwitchItemA,
              onChanged: (value) {
                setState(() {
                  _SwitchItemA = value;
                });
              },
              title: Text('SwitchListTile 是否显示密码'),
              subtitle: Text(_SwitchItemA ? '显示密码' : '隐藏密码'),
              secondary:
                  Icon(_SwitchItemA ? Icons.visibility : Icons.visibility_off),
              selected: _SwitchItemA,
              inactiveThumbImage: NetworkImage('https://dwz.cn/VIAONrkU'), //未激活
              activeThumbImage: NetworkImage('https://dwz.cn/I1HjjJMP'), //激活
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  _SwitchItemA ? '男生' : '女生',
                  style: TextStyle(fontSize: 35.0),
                ),
                Switch(
                  inactiveThumbImage:
                      NetworkImage('https://dwz.cn/VIAONrkU'), //未激活
                  activeThumbImage:
                      NetworkImage('https://dwz.cn/I1HjjJMP'), //激活
                  value: _SwitchItemA,
                  onChanged: (value) {
                    setState(() {
                      _SwitchItemA = value;
                    });
                  },
                )
              ],
            )
          ],
        ),
      ),
    );
  }
}


给Switch 圆形按钮设置图像

   inactiveThumbImage: NetworkImage('https://dwz.cn/VIAONrkU'), //未激活 图片
   activeThumbImage: NetworkImage('https://dwz.cn/I1HjjJMP'), //激活  图片

效果展示:

在这里插入图片描述

sliderDemo.dart

import 'package:flutter/material.dart';

class SliderDemo extends StatefulWidget {
  @override
  _SliderDemoState createState() => _SliderDemoState();
}

class _SliderDemoState extends State<SliderDemo> {
  double _sliderItemA = 5;//初始值
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SliderDemo'),
        elevation: 0.0,
      ),
      body: Container(
        padding: EdgeInsets.all(15.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Slider(
                  value: _sliderItemA,//当前值
                  //改变时当前值的变化
                  onChanged: (value){
                    setState(() {
                      _sliderItemA = value;
                    });
                  },
                  activeColor: Theme.of(context).accentColor,//滑道颜色 划过的颜色
                  inactiveColor: Theme.of(context).accentColor.withOpacity(0.3),//滑道颜色 未划过的颜色
                  min: 0.0,//最小值
                  max: 10.0,//最大值
                  divisions: 10,//将滑道分割成 10份
                  label: '当前进度${_sliderItemA.toInt()}',//水滴图像显示内容
                )
              ],
            ),
            SizedBox(height: 15.0,),
            Text('SliderValue: $_sliderItemA')//显示当前SliderValue值
          ],
        ),
      ),
    );
  }
}

效果展示:
在这里插入图片描述

flutter 专题二十三 Flutter混编模式下的调试方案 在软件开发开发过程中,调试过程是必不可少的,那么,对于Flutter混合工程来说,混编模式下有什么调试方案和技巧呢? 阅读详情

相关推荐

Flutter 基础篇(二十一)

AppBar({ Key key, this.leading, //导航栏最左侧Widget,常见为抽屉菜单按钮或返回按钮。 this.automaticallyImplyLeading = true, //如果leading为null,是否自动实现默认的leading按钮 this.title,// 页面标题 this.actions, // 导航栏右侧菜单 this.bottom, // 导航栏底部菜单,通常为Tab按钮组 this.elevation = 4.0, // 导航栏阴影 this.cent

m0_70083119的博客 840

浅识Flutter 基本组件之CheckBox组件

value bool 设置复选框是否选中,取值包括true(选中) 、 false (没选中) onChanged 设置监听复选框的值发生改变时回调 tristate bool 设置复选框是否三态,取值包括true、false和 null activeColor Color 设置复选框选中时的颜色 checkColor Color 设置复选框选中时选中图标()的颜色 materialTapTargetSize double 设置点击目标的大小,取值默包括 padded、shrink Wrap两种...

qq_43336158的博客 1729

Flutter 基础篇(二十一)—— Scaffold

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人。

asdzxc324as的博客 1236

Flutter 完整开发实战详解(二、 快速开发实战篇)

作为系列文章的第二篇,继《Flutter完整开发实战详解(一、Dart语言和Flutter基础)》之后,本篇将为你着重展示:如何搭建一个通用的Flutter App 常用功能脚手架,快速开发一个完整的 Flutter 应用。 友情提示:本文所有代码均在 GSYGithubAppFlutter ,文中示例代码均可在其中找到,看完本篇相信你应该可以轻松完成如下效果。相关基础还请看篇章一。 ...

恋猫de小郭的博客 1万+

《Flutter 控件大全》第二十个:RaisedButton

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。 同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。 Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。 Flutter内置了10多种Button(按钮)类控件供我们使用,了解这些控件有助于提高我们...

老孟Flutter 806

首发!谷歌倾斜摄影数据转换生成OSGB格式

全球首发,谷歌倾斜摄影模型文件能直接转换成OSGB格式!

cyber_room的博客 2286

Flutter基础组件:按钮组件、单选组件、复选组件、滑块组件

Flutter基础组件:按钮组件、单选组件、复选组件、滑块组件

weixin_41897680的博客 2434

基于CANoe的Basic Diagnostics ECU (UDS)

基于CANoe的Basic Diagnostics ECU (UDS)

farmer00的博客 9152

Flutter:自定义单选按钮

如何在Ffltter 中创建像这样的自定义单选按钮组flutter dart flutter-layout这是完整的代码复制代码 要使用,请执行以下操作:复制代码 屏幕截图:

Dream It Possible 1972

深入理解HanLP1.x,填平可能遇到的坑

提取指定数量的摘要。自定义词典为什么要单独领出来讲呢?因为在我们的业务开发中,可能分词的效果并不理想,需要定制自己的词库,索引更加常用。例如:小米su7特斯拉modelY比亚042025款6575767670908我们需要分出小米su72025款等词。我们分别看看用字典和不用字典的效果。

static_coder的博客 977

WEBGL Shader零基础教程(四):片元着色器核心逻辑

本文系统介绍了WebGL渲染管线中片元着色器的核心概念与应用。主要内容包括:1)片元着色器在渲染管线中的定位与作用,作为逐像素处理单元接收插值数据并计算最终颜色;2)输入数据类型与使用规则,重点讲解varying变量和uniform变量的应用场景;3)颜色计算的核心逻辑,涵盖基础色、渐变、纹理采样和颜色混合;4)进阶特效实现与性能优化技巧,包括交互效果、内置函数组合和GPU计算优化;5)通过综合案例演示了纹理、波纹与交互效果的整合实现。文章提供了完整的代码示例和调试建议,为后续学习光照模型、后期处理等高级渲

分享知识,拥抱变化 1372

flutter开发实战-实现自定义按钮类似UIButton效果

flutter开发实战-实现自定义按钮类似UIButton效果,通过监听手势GestureDetector的onTapDown、onTapUp、onTapCancel、onTap来实现按下背景变换,松开背景恢复默认等效果

一名开发者 2087

ESP32对接百度智能云语音识别:从硬件配置到API调用的完整指南

本文详细介绍了ESP32对接百度智能云语音识别的完整流程,从硬件配置到API调用,涵盖麦克风选择、音频处理、错误处理及性能优化等关键环节。通过实战案例展示如何实现低成本、高效率的语音交互方案,特别适合智能硬件开发者参考。

weixin_29198045的博客 372

Flutter(二十四)——参数回传

本文目录前言主页面跳转界面 前言 上一篇通过静态路由以及动态路由了解了,在Flutter开发中界面的跳转,但在实际的项目中,并不仅仅只有跳转这么一种需求,还有回传参数。(下图为本文实现最终效果图) 比如在某些悬浮窗口中选择城市,然后返回地址等等,都具有回传参数的需求,那么在Flutter开发中,要怎么实现这么一种需求呢?不妨我们来做一个城市参数回传的例子。 主页面 首先,就是我们App的主页面设...

李元静 1万+

亿图图示(edrawmax中文版) v10.1.7pjb

edrawmax中文名叫做亿图图示,是一款非常棒的综合图形图表设计软件,既能实现流程图、架构图、工程图、思维导图等数百种专业领域图形图表的绘制,又能提供一个白板进行头脑风暴和任意编排,轻松实现数据和创意的可视化呈现。软件支持Windows、Mac、Linux及网络版,一端创作,多端同步,从而为跨端办公绘图提供新的解决方案,还兼容常用文档类的办公软件格式,包括图片、Office、PDF、Visio、Html、SVG等,尽可能的在文件格式这块满足用户多方面需求。软件支持创建260多种图表类型,拥有超过12500

qq_43293214的博客 1万+

基于OpenClaw的AI数字员工协同团队架构设计

随着大型语言模型从被动的文本生成器向具备自主规划与执行能力的智能代理演进,企业级人工智能的应用范式正在发生根本性转变。在这一演进过程中,OpenClaw(前身为Clawdbot及Moltbot)作为一种开源的、本地优先的个人AI智能体网关基础设施,凭借其对持续内存、多通道接入以及沙盒化工具执行的原生支持,迅速成为构建“始终在线”数字劳动力的核心框架 1。然而,将单体个人助理扩展为能够处理复杂业务逻辑、支持跨组织协同并严格保障数据隔离的多智能体(Multi-Agent)团队,绝非简单的API拼接。系统架构必须

形上得其象,形下合于数;阴阳自济,玄理自明。 1046

Flutter 零基础入门(二十四):Button 按钮体系

Flutter按钮体系入门指南:掌握TextButton、ElevatedButton和IconButton的基本使用。文章介绍了三种常用按钮的特性、基本用法和样式设置,重点讲解了onPressed事件处理和禁用状态实现。通过典型布局示例展示了按钮组合方式,并指出新手常见误区。本文帮助开发者从静态界面转向交互式开发,为后续手势识别学习奠定基础。适合Flutter初学者快速掌握按钮交互基础。

工作,学习历程分享 583

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

我只定义了三层数据,就只演示展开了三层,还可以多层,自己设置即可。

蜗牛~~ 2602

flutter 专题二十五 Flutter 集成Facebook快捷登录

有时候,为了迅速获客,会在注册登录页支持第三方登录,目的是借用这些产品庞大的用户量。在国内,常见的第三方登录有微信、qq和微博。对于一些国际的软件/网站来说,支持的比较多的第三方登录是Google、Facebook和Twitter等。这里记录下Facebook第三方登录的过程,下面是一个Facebook第三方登录流程说明。

m0_61164038的博客 1379

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Flutter完整开发指南 | Flutter&Dart – The Complete Guide

代码越来越多,构建flutter app时通常将大部件树分开并构建自己的部件,将代码拆分为多个较小的可能可重复使用的构建块,一般来说,涉及到分解小部件树和提取自定义小部件没有一种正确或错误的方法,取决于你想把哪些小部件放入自定义小部件。

默默测试!分享记录测试技术! 4940

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Flutter for OpenHarmony 实战之基础组件:第二十一篇 Checkbox, Radio 与 Switch — 基础选择控件详解

本文详细介绍了Flutter在OpenHarmony平台上三种基础选择控件(Checkbox、Radio和Switch)的应用与定制。首先强调了这些组件作为"受控组件"的特性,需要通过状态管理来维护其选中状态。随后分别讲解了每个控件的核心用法和样式定制技巧,包括Checkbox的多选功能、Radio的单选分组逻辑以及Switch的开关切换效果。文章还提供了典型的设置页面整合示例,并针对OpenHarmony平台特性给出了触控区域优化、响应式布局和视觉一致性等适配建议。最后附上完整的&qu

好代码自己会说话,烂代码才需要注释来圆谎 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

第二百二十九 如何选择视频文件

我们在本章回中介绍了如何使用image_picker包来选择视频文件,这种选择是可视化操作方式的选择,十分方便。我们介绍了具体的实现方法并且通过文字结合代码的方式进行了介绍。

talk_8的专栏 1238

第二百二十八回 如何选择多个图片文件

我们在本章回中继续介绍image_pikcer包的用法,主要用该包来选择多个图片文件,而且是可视化选择。我们通过文本结合代码的方式进行了介绍,最后,对本章回的内容做了全面的总结。

talk_8的专栏 1195

Flutter开发(二十七):Flutter_1.12与Android混合开发

Flutter 可以作为独立页面进入,如 Android 原生进入 Flutter ,或者Flutter 进入 Android 。 还有的情况一个页面存在Flutter item 与Android 页面。 目前有一个 Android 项目,然后在这个 Android 项目中导入 Flutter。 ...

wuqingsen1的博客 1746

Flutter开发(二十九):Flutter热重启、热加载、调试与发布应用

1.Flutter热重启、热加载 2.混合开发调试 dart 代码 3.发布应用 1.Flutter热重启、热加载 Flutter自带热重启/热加载的功能,但是到了 Android 项目中集成 Flutter ,这个功能好像没用了。下面来打开这个功能。 将设备连接到电脑上,关闭 APP(很关键),然后打开终端进入到对应项目文件夹运行: flutter attach 运行成功提示等待连接: Waiting for a connection from Flutter on Mi 10

wuqingsen1的博客 3158

二十四节气物候现象速览卡片:鸿蒙Flutter框架 实现的传统文化应用

摘要: 本文介绍了一个基于Flutter开发的二十四节气物候现象速览卡片应用,旨在展示中国传统文化中的节气信息。应用包含节气数据模型、自动计算当前节气、网格布局卡片展示等功能模块。技术实现上采用GridView.builder构建卡片网格,通过AlertDialog显示详情,并为每个节气配置独特颜色增强视觉识别。文章详细解析了数据模型设计、核心功能实现(如当前节气计算、卡片交互)以及UI组件结构,展示了如何通过现代化移动应用传承传统文化知识。项目采用绿色渐变主题,实现响应式设计,为用户提供直观的节气信息浏览

ai_lingshi的博客 394
上一篇: Flutter开发(十九)—— 按钮
下一篇: Flutter开发(二十一)—— 动画Animation
RedKeyer
博客等级 码龄11年 33粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值