MURALI KRISHNAN MT
MURALI KRISHNAN MT

Reputation: 195

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

I want to edit a form only after 3 minutes from the last edit. I am getting a last update time as string from api when loading that form for eg: 11:53:09. So i want to show submit form button only after 3 minutes from the last update time. Otherwise i want to show a Text that form can be edited after 3 minutes. How to acheive this functionality.

Upvotes: 1

Views: 2827

Answers (3)

KD_
KD_

Reputation: 42

you can parse you datetime in DateTime.parse() and then you can use it like this

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

in addition to this you can also use future delay to update you button enable variable to update every second.

Upvotes: 2

Bimal Paudel
Bimal Paudel

Reputation: 67

Hello there you can achieve this by using simple logic, here is the basic code for this implementation:

    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;
          });
        });
      }
    }

Upvotes: 2

aki
aki

Reputation: 86

You can parse the last update time to DateTime and compare it with DateTime.now()

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

in your widget add this

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

Upvotes: 1

Related Questions