Flutter 边框按钮:OutlinedButton 完全手册与设计最佳实践

目录

1. 引言

2. OutlinedButton 的基本用法

3. 主要属性

3.1 核心属性详解

3.2 ButtonStyle 子属性详解 (styleFrom/copyWith)

状态响应优先级说明

4. 自定义按钮样式

4.1 修改边框颜色和文本颜色

4.2 修改按钮形状

4.3 修改按钮大小

4.4 集中演示

5. 结论

相关推荐


1. 引言

        在 Flutter 中,OutlinedButton 是一种带有边框但无背景色的按钮,适用于强调次要操作。它相比 ElevatedButton 少了背景色,相比 TextButton 多了一个边框,适用于不希望 UI 过于突出的场景,如“取消”按钮或次要操作按钮。

2. OutlinedButton 的基本用法

    OutlinedButton 需要 onPressed 事件和 child 组件。

OutlinedButton(onPressed: () {print('OutlinedButton 被点击');},child: Text('取消'),
)

        如果 onPressed 设为 null,按钮会变为不可点击状态。

OutlinedButton(onPressed: null,child: Text('不可点击'),
)

3. 主要属性

3.1 核心属性详解

属性/参数类型默认值说明示例值/用法
onPressedVoidCallback?null点击回调函数,设为 null 时按钮禁用onPressed: () => print('Clicked')
childWidget-按钮内容组件child: Text('Submit')
child: Icon(Icons.save)
styleButtonStyle?OutlinedButton.styleFrom按钮样式配置入口见下方 ButtonStyle 子属性详解
autofocusboolfalse是否自动获取焦点autofocus: true
statesControllerMaterialStatesController?null按钮状态控制器(高级用法)配合 MaterialStatesController 管理按钮状态

3.2 ButtonStyle 子属性详解 (styleFrom/copyWith)

属性类型默认值作用说明常用示例
foregroundColorMaterialStateProperty<Color?>跟随主题 (labelLarge)控制文字/图标颜色foregroundColor: Colors.blue
foregroundColor: Colors.red.shade800
backgroundColorMaterialStateProperty<Color?>Colors.transparent背景颜色(建议半透明)backgroundColor: Colors.white.withOpacity(0.9)
sideMaterialStateProperty<BorderSide?>BorderSide(color: dividerColor)边框样式(颜色/宽度)side: BorderSide(color: Colors.grey, width: 1.5)
shapeMaterialStateProperty<OutlinedBorder?>RoundedRectangleBorder按钮形状(圆角/特殊形状)shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10))
shape: CircleBorder()
paddingMaterialStateProperty<EdgeInsetsGeometry?>EdgeInsets.symmetric(horizontal: 16)内边距控制padding: EdgeInsets.all(12)
padding: EdgeInsets.only(left: 20)
minimumSizeMaterialStateProperty<Size?>Size(64, 36)最小尺寸(保证点击区域)minimumSize: Size(100, 40)
overlayColorMaterialStateProperty<Color?>主题自动计算点击/悬停时的覆盖颜色(水波纹效果颜色)overlayColor: MaterialStateProperty.all(Colors.blue.withOpacity(0.1))

状态响应优先级说明

  1. 禁用状态 (onPressed: null) 会覆盖所有其他样式

  2. 状态顺序权重:pressed > hovered > focused > disabled

  3. 使用 MaterialStateProperty.resolveWith 实现条件样式:

4. 自定义按钮样式

4.1 修改边框颜色和文本颜色

OutlinedButton(style: OutlinedButton.styleFrom(primary: Colors.blue, // 文字颜色side: BorderSide(color: Colors.blue, width: 2), // 边框颜色),onPressed: () {},child: Text('自定义边框颜色'),
)

4.2 修改按钮形状

OutlinedButton(style: OutlinedButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20),),),onPressed: () {},child: Text('圆角按钮'),
)

4.3 修改按钮大小

OutlinedButton(style: OutlinedButton.styleFrom(minimumSize: Size(200, 50),),onPressed: () {},child: Text('大按钮'),
)

