计时器格式化程序从右到左颤动

2024-01-19

我必须连续输入文本字段我希望用户在分钟文本字段中输入,两次输入后自动转移到左侧文本字段,即小时文本字段
我要这个:- 首先我输入 2 然后显示 00:02 第二次我输入 6 然后显示 00:26 第三次输入3然后显示02:63 4 我输入1然后显示26:31

我在这里附上我的代码:

formate: 00:00
I want this:- 
first I input 2 then it shows 00:02
second I input 6 then it shows 00:26
third I input 3 then it shows 02:63
four I input 1 then it  shows 26:31
if (goalData.goalType == "du") ...[
                Container(
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(10),
                    color: AppColors.grayLightColor.withOpacity(0.3),
                  ),
                  margin: const EdgeInsets.symmetric(horizontal: 18),
                  padding: const EdgeInsets.only(bottom: 5),
                  height: 40,
                  child: Builder(builder: (context) {
                    return Row(
                      children: [
                        Flexible(
                          flex: 1,
                          child: TextField(
                            onChanged: (value) {
                              if (value.length == 4) {
                                myFocusNode.requestFocus();
                              }
                            },
                            autofocus: true,
                            controller: progressInHour,
                            textAlign: TextAlign.center,
                            keyboardType: TextInputType.numberWithOptions(
                                decimal:
                                    goalData.goalType == "dt" ? true : false,
                                signed: true),
                            decoration: InputDecoration(
                                border: InputBorder.none,
                                hintText:
                                    (goalData.goalType == "du") ? "HH" : ''),
                            inputFormatters: [
                              if (goalData.goalType == "dt") ...{
                                FilteringTextInputFormatter.allow(
                                    RegExp(r'^\d*\.?\d{0,2}')),
                              } else if (goalData.goalType == "du") ...{
                                formatterTimeHours,
                                FilteringTextInputFormatter(
                                    RegExp("2[0-4]|1[0-9]|[1-9]"),
                                    allow: true)
                              } else ...{
                                FilteringTextInputFormatter(RegExp("[0-9]"),
                                    allow: true)
                              },
                            ],
                          ),
                        ),
                        const Text(":"),
                        Flexible(
                          child: TextField(
                            focusNode: myFocusNode,
                            onChanged: (value) {
                              print("this is our value $value");
                              if (int.parse(value) > 60) {
                                AppUtil.showToastMessage(
                                    ctx, "Minutes can't be more than 60");
                              }
                            },
                            controller: progress,
                            textAlign: TextAlign.center,
                            keyboardType: TextInputType.numberWithOptions(
                                decimal:
                                    goalData.goalType == "dt" ? true : false,
                                signed: true),
                            decoration: InputDecoration(
                                border: InputBorder.none,
                                hintText:
                                    (goalData.goalType == "du") ? "MM" : ''),
                            inputFormatters: [
                              if (goalData.goalType == "dt") ...{
                                FilteringTextInputFormatter.allow(
                                    RegExp(r'^\d*\.?\d{0,2}')),
                              } else if (goalData.goalType == "du") ...{
                                formatterTimeMin,
                              } else ...{
                                FilteringTextInputFormatter(RegExp("[0-9]"),
                                    allow: true)
                              },
                            ],
                          ),
                        ),
                      ],
                    );
                  }),
                ),
              ],
var formatterTimeHours = MaskedInputFormatter('####');
    var formatterTimeMin = MaskedInputFormatter('##',
        allowedCharMatcher: RegExp(r'^[0-5]?[0-9]$'));

佛的包装


import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class TimeInputField extends StatefulWidget {
  TextEditingController controller = TextEditingController();

  TimeInputField({Key? key, required this.controller}) : super(key: key);

  @override
  _TimeInputFieldState createState() => _TimeInputFieldState();
}

class _TimeInputFieldState extends State<TimeInputField> {
  String hrCounter = '00';
  String minCounter = '00';

