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

相关文章

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U