【问题标题】:Too many positional arguments: 0 expected, but 1 found. Try removing the extra arguments位置参数太多:预期为 0,但找到了 1。尝试删除额外的参数
【发布时间】:2021-11-10 12:42:52
【问题描述】:

UserTransaction.dart

class UserTransactions extends StatefulWidget {
  @override
  _UserTransactionsState createState() => _UserTransactionsState();
}

class _UserTransactionsState extends State<UserTransactions> {
  final List<Transaction> _userTransactions = [
    Transaction(
      id: "y1",
      title: "My gift",
      amount: 98.5,
      date: DateTime.now(),
    ),
    Transaction(
      id: "y2",
      title: "My Fruits",
      amount: 18.5,
      date: DateTime.now(),
    ),
  ];

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

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

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        NewTransaction(_addNewTransaction),
        TransactionList(_userTransactions),
      ],
    );
  }
}

new_transaction.dart

import 'package:flutter/material.dart';

class NewTransaction extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Function addTx = () {};
    final titleController = TextEditingController();
    final amountController = TextEditingController();

    NewTransaction(this.addTx);

    return Card(
      elevation: 5,
      child: Container(
        padding: EdgeInsets.all(10),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(labelText: "Title"),
              // onChanged: (val) {
              //   titleInput = val;
              // },
              controller: titleController,
            ),
            TextField(
              decoration: InputDecoration(labelText: "Amount"),
              // onChanged: (val) => amountInput = val,
              controller: amountController,
            ),
            FlatButton(
              onPressed: () {
                addTx(
                  titleController.text,
                  double.parse(amountController.text),
                );
              },
              child: Text("Add Transaction"),
              textColor: Colors.purple,
            )
          ],
        ),
      ),
    );
  }
}

我收到关于位置参数的错误。错误:位置参数太多:预期为 0,但找到了 1。尝试删除额外的参数。我多次尝试解决此错误,但我不明白如何解决此错误。所以,请帮我解决这个错误。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    你在 build Widget 中声明了这个构造函数 NewTransaction(this.addTx); 你应该在任何方法之前声明它

    import 'package:flutter/material.dart';
    
    class NewTransaction extends StatelessWidget {
    
    final Function addTx = () {};
    final titleController = TextEditingController();
    final amountController = TextEditingController();
    
    NewTransaction(this.addTx);
    
      @override
      Widget build(BuildContext context) {
        //remove this Code outside the build method
        /** final Function addTx = () {};
        final titleController = TextEditingController();
        final amountController = TextEditingController();
    
        NewTransaction(this.addTx);
    **/
        return Card(
                //Your Code Here
          );
        }
      }
    

    【讨论】:

      【解决方案2】:

      你应该在构建上下文之外声明一个构造函数

      import 'package:flutter/material.dart';
      
      class NewTransaction extends StatelessWidget {
       final Function addTx = () {};
          final titleController = TextEditingController();
          final amountController = TextEditingController();
      
          NewTransaction(this.addTx);
        @override
        Widget build(BuildContext context) {
       
          return Card(
            elevation: 5,
            child: Container(
              padding: EdgeInsets.all(10),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.end,
                children: <Widget>[
                  TextField(
                    decoration: InputDecoration(labelText: "Title"),
                    // onChanged: (val) {
                    //   titleInput = val;
                    // },
                    controller: titleController,
                  ),
                  TextField(
                    decoration: InputDecoration(labelText: "Amount"),
                    // onChanged: (val) => amountInput = val,
                    controller: amountController,
                  ),
                  FlatButton(
                    onPressed: () {
                      addTx(
                        titleController.text,
                        double.parse(amountController.text),
                      );
                    },
                    child: Text("Add Transaction"),
                    textColor: Colors.purple,
                  )
                ],
              ),
            ),
          );
        }
      }
      

      【讨论】:

      • 感谢您回答这个问题
      猜你喜欢
      • 2021-09-21
      • 2022-07-20
      • 1970-01-01
      • 2021-11-09
      • 2020-04-20
      • 2021-10-16
      • 2021-01-12
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多