| 
                         比较成熟有效的方案是在键盘弹出的上方悬浮一个按钮,点击可以关闭键盘。当然了,这种问题也有对应的库可以解决,我使用的是flutter_keyboard_actions来解决了这个问题。因为在Android端我发现了部分输入法的兼容问题,所以只针对IOS做了处理。大家可以看一下前后对比图,具体实现代码可以参考flutter_keyboard_actions的文档和我的项目代码: 
  
  
当然平台差异不仅仅是这么多,比如IOS自带侧滑返回等。具体我们可以去查看调用TargetPlatform枚举类的代码。 
如果你觉得这样真麻烦,我给你支个大招,修改ThemeData的platform,指定一个平台。 
- class MyApp extends StatelessWidget { 
 -    
 -   @override 
 -   Widget build(BuildContext context) { 
 -      
 -     return MaterialApp( 
 -       theme: ThemeData( 
 -         platform: TargetPlatform.android 
 -       ), 
 -       ... 
 -     ); 
 -   } 
 - } 
 
  
其次就是使用TextInputType.number在IOS中弹起的键盘没有小数点符号。在输入金额类型数据时,需要将keyboardType属性设置为TextInputType.numberWithOptions(decimal:  true)。 
6.keyboardType 
keyboardType属性主要含义为弹起的键盘类型,并不代表输入数据的类型。 
而在Android开发中,在EditText中设置android:inputType不仅可以指定弹起的键盘类型,同时也确定了输入数据的类型,也就是内置了数据的格式校验。Flutter中并没有后者,所以可能一开始你是TextInputType.number,但是在输入法中切换成中文键盘,一样可以输入中文字符。所以数据的校验需要我们使用inputFormatters自己处理。 
比如TextInputType.phone时可以使用WhitelistingTextInputFormatter 白名单校验,只允许输入0~9: 
- TextField( 
 -       keyboardType: TextInputType.phone, 
 -       inputFormatters: [WhitelistingTextInputFormatter(RegExp("[0-9]"))] 
 -     ) 
 
  
输入密码时可以使用BlacklistingTextInputFormatter 黑名单校验,除去中文字符: 
- TextField( 
 -       keyboardType: TextInputType.text, 
 -       inputFormatters: [BlacklistingTextInputFormatter(RegExp("[u4e00-u9fa5]"))] 
 -     ) 
 
  
输入小数时,可以自定义TextInputFormatter来限制输入小数格式: 
- TextField( 
 -       keyboardType: TextInputType.numberWithOptions(decimal: true), 
 -       inputFormatters: [UsNumberTextInputFormatter()] 
 -     ) 
 - //来源:https://www.cnblogs.com/yangyxd/p/9639588.html 
 - class UsNumberTextInputFormatter extends TextInputFormatter { 
 -   static const defaultDouble = 0.001; 
 -   static double strToFloat(String str, [double defaultValue = defaultDouble]) { 
 -     try { 
 -       return double.parse(str); 
 -     } catch (e) { 
 -       return defaultValue; 
 -     } 
 -   } 
 -   @override 
 -   TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { 
 -     String value = newValue.text; 
 -     int selectionIndex = newValue.selection.end; 
 -     if (value == ".") { 
 -       value = "0."; 
 -       selectionIndex++; 
 -     } else if (value != "" && value != defaultDouble.toString() && strToFloat(value, defaultDouble) == defaultDouble) { 
 -       value = oldValue.text; 
 -       selectionIndex = oldValue.selection.end; 
 -     } 
 -     return new TextEditingValue( 
 -       text: value, 
 -       selection: new TextSelection.collapsed(offset: selectionIndex), 
 -     ); 
 -   } 
 - } 
 
  
7.InkWell                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |