Flutter在鍵盤的上方加一個完成按鈕

有些情況下,輸入框在輸入鍵盤彈出后, 需要在鍵盤的上方顯示一個toolbar , 然后 toolbar 上面一個完成按鈕,點完成按鈕把鍵盤關閉。?

如圖:?

直接上代碼,這樣寫的好處是,把?TextField 給封裝了, 這樣使用起來更方便一些,

更多的屬性,自己可以在上面擴展。?

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class KeyboardDoneInput extends StatefulWidget {final TextEditingController controller;final ValueChanged<String>? onSubmitted;const KeyboardDoneInput({Key? key,required this.controller,this.onSubmitted,}) : super(key: key);@overrideState<KeyboardDoneInput> createState() => _KeyboardDoneInputState();
}class _KeyboardDoneInputState extends State<KeyboardDoneInput> {late final FocusNode _focusNode = FocusNode();OverlayEntry? _overlayEntry;@overridevoid initState() {super.initState();_focusNode.addListener(_handleFocusChange);}void _handleFocusChange() {if (_focusNode.hasFocus) {_insertOverlay();} else {_removeOverlay();}}void _insertOverlay() {if (_overlayEntry != null) return;final overlay = Overlay.of(context);_overlayEntry = OverlayEntry(builder: (context) => Positioned(left: 0,right: 0,bottom: MediaQuery.of(context).viewInsets.bottom,child: Material(color: Colors.transparent,child: Container(padding: const EdgeInsets.symmetric(horizontal: 20),color: Colors.grey[100],child: Row(children: [const Spacer(),CupertinoButton(padding: EdgeInsets.zero,child: const Text("完成",style: TextStyle(fontSize: 16, color: Colors.black),),onPressed: () {_focusNode.unfocus();widget.onSubmitted?.call(widget.controller.text);},),],),),),),);overlay.insert(_overlayEntry!);}void _removeOverlay() {_overlayEntry?.remove();_overlayEntry = null;}@overridevoid dispose() {_focusNode.dispose();_removeOverlay();super.dispose();}@overrideWidget build(BuildContext context) {return TextField(controller: widget.controller,focusNode: _focusNode,keyboardType: TextInputType.number,textAlign: TextAlign.center,inputFormatters: [FilteringTextInputFormatter.digitsOnly],decoration: const InputDecoration(border: OutlineInputBorder(),contentPadding: EdgeInsets.symmetric(horizontal: 8, vertical: 4),),onSubmitted: widget.onSubmitted,);}
}

調用如下,?

KeyboardDoneInput(controller: _controller, onSubmitted: (value) {},
)

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

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

相關文章

Flink SQL 將kafka topic的數據寫到另外一個topic里面

-- 創建源表&#xff0c;使用 RAW 格式接收原始 JSON 數據 CREATE TABLE source_kafka ( id STRING, data STRING ) WITH ( connector kafka, topic source_kafka-topic, properties.bootstrap.servers master01:9092, properties.group.id flink-kafka-group, scan.startu…

618開售僅1小時,李佳琦直播間加購同增超10%

5月13日晚8點&#xff0c;天貓618大促正式拉開帷幕&#xff0c;李佳琦直播間首日“爆款美妝節”公布首輪戰報&#xff1a;首小時加購GMV同比增長超10%&#xff0c;可復美、珀萊雅等品牌超60萬件國貨爆品秒售罄。 據統計&#xff0c;今年李佳琦直播間618首日預售共上架近500件爆…

【輕松學 C:編程小白的大冒險】— 16 函數的定義與調用

在編程的藝術世界里&#xff0c;代碼和靈感需要尋找到最佳的交融點&#xff0c;才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里&#xff0c;我們將共同追尋這種完美結合&#xff0c;為未來的世界留下屬于我們的獨特印記。 【輕松學 C&#xff1a;編程小白的大冒險…

多模態大語言模型arxiv論文略讀(七十四)

UniQA: Unified Vision-Language Pre-training for Image Quality and Aesthetic Assessment ?? 論文標題&#xff1a;UniQA: Unified Vision-Language Pre-training for Image Quality and Aesthetic Assessment ?? 論文作者&#xff1a;Hantao Zhou, Longxiang Tang, Ru…

Flutter - UIKit開發相關指南 - 線程和異步

線程和異步 編寫異步代碼 Dart采用單線程執行模型,支持Isolates(在另一個線程上運行Dart代碼)、事件循環和異步編程。除非生成一個Isolates&#xff0c;否則Dart代碼將在主UI線程中運行&#xff0c;并由事件循環驅動。Flutter的事件循環相當于iOS的主線程上的RunLoop。 Dart…

【愚公系列】《Manus極簡入門》038-數字孿生設計師:“虛實映射師”

&#x1f31f;【技術大咖愚公搬代碼&#xff1a;全棧專家的成長之路&#xff0c;你關注的寶藏博主在這里&#xff01;】&#x1f31f; &#x1f4e3;開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主&#xff01; &#x1f…

西門子WinCC Unified PC的GraphQL使用手冊

TIA V20版本&#xff1a;添加用戶 添加角色&#xff0c;并充分授權&#xff0c;尤其是GraphQL的讀寫權限。 通過SIMATIC Runtime Manager啟動wincc unifi工程。 打開瀏覽器&#xff0c;訪問本地的https://localhost/graphql/&#xff0c;運行正常如圖&#xff1a; 連接外…

開源長期主義:淺談DeepSeek技術主張與早期論文