4.4 集中演示

            OutlinedButton(onPressed:null,// onPressed: _isDisabled ? null : _handleClick, // 禁用状态style: OutlinedButton.styleFrom(foregroundColor: Colors.blue, // 文本/图标颜色backgroundColor: Colors.white, // 背景色side: BorderSide(color: Colors.grey), // 边框样式shape: RoundedRectangleBorder( // 形状控制borderRadius: BorderRadius.circular(8),),padding: EdgeInsets.symmetric(vertical: 12, horizontal: 24), // 内边距),child: Row(mainAxisSize: MainAxisSize.min,children: [Icon(Icons.download),SizedBox(width: 8),Text('Download'),],),)

5. 结论

    OutlinedButton 适用于需要按钮但不希望其过于突出的场景。通过 style 属性可以自定义颜色、边框、形状等。同时也要遵循一些重要设计原则:

  1. 视觉一致性:边框颜色应与文本颜色协调

  2. 对比度保障:禁用状态需要保持至少 3:1 的对比度

  3. 平台适配

    • Material Design:推荐使用 1px 边框

    • iOS 风格:推荐使用 0.8px 边框 + 圆角半径 10.0

相关推荐

Flutter 按钮组件 ElevatedButton 详解-CSDN博客文章浏览阅读841次,点赞20次,收藏20次。本文详细描述 ElevatedButton 是 Flutter 中常见的按钮组件,适用于强调操作。通过 style 属性可以灵活地修改背景色、形状、大小等。掌握 ElevatedButton 的使用可以帮助开发者创建更美观的交互界面。 https://shuaici.blog.csdn.net/article/details/146067694Flutter 按钮组件 TextButton 详解-CSDN博客文章浏览阅读1.8k次,点赞60次,收藏62次。TextButton 适用于不需要强调的按钮操作,如取消、返回或辅助功能。通过 style 属性可以自定义颜色、形状、背景等。掌握 TextButton 的使用,可以帮助开发者创建更加灵活和简洁的 UI 交互体验。 https://shuaici.blog.csdn.net/article/details/146068020

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Node.js入门笔记4---fs 目录操作】

Node.js入门笔记4 Node.js---fs 目录操作一、目录操作1.fs.mkdir()&#xff1a;创建目录。异步&#xff0c;非阻塞。创建单个目录创建多个目录创建目前之前需要确认是否存在&#xff1a; 2. fs.mkdirSync()&#xff1a;用于创建一个新的目录。异步&#xff0c;非阻塞。3.fs.rmd…

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”&#xff0c;而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验&#xff0c;今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…

【软考-架构】5.3、IPv6-网络规划-网络存储-补充考点

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 IPv6网络规划与设计建筑物综合布线系统PDS&#x1f4af;考试真题第一题第二题 磁盘冗余阵列网络存储技术其他考点&#x1f4af;考试真题第一题第二题 IPv6 网络规划与设计…

数据结构------线性表(顺序表)

一、线性表顺序存储详解 &#xff08;一&#xff09;线性表核心概念 1. 结构定义 // 数据元素类型 typedef struct person {char name[32];char sex;int age;int score; } DATATYPE;// 顺序表结构 typedef struct list {DATATYPE *head; // 存储空间基地址int tlen; …

SVN学习笔记

svn:版本控制软件 解决&#xff1a;1.协作开发 2.远程开发 3.版本回退 服务端软件&#xff1a; VisualSVN http://www.visualsvn.com 客户端软件:Tortoisesvn http://tortoisesvn.net/downloads 1.checkout(检出) 第一查更新数据到本地&#xff0c; 2.update&#xf…

uniapp-x js 限制

1.String(str) 不允许&#xff0c;android模拟室报错&#xff0c;找不到String 2.JSON.parse不接受泛类型 export const genData function<T> (initData:T) : T {return JSON.parse<T>(JSON.stringify(initData))!;//不可以&#xff0c;必须明确类型 } error: …

PyTorch使用-张量的创建

文章目录 张量的创建1. 安装 PyTorch2. 基本创建方式2.1 torch.tensor 根据指定数据创建张量2.2. torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量2.3. 指定类型的张量创建2.3.1. torch.IntTensor&#xff1a;创建整数类型张量2.3.2. torch.FloatTensor&#xff…

基于asp.net实现的连锁餐厅收银系统[包运行成功+永久免费答疑辅导]

基于ASP.NET实现的连锁餐厅收银系统背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、技术背景 ASP.NET框架的普及与优势&#xff1a; ASP.NET是微软开发的一种用于构建Web应用程序的框架&#xff0c;它基于.NET Framework&#xff0c;提供了丰富的类库和开发工具…

PyTorch 深度学习实战(11):强化学习与深度 Q 网络(DQN)

在之前的文章中&#xff0c;我们介绍了神经网络、卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;、Transformer 等多种深度学习模型&#xff0c;并应用于图像分类、文本分类、时间序列预测等任务。本文将介绍强化学习的基本概念&#xff0…

92.HarmonyOS NEXT开发学习路径与最佳实践总结:构建高质量应用

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT开发学习路径与最佳实践总结&#xff1a;构建高质量应用 文章目录 HarmonyOS NEXT开发学习路径与最佳实践总结&#xff1a;构建高质…

HarmonyOS-应用程序框架基础

应用程序框架与应用模型的区别 应用框架可以看做是应用模型的一种实现方式&#xff0c;开发人员可以用应用模型来描述应用程序的结构和行为的描述&#xff0c;然后使用应用程序框架来实现这些描述。 应用模型 应用模型是一个应用程序的模型&#xff0c;它是一种抽象的描述&a…

审批工作流系统xFlow

WorkFlow-审批流程系统 该项目为完全开源免费项目 可用于学习或搭建初始化审批流程系统 希望有用的小伙伴记得点个免费的star gitee仓库地址 仿钉钉飞书工作审批流系统 介绍 前端技术栈: vue3 ts vite arcodesign eslint 后端技术栈:springbootspring mvc mybatis mavenmysq…

数据传输对象 DTO

1. DTO 数据传输对象&#xff08;DTO, Data Transfer Object&#xff09;是一种设计模式&#xff0c;用于在不同系统或应用层之间封装和传输数据。它通常用于解耦领域模型&#xff08;如数据库实体&#xff09;和外部接口&#xff08;如API请求/响应&#xff09;&#xff0c;避…

本地算力部署大模型详细流程(二)

1、前景回顾 上一篇我们通过ollama本地部署了一个DeepSeek&#xff0c;因为没有前端操作页面&#xff0c;我们只能使用cmd的方式和deepseek对话体验感并不是很好&#xff0c;下面我们通过Docker部署一个前端页面&#xff08;Open WebUI&#xff09; Open WebUI地址&#xff1a;…

django+vue3实现前后端大文件分片下载

效果&#xff1a; 大文件分片下载支持的功能&#xff1a; 展示目标文件信息提高下载速度&#xff1a;通过并发请求多个块&#xff0c;可以更有效地利用网络带宽断点续传&#xff1a;支持暂停后从已下载部分继续&#xff0c;无需重新开始错误恢复&#xff1a;单个块下载失败只…

matlab中如何集成使用python

在 MATLAB 中集成使用 Python 可以通过调用 Python 脚本或函数来实现。MATLAB 提供了 py 模块来直接调用 Python 代码。以下是一个简单的示例&#xff0c;展示如何在 MATLAB 中调用 Python 函数。 示例&#xff1a;在 MATLAB 中调用 Python 函数 1. 编写 Python 函数 首先&a…

ICMP、UDP以及IP、ARP报文包的仲裁处理

在之前的章节中&#xff0c;笔者就UDP、ICMP、IP、ARP、MAC层以及巨型帧等做了详细介绍以及代码实现及仿真&#xff0c;从本章节开始&#xff0c;笔者将就各个模块组合在一起&#xff0c;实现UDP协议栈的整体收发&#xff0c;在实现模块的整体组合之前&#xff0c;还需要考虑一…

【大模型学习】第十九章 什么是迁移学习

目录 1. 迁移学习的起源背景 1.1 传统机器学习的问题 1.2 迁移学习的提出背景 2. 什么是迁移学习 2.1 迁移学习的定义 2.2 生活实例解释 3. 技术要点与原理 3.1 迁移学习方法分类 3.1.1 基于特征的迁移学习(Feature-based Transfer) 案例说明 代码示例 3.1.2 基于…

基于大模型的分泌性中耳炎全流程预测与治疗管理研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与创新点 二、分泌性中耳炎概述 2.1 疾病定义与特征 2.2 发病原因与机制 2.3 疾病危害与影响 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 选择大模型预测分…

【NLP 38、实践 ⑩ NER 命名实体识别任务 Bert 实现】

去做具体的事&#xff0c;然后稳稳托举自己 —— 25.3.17 数据文件&#xff1a; 通过网盘分享的文件&#xff1a;Ner命名实体识别任务 链接: https://pan.baidu.com/s/1fUiin2um4PCS5i91V9dJFA?pwdyc6u 提取码: yc6u --来自百度网盘超级会员v3的分享 一、配置文件 config.py …