Flutter 自定义单选控件

Flutter开发之——交互组件-Radio和RadioListTile 面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。 阅读详情

在Flutter 应用开发中,经常会遇到各种单选效果,虽然官方提供了Radio组件,但是并不能满足我们实际的开发需求,所以往往还需要自定义控件才能满足平时的开发需求。下面就平时开发中用到的单选进行介绍:

自定义SegmentBar

对于分段组件大家肯定不会陌生,主要是实现多个分段,实现单选功能,效果如下图。
在这里插入图片描述
话不多说,直接上代码:

class SegmentBarView extends StatefulWidget {

  List<String> datas;
  Function(String) onSelected;
  int defaultIndex=0;
  SegmentBarView({@required this.datas, this.onSelected,this.defaultIndex});

  @override
  _SegmentBarViewState createState() => _SegmentBarViewState();
}

class _SegmentBarViewState extends State<SegmentBarView> {

  List<String> sdkLists;
  String selectItem;

  @override
  void initState() {
    super.initState();
    sdkLists = widget.datas;
    selectItem=sdkLists[widget.defaultIndex];
  }
  
  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: Container(
        padding: EdgeInsets.only(left: 10, right: 10),
        child: Row(
          children: _buildSegments(sdkLists),
        ),
      ),
    );
  }

  _buildSegments(List list) {
    if(list == null) {
      return Container();
    }
    List<Widget> items = List();
    list.forEach((item){
      if(item != null) {
        items.add(Container(
          padding: EdgeInsets.only(top: 8,bottom: 8),
          child: _buildItem(item),
        ));
      }
    });
    return items;
  }

  _buildItem(String item) {
    if(selectItem == item) {
      return Container(
        height: 34,
        child: RaisedButton(
          shape:  RoundedRectangleBorder(
//            borderRadius: BorderRadius.circular(15)
          ),
          color: Color(0xFF00A6DE),
          onPressed: (){

          },
          child: Text(item,style: TextStyle(color: Colors.white),),
        ),
      );
    }else {
      return Container(
        height: 34,
        child: OutlineButton(
          borderSide: BorderSide(color: Color(0xFFcccccc),width: 0.5),
          onPressed: (){
            updateGroupValue(item);
          },
          child: Text(item),
        ),
      );

    }
  }

  updateGroupValue(String item) {
    if(item == selectItem) {
      return;
    }else {
      selectItem = item;
      widget.onSelected(selectItem);
      setState(() {
      });
    }
  }
  
}

使用的时候,只需要按照构造函数传入对应的参数即可。

自定义Radio

当然,开发中还可以遇到下面这种带圆角的按钮,效果如下。
在这里插入图片描述
对于这种效果怎么做呢,最简单的就是硬编码,用两个按钮,然后点击的时候去切换,代码如下:

//只能支持两个按钮单选
class RadioGroupWidget extends StatefulWidget {

  List<String> datas ;
  Function(String) onSelected;
  double radioWidth=80;
  double radioHeight=28;
  RadioGroupWidget({@required this.datas,@required this.onSelected,this.radioWidth, this.radioHeight,});

  @override
  State<StatefulWidget> createState() {
    return RadioGroupState();
  }
}

class RadioGroupState extends State<RadioGroupWidget> {

  var chooseStr;
  int choosed=1;
  Color choosedBgColor=Colors.blue;
  Color choosedCornerColor=Colors.blue;
  Color choosedTxtColor=Colors.white;
  Color defaultBgColor=Colors.white;
  Color defaultCornerColor=Colors.grey;
  Color defaultTxtColor=Colors.grey;

  @override
  void initState() {
    super.initState();
    chooseStr=widget.datas[0];
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        GestureDetector(
          onTap: (){
            choosed=1;
            chooseStr=widget.datas[0];
            setState(() {});
            widget.onSelected(chooseStr);
          },
          child: Container(
            height: widget.radioHeight,
            width: widget.radioWidth,
            decoration: BoxDecoration(
              color: choosed==1?choosedBgColor:defaultBgColor,
              borderRadius: BorderRadius.only(topLeft: Radius.circular(15),bottomLeft: Radius.circular(15)),
              border:  Border.all(width: 1, color: choosed==1?choosedCornerColor:defaultCornerColor),
            ),
            child: Center(child: Text(widget.datas[0],style: TextStyle(color: choosed==1?choosedTxtColor:defaultTxtColor,fontSize: 12))),
          )
        ),
        GestureDetector(
          onTap: (){
            choosed=2;
            chooseStr=widget.datas[1];
            setState(() {});
            widget.onSelected(chooseStr);
          },
          child: Container(
            height: widget.radioHeight,
            width: widget.radioWidth,
            decoration: BoxDecoration(
              color: choosed==2?choosedBgColor:defaultBgColor,
              borderRadius: BorderRadius.only(topRight: Radius.circular(15),bottomRight: Radius.circular(15)),
              border:  Border.all(width: 1, color: choosed==2?choosedCornerColor:defaultCornerColor),
            ),
            child: Center(child: Text(widget.datas[1],style: TextStyle(color: choosed==2?choosedTxtColor:defaultTxtColor,fontSize: 12))),
          )
        )
      ],
    );
  }
}

