比较成熟有效的方案是在键盘弹出的上方悬浮一个按钮,点击可以关闭键盘。当然了,这种问题也有对应的库可以解决,我使用的是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 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|