如何在 Flutter 中检查时间是否在 3 分钟后?镖

How to check time is after 3 min from a time or not in Flutter | Dart

我只想在上次编辑后 3 分钟后编辑表单。在为例如 11:53:09 加载该表单时,我从 api 获取最后更新时间作为字符串。所以我只想在上次更新时间 3 分钟后显示提交表单按钮。否则我想显示 form can be edited after 3 minutes 的文本。如何实现这个功能。

您可以将最后更新时间解析为DateTime并与DateTime.now()

进行比较
updatedTime = 11:53:09
DateFormat format = new DateFormat("hh:mm:ss");
updatedTime = format.format(updatedTime);

在您的小部件中添加此

DateTime.now() - updatedTime < 3 ? Text("form can be edited after 3 minutes") : Form()

您可以在 DateTime.parse() 中解析日期时间,然后您可以像这样使用它

DateTime.now().isAfter(lastEditedDateTime.add(const Duration(minutes: 3)));

除此之外,您还可以使用未来延迟来更新您按钮启用变量以每秒更新。

您好,您可以使用简单的逻辑来实现这一点,这里是此实现的基本代码:

    import 'package:flutter/material.dart';

    class LoginScreen extends StatefulWidget {
      static const String id = 'login_screen';

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

    class _LoginScreenState extends State<LoginScreen> {
      final formKey = GlobalKey<FormState>();

      bool _canSubmit = true;

      @override
      Widget build(BuildContext context) {
        return Scaffold(
            body: Form(
          key: formKey,
          child: Stack(
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(30.0),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: <Widget>[
                    TextFormField(
                      onChanged: (value) {},
                      obscureText: false,
                      style: TextStyle(
                          color: Colors.black54,
                          fontSize: 16.0,
                          fontWeight: FontWeight.w700),
                      decoration: InputDecoration(
                          labelStyle: TextStyle(color: Colors.black54),
                          focusColor: Colors.black54,
                          filled: true,
                          enabledBorder: UnderlineInputBorder(
                            borderRadius: BorderRadius.circular(10),
                            borderSide: BorderSide.none,
                          ),
                          focusedBorder: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(10),
                            borderSide: BorderSide(color: Colors.black54),
                          ),
                          labelText: "Email"),
                      validator: (value) {
                        if (value.isEmpty ||
                            !RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$')
                                .hasMatch(value)) {
                          return "Enter Correct Email Address";
                        } else {
                          return null;
                        }
                      },
                    ),
                    SizedBox(
                      height: 10.0,
                    ),
                    Column(
                      crossAxisAlignment: CrossAxisAlignment.end,
                      children: <Widget>[
                        TextFormField(
                          onChanged: (value) {},
                          style: TextStyle(
                              color: Colors.black54,
                              fontSize: 16.0,
                              fontWeight: FontWeight.w700),
                          decoration: InputDecoration(
                              labelStyle: TextStyle(color: Colors.black54),
                              focusColor: Colors.black54,
                              filled: true,
                              enabledBorder: UnderlineInputBorder(
                                borderRadius: BorderRadius.circular(10),
                                borderSide: BorderSide.none,
                              ),
                              focusedBorder: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(10),
                                borderSide: BorderSide(color: Colors.black54),
                              ),
                              labelText: "Password"),
                          validator: (value) {
                            if (value.isEmpty) {
                              return "Enter Valid Password";
                            } else {
                              return null;
                            }
                          },
                        )
                      ],
                    ),
                    SizedBox(
                      height: 10.0,
                    ),
                    Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          IconButton(
                              constraints:
                                  BoxConstraints(maxHeight: 36, maxWidth: 36),
                              icon: Icon(
                                Icons.lock,
                                size: 20,
                                color: Colors.black54,
                              ),
                              onPressed: _canSubmit
                                  ? () {
                                      if (formKey.currentState.validate()) {
                                        FocusManager.instance.primaryFocus
                                            ?.unfocus();
                                        submitPressed();
                                      }
                                    }
                                  : null)
                        ]),
                  ],
                ),
              ),
            ],
          ),
        ));
      }

      Future<void> submitPressed() async {
        setState(() {
          _canSubmit = false;
        });

        Future.delayed(Duration(minutes: 3), () {
          setState(() {
            _canSubmit = true;
          });
        });
      }
    }