  String temp = "";
  @override
  void initState() {
    // widget.controller.selection = TextSelection.fromPosition(
    //     TextPosition(offset: widget.controller.text.length));
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      autofocus: true,
      textAlign: TextAlign.center,
      controller: widget.controller,
      keyboardType: const TextInputType.numberWithOptions(decimal: false),
      inputFormatters: [
        LengthLimitingTextInputFormatter(9),
      ],
      decoration: InputDecoration(border: InputBorder.none, hintText: "HH:MM"),
      onChanged: (val) {
        String y = "";
        switch (val.length) {
          case 0:
            setState(() {
              hrCounter = "00";
              minCounter = "00";
            });
            break;
          case 1:
            setState(() {
              minCounter = "0" + val;
              temp = val;
              widget.controller.value = widget.controller.value.copyWith(
                text: hrCounter + ":" + minCounter,
                selection: const TextSelection.collapsed(offset: 5),
              );
            });
            break;
          default:
            setState(() {
              for (int i = 1; i <= val.length - 1; i++) {
                y = y + val.substring(i, i + 1);
              }
              y = y.replaceAll(":", "");
              val = y.substring(0, 2) + ":" + y.substring(2, 4);
              temp = val;
              widget.controller.value = widget.controller.value.copyWith(
                text: val,
                selection: const TextSelection.collapsed(offset: 5),
              );
            });
            break;
        }
      },
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计时器格式化程序从右到左颤动 的相关文章

  • java中将函数作为参数传递

    我正在熟悉 Android 框架和 Java 并希望创建一个通用的 NetworkHelper 类 该类将处理大部分网络代码 使我能够从中调用网页 我按照developer android com 上的这篇文章创建了我的网络类 http d
  • 如何访问对话框中的 EditText 字段?

    如何访问对话框中的 EditText 字段 将 EditText 小部件放入对话框中
  • 在 docker 容器内创建 android 模拟器时出现“sh: 1: file: not found”

    我正在尝试在 docker 容器内创建一个 android 模拟器 但遇到了一些问题 SDK 更新和 AVD 创建成功 我尝试创建模拟器 出现以下错误 emulator avd test 22 no skin no audio no win
  • 如何突出显示在 Textview android 中单击的单词

    我正在创建一个应用程序 在其中我从 EditText 中的用户获取输入 现在 单击按钮后 输入的字符串将显示在 TextView 中 现在我的问题是 当用户单击任何单个单词时 我会使该单词在 TextView 中突出显示 例如 用户输入 你
  • 无法创建变体“android-manifest-metadata”

    我在 Playstore 上上传了我的应用程序 bundle aab 方法 它在 android 6 0 上运行正常 没有错误 但在 android 7 0 设备上出现错误 并且无法运行该应用程序 我使用了 Gradle 构建类路径 3 1
  • 应用程序可能在其主线程上做了太多工作 - Android

    您好 我正在开发一个 Android 应用程序 当我尝试从我的应用程序发送电子邮件时遇到此错误 我在后台发送邮件而不使用基于意图这个链接 http www oodlestechnologies com blogs Send Mail in
  • 我什么时候应该使用 CGM 设备组和主题?

    我正在考虑将 Google Cloud Messaging 合并到我的应用程序中 我想向与用户关联的所有设备发送消息 乍一看 它看起来像 GCM 的设备群组消息传递 https developers google com cloud mes
  • 在android中点击地图获取坐标

    我正在尝试做这样的事情 我有一个地图活动 当用户点击地图时 它会显示该位置的坐标 我已经重写了 onclick 方法 但它甚至没有被调用 任何想法 public class MapPoint extends MapActivity impl
  • PinnedHeader Google 加上 GridView?

    背景 Google google 应用程序可以很好地查看 亮点 类别中的图像 对于该屏幕上的每个部分 他们制作了一个标题 其中包含可单击的文本和一个用于选择该部分的所有照片的按钮 对于每个部分 他们还以网格状方式显示照片 它是这样的 这是另
  • Android 时间选择器在分钟滚动时自动更改小时

    例如 当我在 TimePicker 上滚动分钟时 在将分钟滚动到 59 后 小时会自动滚动到 7 因此新时间将为 07 59 同样的方式 如果我有 07 59 并且我将分钟滚动到 00 小时将自动滚动到 8 所以时间将是 08 00 此逻辑
  • 使用 Android Exoplayer 调整 Dash 流音量

    我正在尝试设置一个搜索栏来控制 exoplayer 流式破折号实例的级别 我正在使用的设置是演示项目的修改版本 并且无法确定我应该尝试影响搜索栏输出的哪个元素 即如何正确使用 MSG SET VOLUME 等 任何意见将不胜感激 我正在寻找
  • 如何在具有多种字体大小的 TextView 中调整行高?

    我有一个包含 Spannable 字符串的 TextView 该字符串包含一堆文本 其中第一个单词的字体大小是字符串其余部分的两倍 问题在于 由于第一个字的大小增加 第一行和第二行之间的行间距比后续行之间的行间距大得多 http img s
  • AsyncTask:DoInBackground(String ...)与DoInBackground(Params ...)冲突?

    当尝试使用时Async task要执行 HTTP post 我得到以下信息 ASyncTask DoInBackground String clashes with DoInBackground Params in Android os A
  • 如何在 Android 上通过 RTMP 进行流式传输?

    我正在尝试在远程服务器上播放视频文件 视频格式为flv 服务器为Flash Media Server3 5 我将通过 RTMP 连接到服务器并使用 Android Media Player 实现视频文件的播放 真的吗 可能吗 任何帮助都是我
  • 在 Android KitKat 中接收彩信

    所以这个视频Android 4 4 短信 API http www youtube com watch v mdq0R2WQssQ DevBytes 解释了 KitKat 中 SMS API 的最新变化 他们还提供了示例项目的链接 http
  • Android:禁用 1.5 纸杯蛋糕动画过渡

    长话短说 如何禁用活动之间的屏幕转换 如果您愿意的话 我们实现了自己的选项卡处理程序 现在它正在选项卡之间进行转换 这看起来很俗气 谢谢 Chris See android content Intent FLAG ACTIVITY NO A
  • 无法使用 Alarmmanager 定期在后台进行工作

    我想按小时在后台调用一项服务 第一个问题是警报管理器工作不顺利 计时器很糟糕 有时早有时晚 第二个问题是 RemoteServiceException Context startForegroundService 然后没有调用 Servic
  • Pebble 应用程序设置中的开发人员选项

    I am following this manual http www sitepoint com pebble watch development javascript and I don t have the Developers Op
  • 在 Android 中将列表传递给另一个 Activity

    我已经创建了一个列表 并希望将该列表传递给另一个活动 但当我创建意图时 我在 putExtra 语句上收到错误 只是想知道是否有任何简单的方法来传递字符串列表而不是单个字符串 Thanks private List
  • Android:如何获取所有可用意图过滤器的列表?

    我搜索了 Android 文档 但由于某些疯狂的原因 我无法找到所有可用意图过滤器的列表 我正在寻找一个意图过滤器 它可以执行诸如通过广播接收器通知我特定活动 例如浏览器或电子邮件 已启动或位于前台之类的操作 有人能帮我吗 PackageE

随机推荐