首页 > 其他分享 >如何创建分段按钮

如何创建分段按钮

时间:2024-08-03 22:25:26浏览次数:12  
标签:ButtonSegment 分段 创建 SegmentedButton value 按钮 组件 属性

文章目录


我们在上一章回中介绍了"SearchBar组件"相关的内容,本章回中将介绍SegmentedButton组件.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在本章回中介绍的SegmentedButton组件是一种分段式按钮,它把多个按钮连接成一组显示,组内再对不同的按钮进行分段显示。这种按钮类型我们以前介绍的单
选按钮和多选按钮,它会把多个按钮进行统一分组管理。SegmentedButton是Material3引入的新组件,我们将在本章回中详细介绍它的使用方法。

2. 使用方法

在Flutter中,SegmentedButton组件不能单独使用,它还需要配合ButtonSegment组件一起使用,类似NavigationBar和NavigationDestination配合使用
一样。接下来我们分别介绍这两种组件。

2.1 SegmentedButton

和其它组件一样,SegmentedButton组件提供了相关的属性来控制自己,下面是常用的属性:

  • segments属性:主要用来存放按钮,它可以存放多个按钮;
  • selected属性:主要用来控制哪一个按钮被选择,该属性的类型是集合类型;
  • onSelectionChanged属性:它是方法类型,选择任意一个按钮时回调该方法;
  • multiSelectionEnabled属性:用来控制是否可以同时选择多个按钮,默认值为false;
  • emptySelectionAllowed属性:用来控制是否可以不选择任意一个按钮;
  • style属性:用来修改按钮的形状和颜色,和其它按钮中的style属性用法相同;
  • selectedIcon属性:用来控制按钮被选择时的图标,默认图标是一个对号,它会覆盖按钮自身的图标;
    上面介绍的这些属性中,前两个属性是必选属性,其它属性都是可选属性。

2.2 ButtonSegment

和其它组件一样,ButtonSegment组件提供了相关的属性来控制自己,下面是常用的属性:

  • value属性:表示按钮的值,类似ID,用来区分不同的按钮;
  • icon属性:表示按钮的图标,当前按钮被选择时,它会被selectedIcon中的图标覆盖掉;
  • label属性:表示按钮上显示的文本,用来说明按钮的功能;
    上面介绍的这些属性中,第一个属性是必选属性,其它属性都是可选属性。当value属性的值与SegmentedButton中selected属性的值相等时,表示当前的按钮被选
    中了。该组件主要用来给SegmentedButton的segments属性赋值,稍后我们将通过示例代码来演示。

3. 代码与效果

3.1 示例代码

Set<int> selectedSet = {2};

enum Numbers {one,two,three,four}
Set<Numbers> multiSelectedSet = {Numbers.two,Numbers.three};

SegmentedButton(
  segments: const [
    ButtonSegment( label: Text("one"), icon: Icon(Icons.add), value: 1,),
    ButtonSegment( label: Text("tow"), icon: Icon(Icons.favorite), value: 2,),
    ButtonSegment( label: Text("three"), icon: Icon(Icons.do_not_disturb), value: 3,),
  ],
  selected: selectedSet,
  onSelectionChanged: (Set<int>newSelection){
    debugPrint("changed $newSelection");
    setState(() {
      selectedSet = newSelection;
    });
  },
),

SegmentedButton(
  segments: const [
    ButtonSegment( label: Text("one"), icon: Icon(Icons.add), value: Numbers.one,),
    ButtonSegment( label: Text("tow"), icon: Icon(Icons.favorite), value: Numbers.two,),
    ButtonSegment( label: Text("three"), icon: Icon(Icons.do_not_disturb), value: Numbers.three,),
    ButtonSegment( label: Text("three"), icon: Icon(Icons.do_not_disturb), value: Numbers.four,),
  ],
  multiSelectionEnabled: true,
  selected: multiSelectedSet,
  ///点击时切换按钮,如果是已经选择的就变成未选择
  onSelectionChanged: (Set<Numbers> newSelected) {
    debugPrint("changed $newSelected");
    setState(() {
      multiSelectedSet = newSelected;
    });
  },
)

上面的示例代码中演示了前面小节中介绍的各种属性,还有一些细节需要注意:代码中selected的类型和onSelectionChanged中参数的类型相同,都是Set<T>
型,这个T表示泛型,它需要和ButtonSegment中的value属性的类型相同。这样才能表示按钮被选择。代码中的T分别是int和枚举类型。

3.2 运行效果