開源、長期主義與DeepSeek的技術愿景 ©作者|格林 來源|神州問學 導入&#xff1a;Deepseek在早期就開源了許多優秀的指令模型與對話模型&#xff0c;并發布了多篇論文。以下&#xff0c;我們將基于Deepseek在早期發布的6篇論文&#xff0c;來梳理Deepseek公司的技術路徑與…

TTS-Web-Vue系列:Vue3實現內嵌iframe文檔顯示功能

&#x1f5bc;? 本文是TTS-Web-Vue系列的新篇章&#xff0c;重點介紹如何在Vue3項目中優雅地實現內嵌iframe功能&#xff0c;用于加載外部文檔內容。通過Vue3的響應式系統和組件化設計&#xff0c;我們實現了一個功能完善、用戶體驗友好的文檔嵌入方案&#xff0c;包括加載狀態…

Elasticsearch索引設計與調優

一、分片策略設計 1.?分片容量規劃 單分片容量建議30GB(日志場景可放寬至100GB),避免超大分片引發查詢延遲。分片總數計算公式:總數據量 / 30GB 1.2(20%余量應對未來增長)。主分片數創建后不可修改,副本分片數支持動態調整。2.?分片分布優化 PUT logs-2025 { &qu…

Spring AI 集成 Mistral AI:構建高效多語言對話助手的實戰指南

Spring AI 集成 Mistral AI&#xff1a;構建高效多語言對話助手的實戰指南 前言 在人工智能應用開發領域&#xff0c;選擇合適的大語言模型&#xff08;LLM&#xff09;與開發框架至關重要。Mistral AI 憑借其高效的多語言模型&#xff08;如 Mistral-7B、Mixtral-8x7B 等&am…

從新手到高手:全面解析 AI 時代的「魔法咒語」——Prompt

引言&#xff1a;AI 時代的「語言煉金術」 在人工智能技術突飛猛進的今天&#xff0c;我們正在經歷一場堪比工業革命的生產力變革。從聊天機器人到圖像生成&#xff0c;從數據分析到自動化寫作&#xff0c;AI 模型正在重塑人類與信息交互的方式。而在這一切背后&#xff0c;隱…

MySQL 8.0安裝(壓縮包方式)

MySQL 8.0安裝(壓縮包方式) 下載安裝包并解壓 下載 https://dev.mysql.com/downloads/mysql/可關注“后端碼匠”回復“MySQL8”關鍵字獲取 解壓&#xff08;我解壓到D:\dev\mysql-8.4.5-winx64目錄下&#xff09; 創建mysql服務 注意&#xff0c;這步之前一定要保證自己電…

免費Ollama大模型集成系統——Golang

Ollama Free V2 Web 功能實現&#xff1a;界面交互與后端邏輯 一、Web 界面概述 Ollama Free V2 的 Web 界面提供了豐富的交互功能&#xff0c;包括模型選擇、圖片上傳、歷史記錄查看等。界面使用 Bootstrap 進行布局&#xff0c;結合 JavaScript 實現動態交互。 二、前端界…

【AI】人工智能數據標注細分和商業機會

一、數據標注的常見方法 數據標注是為人工智能模型訓練提供高質量標簽的過程&#xff0c;根據數據類型&#xff08;圖像、文本、音頻、視頻等&#xff09;的不同&#xff0c;標注方法也有所差異&#xff1a; 1. 圖像標注 分類標注&#xff1a;為圖像分配類別標簽&#xff08…

lanqiaoOJ 652:一步之遙 ← 擴展歐幾里得定理

【題目來源】 https://www.lanqiao.cn/problems/652/learning/ 【題目背景】 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 【題目描述】 從昏迷中醒來&#xff0c;小明發現自己被關在X星球的廢礦車里。礦車停在平直的廢棄…

HTTP / HTTPS 協議

目錄 一、前言&#xff1a; 二、Fiddler 抓包工具&#xff1a; 三、http 協議&#xff1a; 1、http 請求&#xff1a; 1.&#xff08;1&#xff09;請求行&#xff1a; 1、(2) 請求頭&#xff1a; 1、(3) 請求正文: 2、http 響應&#xff1a; 2、(1) 狀態碼&#x…

使用泛型加載保存數據

文章速覽 泛型泛型概述定義優點 實例加載數據保存數據 一個贊&#xff0c;專屬于你的足跡&#xff01; 泛型 泛型概述 泛型&#xff08;Generics&#xff09;是 C# 中一種重要的編程特性&#xff0c;它允許程序員編寫靈活且類型安全的代碼。通過使用泛型&#xff0c;可以創建…

Redis內存淘汰策略和過期鍵刪除策略有哪些?

Redis 提供 8 種內存淘汰策略&#xff0c;以下是詳細解析及場景建議&#xff1a; 一、核心策略解析 noeviction (默認策略) 機制&#xff1a;內存滿時拒絕新寫入操作&#xff0c;返回錯誤優勢&#xff1a;絕對數據安全場景&#xff1a;金融交易系統、醫療數據存儲 allkeys-lr…

【C/C++】自定義類型:結構體

文章目錄 前言自定義類型&#xff1a;結構體1.結構體類型的聲明1.1 結構體回顧1.1.1 結構的聲明 1.1.2 結構體變量的創建和初始化1.2 結構的特殊聲明1.3 結構的自引用 2.結構體內存對齊2.1 對?規則2.2 為什么存在內存對齊&#xff1f;2.3 修改默認對?數 3. 結構體傳參4.結構體…