Flutter陌生而又熟悉组件-Semantics

2023-11-02 10:10

本文主要是介绍Flutter陌生而又熟悉组件-Semantics,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概括

Semantics可能是Flutter中比较陌生的组件,如果不是遇见过,开发中大多不会想到使用Semantics。
构造如下:

  Semantics({Key? key,Widget? child,bool container = false,bool explicitChildNodes = false,bool excludeSemantics = false,bool? enabled,bool? checked,bool? selected,bool? toggled,bool? button,bool? slider,bool? link,bool? header,bool? textField,bool? readOnly,bool? focusable,bool? focused,bool? inMutuallyExclusiveGroup,bool? obscured,bool? multiline,bool? scopesRoute,bool? namesRoute,bool? hidden,bool? image,bool? liveRegion,int? maxValueLength,int? currentValueLength,String? label,String? value,String? increasedValue,String? decreasedValue,String? hint,String? onTapHint,String? onLongPressHint,TextDirection? textDirection,SemanticsSortKey? sortKey,SemanticsTag? tagForChildren,VoidCallback? onTap,VoidCallback? onLongPress,VoidCallback? onScrollLeft,VoidCallback? onScrollRight,VoidCallback? onScrollUp,VoidCallback? onScrollDown,VoidCallback? onIncrease,VoidCallback? onDecrease,VoidCallback? onCopy,VoidCallback? onCut,VoidCallback? onPaste,VoidCallback? onDismiss,MoveCursorHandler? onMoveCursorForwardByCharacter,MoveCursorHandler? onMoveCursorBackwardByCharacter,SetSelectionHandler? onSetSelection,VoidCallback? onDidGainAccessibilityFocus,VoidCallback? onDidLoseAccessibilityFocus,Map<CustomSemanticsAction, VoidCallback>? customSemanticsActions,}) : this.fromProperties(...)

细数一下大致有54个参数?????
在这里插入图片描述
翻译过来就是:一个widget,用以描述widget树的具体语义。使用辅助工具、搜索引擎和其他语义分析软件来确定应用程序的含义。
看完之后更迷惑?
Semantics中文翻译为语义学、语义论,主要起辅助作用,多用于分析屏幕上的内容,就是将程序翻译成大白话,可以帮助有视觉障碍的人士更好的使用软件。

Semantics从另一方面讲是开发者最熟悉的组件?
在这里插入图片描述
上述各种属性在常用的各种组件中多多少少都有涉及,基本上开发者经常使用的组件都在Semantics上找到定位。

使用

属性解释
属性含义
child子组件
container是否在引入一个新的语义节点
explicitChildNodes是否强制显示子Widget的语义信息
excludeSemantics是否排除子Widget中的语义
enabled是否可用
checkedCheckBox是否被勾选
selected是否选中
toggledtoggle是否切换
button是否是Button
slider是否是slider
link是否是link
header是否是header
textField是否是textField
readOnly是否制度
focusable是否可聚焦
focused是否聚焦
inMutuallyExclusiveGroup是否兼容
obscured是否模糊
multiline是否多行
scopesRoute是否是声明路由名
namesRoute是否包含路由的语义标签
hidden是否隐藏
image是否是image
liveRegion是否活跃
maxValueLength最大长度
currentValueLength当前长度
labelWidget的文本描述
value
increasedValue增值
decreasedValue减值
hint提示
onTapHint点击提示
onLongPressHint长按提示
textDirection文本方向
sortKey排序
tagForChildren子节点标签
onTap点击事件
onLongPress长按事件
onScrollLeft左滑事件
onScrollRight右滑事件
onScrollUp上滑事件
onScrollDown下滑事件
onIncrease增值事件
onDecrease减值事件
onCopycopy
onCutcut
onPastepaste
onDismissdismiss
onMoveCursorForwardByCharacter字符光标前移
onMoveCursorBackwardByCharacter字符光标后移
onSetSelection选择事件
onDidGainAccessibilityFocus获取焦点
onDidLoseAccessibilityFocus失去焦点
customSemanticsActions自定义事件

翻译的不准确,见谅!

分类
  • Semantics
    一个widget,用以描述widget树的具体语义。使用辅助工具、搜索引擎和其他语义分析软件来确定应用程序的含义。
  • MergeSemantics
    合并其后代语义的widget。
  • ExcludeSemantics
    删除其后代所有语义的widget
使用
          Flexible(child: Semantics(label: MaterialLocalizations.of(context).selectYearSemanticsLabel,excludeSemantics: true,button: true,child: Container(height: _subHeaderHeight,child: InkWell(onTap: widget.onTitlePressed,...

解释InkWell语言,即读出屏幕中此按钮是什么样按钮

        // dayWidgetchild: Semantics(label: '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}',selected: isSelectedDay,excludeSemantics: true,child: dayWidget,),...dayItems.add(dayWidget);

这是Flutter自带的日历中一段代码,dayWidget是日历中每一天的组件,最后将一个月中所有日期添加进dayItems列表中集中显示,则呈现出某月的日历。 label: ‘${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}’,是解释了这一天是哪一天,excludeSemantics:true,则表示删除其后代所有语义的widget,若还有子控件还有语义,则不承认,无效。

...return MergeSemantics(child: Semantics(enabled: widget.enabled,button: true,child: InkWell(onTap: widget.enabled ? handleTap : null,canRequestFocus: widget.enabled,mouseCursor: effectiveMouseCursor,child: item,),));...

这是PopupMenuItem部分代码,MergeSemantics即将子widget语义合并,若PopupMenuItem中还有item,则合为同一个。

  @overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',showSemanticsDebugger:true,...

若showSemanticsDebugger设为false和true,则会出现不同的视图:

在这里插入图片描述在这里插入图片描述
明显可以看出当showSemanticsDebugger为true的时候,视图明显不一样,虽不够美观,但更加容易识别和操作,这也就解释了为什么Semantics通常用于帮助视觉有障碍的人士。

文中很多属性解释不清楚,使用方法描述不清晰,归根结底还是不熟悉,以后还需多多探索。截图中数据均为假数据,不可较真。

这篇关于Flutter陌生而又熟悉组件-Semantics的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329888

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

Flutter Button使用

Material 组件库中有多种按钮组件如ElevatedButton、TextButton、OutlineButton等,它们的父类是于ButtonStyleButton。         基本的按钮特点:         1.按下时都会有“水波文动画”。         2.onPressed属性设置点击回调,如果不提供该回调则按钮会处于禁用状态,禁用状态不响应用户点击。

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

JavaEE应用的组件

1、表现层组件:主要负责收集用户输入数据,或者向客户显示系统状态。最常用的表现层技术是JSP,但JSP并不是唯一的表现层技术。 2、控制器组件:对于JavaEE的MVC框架而言,框架提供一个前端核心控制器,而核心控制器负责拦截用户请求,并将用户请求转发给用户实现的控制器组件。而这些用户实现的控制器则负责处理调用业务逻辑方法,处理用户请求。 3、业务逻辑组件:是系统的核心组件,实现系统的业务逻辑

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c