Flutter 按鈕組件 TextButton 詳解

目錄

1. 引言

2. TextButton 的基本用法

3. 主要屬性

4. 自定義按鈕樣式

4.1 修改文本顏色

4.2 添加背景色

4.3 修改按鈕形狀和邊距

4.4 樣式定制

5.?高級應用技巧

5.1?圖標+文本組合

5.2??主題統一配置

5.3 動態交互

6. 性能優化與注意事項

6.1?點擊區域優化

6.2?避免過度重建

6.3?無障礙支持

?6.4 點擊無響應

相關推薦


1. 引言

????????在 Flutter 中,TextButton 是一種無背景的按鈕,適用于次要或輕量級操作。它的外觀更加簡潔,僅包含文字,適合用作輔助性操作,如“取消”或“了解更多”。相比 ElevatedButtonTextButton 沒有陰影和背景色,更加簡約。

2. TextButton 的基本用法

? ? TextButton 需要 onPressed 事件和 child 組件。

TextButton(onPressed: () {print('TextButton 被點擊');},child: Text('點擊我'),
)

? ? 如果 onPressed 設為 null,按鈕會變為不可點擊狀態。

TextButton(onPressed: null,child: Text('不可點擊'),
)

3. 主要屬性

屬性說明
onPressed按鈕點擊時的回調函數
onLongPress長按時觸發的回調
child按鈕的內容,如 TextIcon
style自定義按鈕樣式

示例:

TextButton(onPressed: () {},onLongPress: () => print('長按按鈕'),child: Text('長按試試'),
)

4. 自定義按鈕樣式

4.1 修改文本顏色

TextButton(style: TextButton.styleFrom(primary: Colors.blue, // 文字顏色),onPressed: () {},child: Text('自定義顏色'),
)

4.2 添加背景色

TextButton(style: TextButton.styleFrom(backgroundColor: Colors.blue,primary: Colors.white,),onPressed: () {},child: Text('帶背景色的 TextButton'),
)

4.3 修改按鈕形狀和邊距

TextButton(style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20),),padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),),onPressed: () {},child: Text('圓角按鈕'),
)

4.4 樣式定制

