有没有人可以帮助弄清楚如何设置一个文本字段或文本表单字段小部件的时间输入在hh:mm:ss格式?
格式应该在字段中实时显示,因此在用户键入时前导零将被替换。
例如,如果我们需要输入1 hour 59 minutes and 27 seconds,它需要如下工作:
- 00:00:00 -输入前的文本提示
- 00:00:01 -开始键入并键入1
- 00:00:15 -类型5
- 00:01:59 -类型9
- 00:15:92 -键入2(这里可以接受92秒,输入完成后可以转换)
- 01:59:27 -类型7
它以类似的方式在Android内置的时钟应用程序中的计时器上工作。
我试图使用mask_text_input_formatter包,但它不工作,因为我需要它。另外,我不想使用计时器。
import 'package:flutter/services.dart';
import 'package:mask_text_input_formatter/mask_text_input_formatter.dart';
class TimeInputField extends StatefulWidget {
TimeInputField({Key key}) : super(key: key);
@override
_TimeInputFieldState createState() => _TimeInputFieldState();
}
class _TimeInputFieldState extends State<TimeInputField> {
TextEditingController _txtTimeController = TextEditingController();
final MaskTextInputFormatter timeMaskFormatter =
MaskTextInputFormatter(mask: '##:##:##', filter: {"#": RegExp(r'[0-9]')});
@override
Widget build(BuildContext context) {
return TextFormField(
controller: _txtTimeController,
keyboardType: TextInputType.numberWithOptions(decimal: false),
decoration: InputDecoration(
hintText: '00:00:00',
),
inputFormatters: <TextInputFormatter>[
timeMaskFormatter
// Not sure if it can be done with RegExp or a custom class here instead
],
);
}
}
任何帮助都非常感谢!
5条答案
按热度按时间qvtsj1bj1#
我在文本字段中使用了TextInputFormatter而不是onChanged。这允许访问旧值并根据新字符是添加还是删除来格式化新输入。它还允许使用RegExp只接受数字。这将是解决方案:
kxeu7u2r2#
我还使用了文本输入法来避免太多的if
4dbbbstv3#
在TextFormField或TextField中使用hh:mm格式的抖动时间输入格式化程序,不使用拾取器,具有最大小时数和最大分钟数:
jpfvwuh44#
更新代码:
ubbxdtey5#
我有非常简单的逻辑来解决时间问题
试用看看