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上输入异常 | 拼音输入过程回调问题相关推荐

  1. Linux在vi/vim编辑文件时(104键)键盘右边数字键输入异常解决方法

    出现的问题:当Linux在vi/vim编辑文件时,当输入i编辑文件时,发现用键盘(104键)右边数字键进行输入时输出的不是数字而是英文字母! 应按如下操作解决: 1用Xshell6(目前我用的Xshe ...

  2. Google 为什么以 Flutter 作为原生突破口?| 技术头条

    [CSDN 编者按]去年Google 推出了 Flutter ,其目标是为了解决移动中的两个重要问题:一是实现原生应用的性能和与平台的集成,二是提供一个多平台,可移植的 UI 工具包来支持高效的应用开 ...

  3. Flutter开发Flutter与原生OC、Java的交互通信-2(48)

    我们上一篇主要讲了Flutter与原生OC.Java的交互通信的机制:平台通道 只实现了Flutter 主动调用OC.Java的方向的通信.并没有实现OC.Java端主动调用Flutter的实现.这里 ...

  4. Flutter开发Flutter与原生OC、Java的交互通信-1(47)

    我的文章讲过:(0085)iOS开发之OC与JS交互高级用法(JavaScriptCore) 前言:我们知道OC 在UIWebView 加载 H5中,常常需要OC 与 H5 之间进行交互调用.采取的方 ...

  5. Flutter开发之ListView下拉刷新上拉加载更多(35)

    在Flutter开发之ListView组件(21) 文章中,我们了解了ListView组件的基本使用.但是数据比较少,没有涉及分页加载.而实际开发中,下拉刷新和分页加载几乎是所有APP的标配.在iOS ...

  6. 包红b2c模块 flutter与原生交互

    一.flutter提供的FlutterMethodChanel与原生(ios&android)进行交换 flutter与原生交互图: ios注册flutter调用通道 //oc 注册flutt ...

  7. android调用flutter aar_Flutter原生混合开发

    混合开发简介 使用Flutter从零开始开发App是一件轻松惬意的事情,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的.因此使用Flutter去统一Andro ...

  8. 苹果原生文字转语音播报

    1.CHiOSSpeech.h // // 文 件 名:CHiOSSpeech.h // // 版权所有:Copyright © 2018年 leLight. All rights reserved. ...

  9. 解决苹果无线鼠标、键盘或触控板无法被 Mac 识别的方法

    如何解决苹果无线鼠标.键盘或触控板无法被 Mac 识别的问题?macw小编带来了解决苹果无线鼠标.键盘或触控板无法被 Mac 识别的方法,希望能帮到你! 设备无法被 Mac 识别 如果您的鼠标.键盘或 ...

  10. iCloud Drive,简单实用的苹果原生云存储

    iCloud Drive,简单实用的苹果原生云存储 当前,各类网络云存储五花八门.数不胜数,Dropbox,One Drive,Google Drive等,各有优劣,让我这种有选择恐惧症的人相当抓狂. ...

最新文章

  1. Objective C内存管理之理解autorelease------面试题
  2. cvtvolor()关于HSV输出问题
  3. module 'thread' has no attribute
  4. java 内存区域中的栈
  5. Sitemesh 3 的使用及配置
  6. 性能测试一些相关的概念
  7. IntentService解析
  8. Nike Hyperdunk 2012 Men's Basketball Shoes Black/Gorge Green
  9. Linux下软件的安装与卸载
  10. P1589 - 【NOI2009】植物大战僵尸
  11. redis 数据结构笔记
  12. ubuntu怎么将Dash切换位bash
  13. java编写计算器的原理_Java语言开发的计算器的心得
  14. 预测模型| 2. Nomogram文献抄读 (2): 如何建立和解读癌症预后列线图
  15. html5在线画图工具,HTML5 Canvas画板画图工具 可定义笔刷和画布
  16. 苹果ipad怎么刷机_白苹果如何修复,为什么会出现白苹果
  17. 银河麒麟安装node
  18. 匈奴国王阿提拉:令整个欧洲发抖的上帝之鞭
  19. python适合小白学吗_有没有适合零基础小白学习的python课程?
  20. 看完了 vue-cli 源码,总结了这几个点

热门文章

  1. 大家的人工智能——学习路线总览
  2. USER_TAB_COLS,USER_TAB_COLUMNS,ALL_TAB_COLS,ALL_TAB_COLUMNS获取数据库元素的区别
  3. table.render 中 cols 属性 【【问题】】
  4. BPMS的市场与产品
  5. 我为什么放弃网易博客
  6. 应用锁(AppLocker)原理及代码实现
  7. QCPColorMap实现瀑布图
  8. c#语言中文编程下载,C#编程自学软件
  9. 我是80后程序员,我支持正版!
  10. phpstudy 403 forbidden