'Format Exception Error Double INVALID IN New-Transaction class

When supply value in input field double and hit button ADD NEW transaction it gives me Error Exception occur double Invalid

The idea of this project is This is a project about expenses user supply two value item name and price of the item and this item will add in a list and show on the screen is a list Everything is going well but only one error or exception

import 'package:flutter/material.dart';

class NewTransaction extends StatelessWidget {
  //NewTransaction({Key? key}) : super(key: key);

  //@override
  //State<NewTransaction> createState() => _NewTransactionState();
  final Function addTx;
  final titleController = TextEditingController();
  final amountController = TextEditingController();
  NewTransaction(this.addTx, {Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 10,
      child: Container(
        padding: const EdgeInsets.all(10),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: [
            TextField(
              decoration: const InputDecoration(
                  labelText: 'Enter Title',
                  labelStyle: TextStyle(
                    fontSize: 25,
                  )),
              // onChanged: (value) {
              //   inputtitle = value;
              // },
              controller: titleController,
            ),
            TextField(
              decoration: const InputDecoration(
                  labelText: 'Enter Amount',
                  labelStyle: TextStyle(fontSize: 25)),
              //One of this method to save value in a field but we try another method
              // onChanged: (value) {
              //   inputamount = value;
              // },
              controller: amountController,
            ),
            TextButton(
                onPressed: () {
                  //using lisnter mentod i confirm this way my value is save or not
                  // print(inputtitle);
                  // print(inputamount);
                  // print(titleController.text);
                  addTx(
                    titleController.text,
                    double.parse(amountController.text),
                  );
                },
                child: Text('Add Transaction',
                    style: TextStyle(color: Colors.purple)))
          ],
        ),
      ),
    );
  }
}

Format Exception Error: Invalid Double

User Transaction class

import 'package:flutter/widgets.dart';
import '../modals/transactions.dart';
import 'new_transaction.dart';
import 'transaction_list.dart';

class UserTransactions extends StatefulWidget {
  const UserTransactions({Key? key}) : super(key: key);

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

class _UserTransactionsState extends State<UserTransactions> {
  final List<TranSaction> _userTransactions = [
    TranSaction(
      id: 't1',
      title: 'New Shoes',
      amount: 69.99,
      date: DateTime.now(),
    ),
    TranSaction(
      id: 't2',
      title: 'Weekly Groceries',
      amount: 16.53,
      date: DateTime.now(),
    ),
  ];

  void _addNewTransaction(String txTitle, double txAmount) {
    final newTx = TranSaction(
      title: txTitle,
      amount: txAmount,
      date: DateTime.now(),
      id: DateTime.now().toString(),
    );

    setState(() {
      _userTransactions.add(newTx);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        NewTransaction(_addNewTransaction),
        TransactionList(_userTransactions),
      ],
    );
  }
}
import 'package:budget/modals/transactions.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

class TransactionList extends StatefulWidget {
  const TransactionList(List<TranSaction> userTransactions, {Key? key})
      : super(key: key);

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

class _TransactionListState extends State<TransactionList> {
  final List<TranSaction> _userTransacton = [
    TranSaction(
        id: 't1', title: 'New Shoes', amount: 69.9, date: DateTime.now()),
    TranSaction(
        id: 't2',
        title: 'Weekly Groceries',
        amount: 16.53,
        date: DateTime.now())
  ];
  @override
  Widget build(BuildContext context) {
    return Column(
      children: _userTransacton.map(
        (tx) {
          return Card(
              child: Row(
            children: [
              Container(
                margin:
                    const EdgeInsets.symmetric(vertical: 20, horizontal: 30),
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.purple, width: 2)),
                padding: const EdgeInsets.all(10),
                child: Text(
                  //we use here string interpolation to output dollor sign
                  '\$${tx.amount}',
                  style: TextStyle(
                      fontWeight: FontWeight.bold,
                      color: Colors.purple,
                      fontSize: 25),
                ),
              ),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    tx.title,
                    style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
                  ),
                  SizedBox(
                    height: 10,
                  ),
                  Text(
                    DateFormat('y/m/d').format(tx.date),
                    style: TextStyle(color: Colors.blueGrey, fontSize: 15),
                  )
                ],
              )
            ],
          ));
        },
      ).toList(),
    );
  }
}

class TranSaction {
  final String id;
  final String title;
  final double amount;
  final DateTime date;
  TranSaction(
      {required this.id,
      required this.title,
      required this.amount,
      required this.date});
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source