Flutter 苹果原生拼音键盘在TextField上输入异常 | 拼音输入过程回调问题
Flutter 正常文本回调通过onChange 处理, 也可以通过 监听TextEditingController 处理
监听TextEditingController
通过value.composing来判断,第一个判断是直接输入的,那就直接返回一个普通样式。第二个判断就是有输入未完成字符的,**value.composing.textInside(value.text)**获取到的就是输入未完成的字符,默认是添加了一个下划线的样式,类似苹果原生输入里面一个灰黑色的背景一样,这样就可以直接实现和原生中文键盘输入一样的效果。
所以 直接继承 TextEditingController 重写这个富文本方法即可处理
class ChangeTextEditingController extends TextEditingController {var completeText = '';// 有使用到其他方法可以直接添加到这里继承 使用 ChangeTextEditingController.fromValue(TextEditingValue value): super.fromValue(value);@overrideTextSpan buildTextSpan({BuildContext context, TextStyle style, bool withComposing}) {///拼音输入完成if (!value.composing.isValid || !withComposing) {if (completeText != value.text) {completeText = value.text;WidgetsBinding.instance.addPostFrameCallback((_) {notifyListeners();});}return TextSpan(style: style, text: text);}///返回输入样式,可自定义样式final TextStyle composingStyle = style.merge(const TextStyle(decoration: TextDecoration.underline),);return TextSpan(style: style, children: <TextSpan>[TextSpan(text: value.composing.textBefore(value.text)),TextSpan(style: composingStyle,text: value.composing.isValid && !value.composing.isCollapsed? value.composing.textInside(value.text): "",),TextSpan(text: value.composing.textAfter(value.text)),]);}
}
应用 : 在初始化页面或者是视图 initState 添加
// 初始化属性String lastInput = "";ChangeTextEditingController controller;@overridevoid initState() {super.initState();controller = ChangeTextEditingController.fromValue(TextEditingValue(text: widget.defaultContent,selection: TextSelection.fromPosition(TextPosition(affinity: TextAffinity.downstream,offset: widget.defaultContent.length),),),);controller.addListener(() {if (lastInput != controller.completeText) {lastInput = controller.completeText;///通知onChanged 回调。_onChange(controller.completeText);}});}
Flutter 苹果原生拼音键盘在TextField上输入异常 | 拼音输入过程回调问题相关推荐
- Linux在vi/vim编辑文件时(104键)键盘右边数字键输入异常解决方法
出现的问题:当Linux在vi/vim编辑文件时,当输入i编辑文件时,发现用键盘(104键)右边数字键进行输入时输出的不是数字而是英文字母! 应按如下操作解决: 1用Xshell6(目前我用的Xshe ...
- Google 为什么以 Flutter 作为原生突破口?| 技术头条
[CSDN 编者按]去年Google 推出了 Flutter ,其目标是为了解决移动中的两个重要问题:一是实现原生应用的性能和与平台的集成,二是提供一个多平台,可移植的 UI 工具包来支持高效的应用开 ...
- Flutter开发Flutter与原生OC、Java的交互通信-2(48)
我们上一篇主要讲了Flutter与原生OC.Java的交互通信的机制:平台通道 只实现了Flutter 主动调用OC.Java的方向的通信.并没有实现OC.Java端主动调用Flutter的实现.这里 ...
- Flutter开发Flutter与原生OC、Java的交互通信-1(47)
我的文章讲过:(0085)iOS开发之OC与JS交互高级用法(JavaScriptCore) 前言:我们知道OC 在UIWebView 加载 H5中,常常需要OC 与 H5 之间进行交互调用.采取的方 ...
- Flutter开发之ListView下拉刷新上拉加载更多(35)
在Flutter开发之ListView组件(21) 文章中,我们了解了ListView组件的基本使用.但是数据比较少,没有涉及分页加载.而实际开发中,下拉刷新和分页加载几乎是所有APP的标配.在iOS ...
- 包红b2c模块 flutter与原生交互
一.flutter提供的FlutterMethodChanel与原生(ios&android)进行交换 flutter与原生交互图: ios注册flutter调用通道 //oc 注册flutt ...
- android调用flutter aar_Flutter原生混合开发
混合开发简介 使用Flutter从零开始开发App是一件轻松惬意的事情,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的.因此使用Flutter去统一Andro ...
- 苹果原生文字转语音播报
1.CHiOSSpeech.h // // 文 件 名:CHiOSSpeech.h // // 版权所有:Copyright © 2018年 leLight. All rights reserved. ...
- 解决苹果无线鼠标、键盘或触控板无法被 Mac 识别的方法
如何解决苹果无线鼠标.键盘或触控板无法被 Mac 识别的问题?macw小编带来了解决苹果无线鼠标.键盘或触控板无法被 Mac 识别的方法,希望能帮到你! 设备无法被 Mac 识别 如果您的鼠标.键盘或 ...
- iCloud Drive,简单实用的苹果原生云存储
iCloud Drive,简单实用的苹果原生云存储 当前,各类网络云存储五花八门.数不胜数,Dropbox,One Drive,Google Drive等,各有优劣,让我这种有选择恐惧症的人相当抓狂. ...
最新文章
- Objective C内存管理之理解autorelease------面试题
- cvtvolor()关于HSV输出问题
- module 'thread' has no attribute
- java 内存区域中的栈
- Sitemesh 3 的使用及配置
- 性能测试一些相关的概念
- IntentService解析
- Nike Hyperdunk 2012 Men's Basketball Shoes Black/Gorge Green
- Linux下软件的安装与卸载
- P1589 - 【NOI2009】植物大战僵尸
- redis 数据结构笔记
- ubuntu怎么将Dash切换位bash
- java编写计算器的原理_Java语言开发的计算器的心得
- 预测模型| 2. Nomogram文献抄读 (2): 如何建立和解读癌症预后列线图
- html5在线画图工具,HTML5 Canvas画板画图工具 可定义笔刷和画布
- 苹果ipad怎么刷机_白苹果如何修复,为什么会出现白苹果
- 银河麒麟安装node
- 匈奴国王阿提拉:令整个欧洲发抖的上帝之鞭
- python适合小白学吗_有没有适合零基础小白学习的python课程?
- 看完了 vue-cli 源码,总结了这几个点
热门文章
- 大家的人工智能——学习路线总览
- USER_TAB_COLS,USER_TAB_COLUMNS,ALL_TAB_COLS,ALL_TAB_COLUMNS获取数据库元素的区别
- table.render 中 cols 属性 【【问题】】
- BPMS的市场与产品
- 我为什么放弃网易博客
- 应用锁(AppLocker)原理及代码实现
- QCPColorMap实现瀑布图
- c#语言中文编程下载,C#编程自学软件
- 我是80后程序员,我支持正版!
- phpstudy 403 forbidden