上面的示例代码中演示了两个SegmentedButton,一个可以进行单选操作,另外一个可以进行多选操作,下面是示例程序的运行效果图,请大家参考。 020.png
效果图中按钮上面的文字就是label属性的值,未选择的按钮图标是icon属性的值,按钮被选择后会改变颜色,可以通过style属性控制,同时按钮的图标显示一个对号,
该对号覆盖了按钮原料的图标。

4. 内容总结

最后,我们对本章回的内容进行全面的总结:

  • SegmentedButton表示一组按钮,可以单选或者多选组内的按钮;
  • SegmentedButton组件需要和ButtonSegment组件一起配合使用;
  • SegmentedButton组件的selected属性是集合类型,使用时需要注意;
  • SegmentedButton组件实现了单选和多选按钮的功能,可以看作是这两种按钮的综合体;
    看官们,与"SegmentedButton组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

标签:ButtonSegment,分段,创建,SegmentedButton,value,按钮,组件,属性
From: https://blog.csdn.net/talk_8/article/details/140892964

相关文章

  • 使用 selenium 单击没有 id 的提交按钮
    我尝试使用提交功能单击提交按钮,但看不到结果。我要抓取的网站是Jntuh提交按钮有以下属性<inputtype="submit"value="Submit">我用过这个.execute脚本Resultbrowser.execute_script("""document.getElementById("myForm").onsubmit();......
  • 如何从系列(切片)创建 Dicom 卷?
    我有一系列Dicom文件(切片)。现在,我想从该系列创建一个dicom卷。我的理解是Dicom卷不仅仅是一堆dicom文件。那么,如何从堆栈创建dicom卷呢?有Python代码可以做到这一点吗?我的目的是研究创建体积数据的方法任何帮助将不胜感激你说的对,“DICOM卷”的概念并不仅......
  • Python中动态类和动态方法的创建与调用
    借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一。动态生成类的属性及其方法在某些情况可能要根据不同的参数来动态生成不同的实例方法、静态方法、类方法。下面的例子中则展示了如何动态地向类中添加属性和方法。importtypesclassPers......
  • Python中定义(创建)、调用函数及返回值
    1.定义(创建)函数要调用一个函数,首先要定义它。在Python中使用关键字def来定义一个函数。函数通常由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:def函数名(参数列表):函数体例如:defsayhello(): print('hello')最简单的函数:defm......
  • 【Dash】使用 HTML 和 CSS 创建图表
    一、StylingYourAppTheexamplesintheprevioussectionusedDashHTMLComponentstobuildasimpleapplayout,butyoucanstyleyourapptolookmoreprofessional.Thissectionwillgiveabriefoverviewofthemultipletoolsthatyoucanusetoenhanc......
  • 第一个Django工程创建及运行
    认识DjangoDjango是一个高级PythonWeb框架,它鼓励快速开发和简洁、实用的设计。它由经验丰富的开发人员构建,解决了Web开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费和开源的。快得离谱。Django旨在帮助开发人员尽快将应用程序从概念到......
  • 2、Qt- 简单窗口的创建与运行ui文件
    认识QWidget和QLabel初识pyqt6语法fromPyQt6.QtWidgetsimportQApplication,QWidget,QLabelimportsys#创建应用对象app=QApplication(sys.argv)#sys.argv是一个列表,其中包含命令行参数。第一个参数是脚本名称,其余参数是命令行参数。类似shell脚本中的$1,$2,......
  • 直播软件怎么开发,你还在为如何创建线程池发愁吗?
    直播软件怎么开发,你还在为如何创建线程池发愁吗?为什么要使用多线程提高响应速度:对于耗时操作,使用线程可以避免阻塞主线程,提高应用程序的响应速度。实现并行操作:在多CPU系统中,使用线程可以并行处理任务,提高CPU利用率。改善程序结构:将一个既长又复杂的进程分为多个线程,可以使其......
  • VUE动态路由和按钮的实现
    动态路由动态菜单//通过循环组件完成动态菜单<el-menuactive-text-color="#ffd04b"background-color="#545c64"class="el-menu-vertical-demo"text-color="#fff":collapse="isCollapse"routerdefault-activestyle="......
  • 我无法在 kaggle 中找到“帐户”选项卡..并且缺少创建 api 选项..有什么解决方案吗?
    我试图从kaggle访问Googlecolab中的数据集。但是我找不到帐户选项卡,因此我也无法在kaggle中创建api。我该怎么办?我希望在帐户选项卡中获得创建api选项。我尝试了很多视频,但没有人给出解决方案。是对的,Kaggle不再在“帐户”选项卡中提供API令牌的创建功能。......