TextButton(style: ButtonStyle(// 文字顏色(包括禁用狀態)foregroundColor: WidgetStateProperty.resolveWith<Color>((Set<WidgetState> states) {if (states.contains(WidgetState.disabled)) return Colors.grey;return Colors.blue;},),// 背景色backgroundColor: WidgetStateProperty.all(Colors.transparent),// 水波紋顏色overlayColor: WidgetStateProperty.all(Colors.blue.withOpacity(0.1)),// 內邊距padding: WidgetStateProperty.all(EdgeInsets.symmetric(horizontal: 16)),// 邊框形狀shape: WidgetStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(8),),),),onPressed: () {},child: Text('自定義樣式'),)

5.?高級應用技巧

5.1?圖標+文本組合

          TextButton.icon(icon: Icon(Icons.add_box_rounded, size: 20),label: Text('添加好友'),onPressed: () {},style: ButtonStyle(padding: WidgetStateProperty.all(EdgeInsets.symmetric(vertical: 12, horizontal: 20),),),

5.2??主題統一配置

MaterialApp(theme: ThemeData(textButtonTheme: TextButtonThemeData(style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Colors.purple),textStyle: MaterialStateProperty.all(TextStyle(fontWeight: FontWeight.bold)),),),),
)

5.3 動態交互

// 點擊縮放動畫
TextButton(onPressed: () {},child: AnimatedContainer(duration: Duration(milliseconds: 200),transform: isPressed ? Matrix4.diagonal3Values(0.95, 0.95, 1) : null,child: Text('動態按鈕'),),
)

6. 性能優化與注意事項

6.1?點擊區域優化

????????默認最小尺寸為 48x48(Material規范),可通過?minimumSize?調整:

style: ButtonStyle(minimumSize: MaterialStateProperty.all(Size(100, 50)),

6.2?避免過度重建

????????對靜態按鈕使用?const?優化:

const TextButton(onPressed: _handleClick,child: Text('靜態按鈕'),
)

6.3?無障礙支持

const TextButton(onPressed: _handleClick,child: Text('靜態按鈕'),
)

?6.4 點擊無響應

  • 檢查?onPressed?是否為 null

  • 確認父組件未被?IgnorePointer?或?AbsorbPointer?包裹

  • 檢測是否被其他組件覆蓋(如透明層)

相關推薦

Flutter 基礎組件 Text 詳解-CSDN博客文章瀏覽閱讀1.1k次,點贊42次,收藏25次。Text 組件是 Flutter 中最常用的 UI 組件之一,用于顯示文本內容。它支持樣式自定義、多行顯示、溢出控制等功能,適用于各種文本場景。本文將詳細介紹 Text 組件的使用方式及其重要參數。 https://shuaici.blog.csdn.net/article/details/146067083Flutter 基礎組件 Scaffold 詳解-CSDN博客文章瀏覽閱讀494次,點贊21次,收藏23次。Scaffold 主要在 MaterialApp 主題下使用,它是實現Material Design基本視覺布局結構的Widget,它為應用提供了一個可定制的結構,包括 AppBar(應用欄)、Drawer(側邊欄)、FloatingActionButton(浮動按鈕)、BottomNavigationBar(底部導航欄) 等。本文將詳細解析 Scaffold 的功能和使用方法。 https://shuaici.blog.csdn.net/article/details/146067470

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73130.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73130.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73130.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

std::ranges::views::split, lazy_split, std::ranges::split_view, lazy_split_view

std::ranges::views::split, std::ranges::split_view C20 中引入的用于分割范圍&#xff08;range&#xff09;的組件&#xff0c;允許將輸入范圍按特定分隔符或條件分割成多個子范圍。以下是詳細說明和示例&#xff1a; 基本概念 1. 功能 分割范圍&#xff1a;將輸入范圍&…

c++ constraints與concepts使用筆記

c constraints與concepts使用筆記 1. 模板參數缺乏約束的問題2. Concepts 基本概念3. Concept 的定義與使用4. requires 表達式詳解5. requires 從句 vs requires 表達式完整示例&#xff1a;約束矩陣運算 1. 模板參數缺乏約束的問題 問題分析&#xff1a; 傳統模板參數沒有語…

Qt | 屏幕截圖實現

01 全局截屏控件 1. 鼠標右鍵彈出菜單。 2. 支持全局截屏。 3. 支持局部截屏。 4. 支持截圖區域拖動。 5. 支持圖片另存為。 演示 點擊按鈕即可截圖 源碼: 通過網盤分享的文件:screenwidget屏幕截圖 鏈接: https://pan.baidu.com/s/1PZfQlUXNIoZKEfEtLNV2jQ?pwd=5jsg 提…

2.angular指令

初級使用可以查看視頻 參考手冊 注意 像ng-class,ng-value,ng-href等這些&#xff0c;很多都可以直接用class“{{}}” 原生寫&#xff0c;為啥還出這些指令&#xff0c;是因為原生的比如剛一進頁面就先出現表達式了&#xff0c;瀏覽器走到這里的時候才去解析&#xff0c;給用戶…

CTFshow 【WEB入門】信息搜集 【VIP限免】 web1-web17

CTFshow 【 WEB入門】、【VIP限免】 web1 ----源碼泄露 首先第一步&#xff0c;看源代碼 web2----前臺JS繞過 簡單點擊查看不了源代碼&#xff0c;可以強制查看 比如 Ctrl Shift ICtrl U或者在url前加一個view-source: view-source:http://79999ca1-7403-46da-b25b-7ba9…

java 手搓一個http工具類請求傳body

import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets;public class HttpUtil {/*** JSON請求發起*/public static String httpJsonRequest(String requestUrl, String requestJson) {String responseJson &…

Spring boot3-WebClient遠程調用非阻塞、響應式HTTP客戶端

來吧&#xff0c;會用就行具體理論不討論 1、首先pom.xml引入webflux依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 別問為什么因為是響應式....…

寫了一個二叉樹構造函數和畫圖函數,方便debug

代碼 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…

QT:串口上位機

創建工程 布局UI界面 設置名稱 設置數據 設置波特率 波特率默認9600 設置數據位 數據位默認8 設置停止位 設置校驗位 調整串口設置、接收設置、發送設置為Group Box 修改配置 QT core gui serialport 代碼詳解 mianwindow.h 首先在mianwindow.h當中定義一個串口指…

【Pandas】pandas Series asof

Pandas2.2 Series Time Series-related 方法描述Series.asfreq(freq[, method, how, …])用于將時間序列數據轉換為指定的頻率Series.asof(where[, subset])用于返回時間序列中指定索引位置的最近一個非缺失值 pandas.Series.asof pandas.Series.asof 方法用于返回時間序列…

沉浸式CSS學習路徑

好的!我將以魔法學院成長故事為框架,為您設計一套沉浸式CSS學習路徑。以下是敘事化學習提綱: 第一卷:像素學徒的覺醒 章節1:被封印的魔法書 發現HTML的"素顏"本質,通過<!DOCTYPE html>解除網頁封印用style標簽打開CSS魔法書,學會給文字穿上color斗篷和…

使用netlify部署github的vue/react項目或本地的dist,國內也可以正常訪問

提供簡潔的部署流程和豐富功能&#xff0c;如自定義域名、自動構建和服務器端功能。通過連接到 Git 倉庫實現持續部署&#xff0c;每次推送代碼都會自動構建和發布&#xff0c;支持無服務器函數&#xff0c;允許在前端項目中實現后端邏輯&#xff0c;提供直觀的用戶界面來管理和…

復現 MoGe

要復現 MoGe&#xff0c;以下給出一般性的復現訓練過程步驟示例&#xff09;的訓練過程&#xff0c;你可以參考以下步驟&#xff1a; 環境準備 安裝必要的深度學習框架&#xff0c;如 TensorFlow 或 PyTorch&#xff0c;以及相關的庫&#xff0c;例如用于數據處理的 NumPy、Pan…

Redis-緩存穿透擊穿雪崩

1. 穿透問題 緩存穿透問題就是查詢不存在的數據。在緩存穿透中&#xff0c;先查緩存&#xff0c;緩存沒有數據&#xff0c;就會請求到數據庫上&#xff0c;導致數據庫壓力劇增。 解決方法&#xff1a; 給不存在的key加上空值&#xff0c;防止每次都會請求到數據庫。布隆過濾器…

如何在自己的網站接入API接口獲取數據?分步指南與實戰示例

將第三方API接入自己的網站是獲取實時數據、擴展功能的重要手段&#xff08;如展示商品、同步訂單、用戶登錄等&#xff09;。以下是完整的接入流程與關鍵實踐&#xff0c;以微店API為例&#xff0c;適用于多數開放平臺。 一、準備工作&#xff1a;注冊與權限申請 注冊開發者…

刷leetcode hot100--動態規劃3.12

第一題乘積max子數組[1h] emmmm感覺看不懂題解 線性dp【計劃學一下acwing&#xff0c;挨個做一下】 線性動態規劃 相似題解析 最長上升子序列 最大上升子序列和 最大連續子段和 乘積最大子數組_嗶哩嗶哩_bilibili 比較奇怪的就是有正負數和0&#xff0c;如何處理&#xff1f…

Pytortch深度學習網絡框架庫 torch.no_grad方法 核心原理與使用場景

在PyTorch中&#xff0c;with torch.no_grad() 是一個用于臨時禁用自動梯度計算的上下文管理器。它通過關閉計算圖的構建和梯度跟蹤&#xff0c;優化內存使用和計算效率&#xff0c;尤其適用于不需要反向傳播的場景。以下是其核心含義、作用及使用場景的詳細說明&#xff1a; 一…

postgresql 數據庫使用

目錄 索引 查看索引 創建 刪除索引 修改數據庫時區 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 創建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…

為什么大模型網站使用 SSE 而不是 WebSocket?

在大模型網站&#xff08;如 ChatGPT、Claude、Gemini 等&#xff09;中&#xff0c;前端通常使用 EventSource&#xff08;Server-Sent Events, SSE&#xff09; 來與后端對接&#xff0c;而不是 WebSocket。這是因為 SSE 更適合類似流式文本生成的場景。下面我們詳細對比 SSE…

TDengine 數據對接 EXCEL

簡介 通過配置使用 ODBC 連接器&#xff0c;Excel 可以快速訪問 TDengine 的數據。用戶可以將標簽數據、原始時序數據或按時間聚合后的時序數據從 TDengine 導入到 Excel&#xff0c;用以制作報表整個過程不需要任何代碼編寫過程。 前置條件 準備以下環境&#xff1a; TDen…