实际使用时,传入参数即可。

List<String> lineRadios = ['实时流水', '累计流水'];
RadioGroupWidget(radioWidth:80,radioHeight:28,datas: lineRadios, onSelected: (value){
                 print('_buildChartTitle value: '+value.toString());
              },)

https://shimo.im/docs/TG8PDh9D96WGTT8W

【Flutter】七、Flutter之表单单选控件——Radio、RadioListTile 【Flutter】七、Flutter之表单单选控件——Radio、RadioListTile一、Radio1.1 Radio构造器1.2 Radio属性说明1.3Radio示例二、RadioListTile2.1 RadioListTile构造器2.2 RadioListTile属性说明2.3 RadioListTile示例 一、Radio Radio和RadioListTile都是单选控件,R... 阅读详情

相关推荐

Flutter控件归纳总结

Flutter 的控件(Widget)是构建 UI 的基础,分为(StatelessWidget)和(StatefulWidget)两大类。

探索者李小白的博客 1309

Flutter 自定义单选按钮和自定义复选框

在日常开发中,很多时候系统自带的单选按钮,复选框无法满足我们的需求,那么就需要自定义样式的按钮,本篇文章将记录如何自定义单选按钮,复选框。

半身风雪 3119

Flutter 教程第七章:单选开关(Switch)详解

Switch组件是 Flutter 中用于二选一开关功能的核心控件,类似于 iOS 中的滑动开关和 Android 中的切换按钮。它通常用于让用户在两种状态之间切换,如开/关、是/否等。Switch是一个非常直观的控件,当用户需要快速启用或禁用某个功能时,它可以提供最直接的交互方式。Switch的作用不仅在于切换状态,它的外观和用户交互也能给应用带来不同的视觉体验。因此,了解如何配置Switch的外观、行为和状态管理是开发直观且易于使用的应用程序的重要一环。Switch。

ljguo2008的专栏 3480

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

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

weixin_41897680的博客 2434

Flutter控件实践:复选框、单选按钮与进度条

本篇博客详细探讨了Flutter中的三种常用控件:复选框(Checkbox)、单选按钮(Radio)和进度条(ProgressBar)。通过实际代码示例,我们了解到如何在Flutter应用中使用这些控件来构建交互式的用户界面,以及它们在不同场景下的具体用法和属性配置。

weixin_42497762的博客 903

CCS20实战入门:第一个工程搭建示例

通过实际操作演示如何在ccs20中创建并配置首个开发项目,涵盖环境设置与基础调试步骤,帮助新手快速上手ccs20集成开发环境,提升嵌入式开发效率。

weixin_31185473的博客 884

【flutter】封装自定义单选框

flutter里有自带的radioListTile,但是需求对ui对要求不一样,导致只能直接封装一个。 大概是这样的效果,为了避免不必要的麻烦,我把文字隐藏了。 我的json是以下格式的 List list =[ { "content": "content1111", "reasonId":0, }, { "content": "c...

1998DmjzZZ瞎bb 1592

《湖科大教书匠计算机网络》学习笔记总目录+思维导图

本篇文章是对《湖科大教书匠计算机网络》所有知识点的笔记总结归档和计算机网络的思维导图

weixin_73077810的博客 8230

Flutter之SegmentedButton

SegmentedControl和SegmentedButton

好好学习的博客 1751

几款常见存储系统的对比分析

如何对比选择存储系统?本文给你答案!本文将详细对比NetApp、Lsilon、Vast Data、DDN lustre和WekaFS的五个存储系统的简单性、速度、规模及标准。

hongcloudtech的博客 1679

OpenClaw 在 Windows 环境下的完整安装、配置和部署指南

介绍Windows环境下OpenClaw的完整安装,配置和部署的全流程

hxbao的专栏 1485

flutter 专题 七十一 Flutter 自定义单选控件

对于分段组件大家肯定不会陌生,主要是实现多个分段,实现单选功能,效果如下图。});}else {});使用的时候,只需要按照构造函数传入对应的参数即可。当然,开发中还可以遇到下面这种带圆角的按钮,效果如下。//只能支持两个按钮单选@override。

m0_61164038的博客 726

SpringBoot+Git+Jenkins+K8s容器化部署

SpringBoot+Git+Jenkins+K8s容器一套部署流程

可乐加.糖 471

avuejs 单选按钮不能切换_Flutter 自定义单选控件

在Flutter 应用开发中,经常会遇到各种单选效果,虽然官方提供了Radio组件,但是并不能满足我们实际的开发需求,所以往往还需要自定义控件才能满足平时的开发需求。下面就平时开发中用到的单选进行介绍:自定义SegmentBar对于分段组件大家肯定不会陌生,主要是实现多个分段,实现单选功能,效果如下图。 话不多说,直接上代码:class SegmentBarView extends Statef...

