How do I add some value if time is expired in flutter?

Viewed 32

I want to add a tax if the given period is expired for the next expiration date. I use;

final now = DateTime.now();
final expirationDate = e['expired'].toDate();
final bool isExpired = expirationDate.isBefore(now);

After this, the tax adds in every minute until the next expiration date. How to solve this problem. My adding tax code like this;

 var amount = int.parse(e['amount']);
 var tax = amount + 4000;
 var amountWithTax = tax.toString();

this my code sofar;

StreamBuilder(
      stream: FirebaseFirestore.instance
          .collection('Data')
          .doc(uid)
          .collection('fine')
          .where('mode', isEqualTo: 'notpaid')
          .snapshots(),
      builder: ((context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        }
        var datetime = DateTime.now();
        
        var ds = snapshot.data!.docs;
        final now = DateTime.now();
        for (int i = 0; i < ds.length; i++) {
          final expirationDate = ds[i]['expired'].toDate();
          final bool isExpired = expirationDate.isBefore(now);
          print(isExpired);
          //not expired
          if (isExpired == false) {
            return Card(
              color: Colors.green,
              child: Text(ds[i]['description']),
            );
          } else {
            final Timestamp timestamp1 = ds[i]['expired'] as Timestamp;
            final DateTime dateTime1 = timestamp1.toDate();
            final nextExpireDate = dateTime1.add(Duration(days: 7));
            final expiredMinutes = nextExpireDate.difference(now).inDays;

            if (expiredMinutes == -1) {
              var amount = int.parse(ds[i]['amount']);
              var withTax = amount + 1000;
              var fineWithTax = withTax.toString();
              print(expiredMinutes);
              print(fineWithTax);
              FirebaseFirestore.instance
                  .collection('Data')
                  .doc(uid)
                  .collection('fine')
                  .doc(ds[i].id)
                  .update({
                'status': 1,
                'paybefore': dateTime1.add(const Duration(days: 7)),
               'amount': fineWithTax.toString(),
                
              });
            }

            return Card(
              child: Text(ds[i]['amount']),
            );

The error of this code is, that tax is added every second.

1 Answers

I think you are looking from .difference.

final now = DateTime.now();
final expirationDate = e['expired'].toDate();
final bool isExpired = expirationDate.isBefore(now);

if (isExpired) {
  final nextExpireDate = DateTime.now().add(Duration(days: 2));
  final expiredMinutes = nextExpireDate.difference(now).inMinutes;
  //include tax
  print(expiredMinutes);
}
Related