weixin_34584910的博客 411

LeRobot 入门教程(十七)NVIDIA IsaacLab Arena 集成

LeRobotEnvHub现已集成IsaacLabArena实现GPU加速仿真,支持GR1/G1/伽利略人形机器人实体和多种操作任务。安装需满足CUDA GPU、Ubuntu系统和IsaacSim 5.1.0要求,通过conda环境配置依赖项。系统提供SmolVLA和PI0.5等预训练策略评估功能,支持视频录制和并行环境配置。环境配置选项涵盖机器人实体、任务类型、观测维度等参数,并包含针对CUDA内存、视频录制等常见问题的解决方案。此外,LightWheel AI还通过LW-BenchHub引入了包含268

2506_90492529的博客 1246

MSVS C# Matlab的混合编程系列2 - 构建一个复杂(含多个M文件)的动态库:

本节我们尝试将一个有很多函数和文件的Matlab算法文件集成到C#的项目里面。

山云的专栏 2068

Flutter日历,可以自定义风格UI

温馨提示请拖动到文章末尾,长按识别「抽奖」小程序。现金红包等你来拿。点击「文末广告」更有机会获取20元现金大奖。作者:入魔的冬瓜链接:https://juejin.im/...

文淑的博客 1649

工业视觉降本300%实战:C# + 开源YOLO如何干掉Halcon/VisionPro?

在当前制造业普遍追求“降本增效”的大背景下,工业视觉检测系统作为产线的眼睛,其成本问题日益突出。通过该方案,我们成功帮助一家电子厂将单条产线的视觉检测成本从15万降低至不足5千(主要为工控机硬件成本),降本幅度超过95%,且系统稳定性经受住了6个月连续生产的考验。:C#负责“工程化”和“业务逻辑”,YOLO负责“智能算法”,二者结合,完美覆盖了工业视觉从算法到落地的全链路。的组合,构建一套高性能、低成本、易维护的工业视觉解决方案,并彻底替代昂贵的付费库。” 这是一个典型的误区。工业相机/USB相机。

2601_94871597的博客 429

基于HarmonyOS API 24 Flutter for OpenHarmony教育类应用开发:习题练习与答题卡组件的实现

本项目通过一个习题练习与答题卡系统的实现,展示了 Flutter 开发中多个核心技术的综合应用:首先是组件化设计思想。项目将复杂的功能拆分为习题练习和答题卡两个独立组件,每个组件职责单一、接口清晰,既提高了代码的可维护性,也方便了后续的复用和扩展。其次是状态管理的经典实践。项目遵循状态提升原则,将共享状态提升到父组件管理,子组件通过回调与父组件通信。这种基于 setState 的状态管理方式虽然简单,但对于中小规模的功能模块来说已经足够,并且具有学习成本低、代码直观等优势。

2301_79516858的博客 167

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Flutter for OpenHarmony 实战:单选框(Radio)、复选框(Checkbox)与开关(Switch)

override// 单选框状态String?// 复选框状态// 开关状态页面管理三种控件的状态:单选框使用String?存储选中的 ID,复选框和开关使用存储每个选项的状态。// 当前选项的值final T?groupValue;// 组内选中的值onChanged;label;@override// 缩放动画// 淡入淡出动画@override// 如果已选中,直接设置为完成状态是泛型组件,支持任意类型的值。

2301_79166208的博客 1137

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Flutter入门进阶之旅(十一)Index&Chose

延续上一节的内容,上一节我们讲解了各种Dialog跟提示,其中包括轻量级跟非轻量级,我们了解到了像SnackBar、Tooltip、Dialog等各种具有提示交互作用的Widget,今天我们继续上一篇的内容,来一块了解一下各种用于进度显示的Widget跟checkBox等选择作用的Widget。 ...

谢栋的专栏 1789

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Flutter Radio 单选按钮

本章节主要讲解 Radio 和RadioListTile 单选按钮 参数讲解 属性 说明 Radio单选按钮 value 此单选按钮表示的值(可设定为id) groupValue 此组单选按钮的当前选定值 onChanged 监听 activeColor 选择此单选按钮时使用的颜色 materialTapTargetSize ...

马志武的博客 1万+

Flutter常用UI控件

二、常用控件 文本控件 文本显示控件:TextView 效果图 简介 用于显示文本 代码 Text('文本显示') 文本输入控件:TextField 普通文本输入 效果图 简介 用于输入文本信息 代码 TextField() 密码输入 效果图 简介 用于输入输入密码 代码 TextField(obscureText: true) 按钮控件 扁平化按钮:MaterialBut...

蓝不蓝编程 986
上一篇: Android Hilt实战初体验: Dagger替换成Hilt
下一篇: 四步通过Glide实现共享元素无缝转场效果
Android_008
博客等级 码龄6年 0粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值